【吴恩达机器学习】线性回归算法Matlab实现
⼀,单变量线性回归:
1. 数据分布,x轴是属性城市⼈⼝,y轴是标签值盈利:
2. ⽬的:使⽤⼀个线性函数去拟合上⾯这些数据;
算法三要素:
1)设置线性函数,即假设函数(Hypothesis);
2)选定损失函数 J,
3)梯度下降,到使得J值最⼩时,对应的theta_0, theta_1。
J值最⼩,预测的h_theta(x)值就会越接近标签纸y
3. 梯度下降:
损失函数J的最⼩值,⾼数知识可知对函数求导等于零,对应的点即为极值点,但有些函数不能直接求出倒数值,所以需要梯度下降逐渐的趋向最⼩值。
梯度下降过程如下所⽰,便于分析,这⾥假设线性函数为 theta_1 * x, 没有 theta_0,theta = theta - alpha * K, K即为斜率,迭代变化\theta_1值,使得J值为0
其中,迭代过程:
4. Matlab实现:
clc;
clear;
data = load('D:/Code/');
X = data(:,1);
y = data(:,2);
figure,
plot(X, y, 'r*', 'MarkerSize', 5); % 5控制*的⼤⼩
% x加了⼀列,变成 (97,2)
m = length(y);
X = [ones(m, 1), data(:,1)];
% 初始化参数
theta = zeros(2, 1);
% Some gradient descent settings
iterations = 1500;
alpha = 0.01;
% 梯度下降,到最佳参数
theta = gradientDescent(X, y, theta, alpha, iterations);
hold on;
% keep previous plot visible
plot(X(:,2), X*theta, '-')
legend('Training data', 'Linear regression')
hold off
function theta = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y);
% 样本数量
for iter = 1:num_iters
H = X * theta;
%(97,2)*(2*1)=(97,1)
Sum = [0 ; 0]; %(2,1),记录偏导,求和
% theta_0更新
for i = 1 : m
Sum(1,1) = Sum(1,1) + (H(i) - y(i));
end
% theta_1更新
for i = 1 : m
Sum(2,1) = Sum(2,1) + (H(i) - y(i)) * X(i,2)';
end
theta = theta - (alpha * Sum) / m;
end
matlab求导end
关键代码:
Sum = [0 ; 0]; %(2,1),记录偏导,求和
% theta_0更新
for i = 1 : m
Sum(1,1) = Sum(1,1) + (H(i) - y(i));
end
% theta_1更新
for i = 1 : m
Sum(2,1) = Sum(2,1) + (H(i) - y(i)) * X(i,2)';
end
theta = theta - (alpha * Sum) / m;
5. 效果如下:
⼆,多变量的线性回归1. 多变量的例⼦,如下
2. 数据集下载,密码:ibtb:
画出数据分布:
3. 多变量的假设函数定义:
4. 多变量的损失函数:
5. 迭代过程如下:
⼿推⼀把:
发布评论