斯坦福机器学习第二讲学习笔记及MATLAB实现
代码及笔记打下载地址:http://download.csdn.net/detail/misscoder/9381026
第一部分–笔记
一:内容提纲
1:线性回归
2:梯度下降
3:正规方程组
二:学习内容
学习第一个监督学习算法,同时也属于线性回归问题范畴,教学引入例子是房价预测问题。本节课程提供了线性回归问题两种求解方法—梯度下降和正规方程组法。
三:监督学习的内容和步骤
如上图,首先确定h的形式(如线性回归问题中假设h是特征的线性函数);然后设计学习算法,该算法根据训练样本集求解h中参数,确定h最终形式;最后基于h,可对任意输入变量x进行预测:y=h(x)。
梯度下降法和正规方程法是线性回归问题中求解h的两种算法。
四:梯度下降法
核心思想:重复沿最陡方向减小成本函数J(),直到算法收敛。
数学表示:依照如下表达式重复更新参数直到算法收敛
算法收敛的判断:θ变化不大;J(θ)变化不大;J(θ)取最小值
备注:α的合理取值关乎算法成败,若取值过小,则迭代次数过多;若取值过大,则可能会跳过最优解,使θ、J(θ)以及整个算法无法达到收敛状态。实验结果表面,因根据训练样本以及算法运行情况调整α,寻找能使算法收敛的较大α
五:正规方程法
核心思想:求解矩阵方程∇_θ J(θ)=0,则h(x)=θ^T x
数学表示:
第二部分—代码
一:梯度下降法
1:算法实现函数。
% Function: 梯度下降法求解线性回归模型
% Create Time:2015/12/14
% Parameter:
% tx--训练样本输入
% ty--训练样本输出
% a --步长
% x --输入变量
% Steps:
% 1:沿梯度方向更新参数theta
% 2:计算此参数下的评价函数Jtheta
% 3: 判断算法是否收敛。若是,停止迭代。算法收敛时,theta,J收敛。
function y = laLMS(tx,ty,a,x)
[m,n] = size(tx);%m--样本数,n--特征数
tx0 = ones(m,1);
tx = [tx0 tx];
theta = zeros(1,n+1)';
y = 0;
for k = 1:1:80
% 1:沿梯度方向更新参数theta
oldTheta = theta;
for j = 1:1:n+1
dstep = 0;
for i = 1:1:m
dstep = dstep + (h_func(oldTheta',tx(i,:)) - ty(i))*tx(i,j);
end
theta(j) = theta(j) - a*dstep;
end
% 2:计算此参数下的评价函数Jtheta
J = J_func(tx,ty,theta);
Jold = J_func(tx,ty,oldTheta);
if abs(Jold-J)/Jold<0.0001
theta=oldTheta
y = h_func(theta,[1 x]);
break;
end
end
end
2:两个相关函数。
function h = h_func(theta,tx)
% 参数:tx--一个训练样本输入
% h --该训练样本输入预测值
h =dot(theta',tx);
end
function j = J_func(tx,ty,theta)
j = 0;
m = size(tx,1);
for i = 1:1:m
j = j + (h_func(theta',tx(i,:))- ty(i))^2;
end
j = j/2;
end
3:测试函数。
% Function: 测试线性回归问题两种解法
% Create Time:2015/12/14
% Parameter:
clc;
clear;
% 训练样本集一:
tx = [1 40 ;2 40 ;1 50 ;2 50 ;2 80 ;2 82 ;3 83 ;2 88 ;3 120 ;2 120 ];
ty = [805;807;1005;1007;1608;1646;1670;1769;2411;2407];
x = [2 110] ;
% 训练样本集二:
% tx = [1;2;3;4];
% ty = [1.1;2.2;2.7;3.8];
% x = 1.5 ;
y1= laLMS(tx,ty,0.00001,x);%第一组训练样本a=0.00001,第二组训练样本a=0.01
二:正规方程法
1:算法实现函数。
% Function: 正规方程法求解线性回归模型
% Create Time:2015/12/14
% Parameter:
% tx--训练样本输入
% ty--训练样本输出
% x --输入变量
% Steps:
% 1:沿梯度方向更新参数theta
% 2:计算此参数下的评价函数Jtheta
% 3: 判断该函数是否为局部最小值。若是,停止迭代
function y = laNormalEquations(tx,ty,x)
[m,n] = size(tx);%m--样本数,n--特征数
tx0 = ones(m,1);
X = [tx0 tx];
Y = ty;
theta = pinv(X'*X)*X'*Y
size(theta)
size([1 x])
y = dot(theta',[1 x]);
end
2:测试函数。
% Function: 测试线性回归问题两种解法
% Create Time:2015/12/14
% Parameter:
clc;
clear;
% 训练样本集一:
tx = [1 40 ;2 40 ;1 50 ;2 50 ;2 80 ;2 82 ;3 83 ;2 88 ;3 120 ;2 120 ];
ty = [805;807;1005;1007;1608;1646;1670;1769;2411;2407];
x = [2 110] ;
% 训练样本集二:
% tx = [1;2;3;4];
% ty = [1.1;2.2;2.7;3.8];
% x = 1.5 ;
y2= laNormalEquations(tx,ty,x);