Linear Regression 线性回归 matlab实现

来源:互联网 发布:多系统数据同步 编辑:程序博客网 时间:2024/06/11 03:22

Load Data

数据形式:每行一个样例,最后一列是标签。
m个样例,n个特征。

fileName = 'xxx.txt';data = load(fileName);m = size(data, 1);n = size(data, 2);X = data(:, 1 : n - 1);y = data(:, n);

Feature Normalization

正规化X,并加入1列的1。

[X mu sigma] = featureNormalize(X);% 加入x0X = [ones(m, 1) X];

函数:

function [X_norm, mu, sigma] = featureNormalize(X)    n = size(X, 2);    X_norm = X;    mu = zeros(1, n);    sigma = zeros(1, n);    % 对每个feature进行正规化    for i = 1 : n        mu(1, i) = mean(X(:, i));        sigma(1, i) = std(X(:, i));        X_norm(:, i) = (X(:, i) - mu(1, i)) ./ sigma(1, i);    endend

Gradient Descent

这是批梯度下降的实现。
此处时间复杂度为O(n2m),总的来说还是要估计上matlab计算矩阵乘法的复杂度。
更新式子为:θj:=θj+αmi=1(y(i)hθ(x(i)))x(i)j
在每次迭代中,保存下cost function的值,以便最后能输出查看其收敛性质。

alpha = 0.1;num_iters = 50;theta = zeros(n, 1);[theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters);% Plot the convergence graphfigure;plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);xlabel('Number of iterations');ylabel('Cost J');% Display gradient descent's resultfprintf('Theta computed from gradient descent: \n');fprintf(' %f \n', theta);fprintf('\n');

gradientDescent函数

function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)    n = size(X, 2);    m = length(y);    J_history = zeros(num_iters, 1);    for iter = 1:num_iters        preTheta = theta;        for j = 1 : n            theta(j) = preTheta(j) + alpha / m * (sum((y - X * preTheta)’* X(:,j)));        end           % 保存下所有J,可以查看收敛情况           J_history(iter) = computeCost(X, y, theta);     endend

Estimate

输入特征的行向量feat=[x,x,x,x…],输出估计。
由于之前进行了正规化,在估计时也需要正规化。

function ret = estimate(feat, theta, mu, sigma)    %正规化    feat = (feat - mu) ./ sigma;    feat = [1 feat];    %结果    ret = feat * theta;end

Normal Equation

直接使用式子:θ=(XTX)1XTy计算。
此处复杂度取决于matlab求逆和矩阵乘法的复杂度。

clear;fileName = 'xxx.txt';data = load(fileName);m = size(data, 1);n = size(data, 2);X = data(:, 1 : n - 1);y = data(:, n);[X mu sigma] = featureNormalize(X);X = [ones(m, 1) X];%----------------------------------%theta = inv(X' * X) * X' * y;%----------------------------------%feat = [xxxxx xxxxx];res = estimate(feat, theta, mu, sigma);fprintf('%f', res);
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 事业单位每年福利体检有乙肝怎么办 高考失利后我该怎么办 初三了科学总是考不好怎么办 初三学生三模考的不好怎么办 高考体检检查出乙肝怎么办 高考体检单丢了怎么办 小腿弯曲没发育好怎么办? 辅警考试体能测试不合格怎么办 跑步跑不动怎么办腿软 人胖跑步跑不动怎么办 不工作每天很累怎么办 电大本科文凭毕业证掉了怎么办 要求全日制本科自考本科怎么办 毕业证被学校扣了怎么办 自考本科档案没有密封怎么办 艺术生统考没过怎么办 本科科目没考过怎么办 军校体检条丢了怎么办 学美术考了大专怎么办 音基试唱音不准怎么办 音基证书丢了怎么办 职称计算机证书丢了怎么办 30岁了 开始怀旧怎么办 31岁了 缺乏运动怎么办 30多了还一事无成未来怎么办 导师说名额已满怎么办 在中国想当大官怎么办 站久了小腿变粗怎么办 苹果x锁屏延迟怎么办 被扇了巴掌耳痛怎么办 被扇了巴掌耳鸣怎么办 水兵舞不会扭胯怎么办 我的字写得很丑怎么办 二年级学生不会造句怎么办 w10下载种子文件失败怎么办 宝宝挂水手肿了怎么办 lol有英雄皮肤没英雄怎么办 qq聊天图标粉色钥匙怎么办 和舍友相处不来怎么办 被舍友偷了东西怎么办 体育生没过线怎么办