根据斯坦福大学Andrew NG的机器学习课程整理。
1. 单变量线性回归(预测房价–尺寸)
给定房子的大小尺寸和其售价,建立线性模型。
1.1数据处理
将X、θ 处理如下格式:
X=[1x1]θ=[θ0θ1]
将X、θ 写成矩阵形式,有利于matlab编程实现(matlab在内部对矩阵运算进行优化,比for循环运行时间短)。
1.2假设函数(hypothesis)
hθ=θ0+θ1x=θTX
1.3代价函数(cost function)
J=12m∑i=1m(hθ(x(i))−y(i))2
平方误差代价函数是解决回归问题最常用的手段。J表示预测值与实际值误差,J越小越好。计算代价函数如下:
predictions=X*theta;
J=1/(2*m)*sum((predictions-y).^2);
1.4梯度下降(gradient descent)
梯度下降是求代价函数局部最小值的一种方法,其基本思想:沿当前梯度下降最快的方向搜索。因为线性回归的代价函数J是一个向下凸函数(弓形函数),因此,向下寻找最低点即可获得合适的假设函数参数(θ )。
计算步骤:
1.对θ0θ1 进行初步猜想(通常将其设置为0);
2.不断改变θ0θ1 ,使J减小直到找到J的最小值或者局部最小值。
计算公式:
θj=θj−α∂∂θjJ(θ0,θ1)=θj−αm∑i=1m(hθ(x(i))−y(i))x(i)j
NOTE:需要对θ0θ1 同时更新。
temp0=theta(1)-alpha/m*sum(X*theta-y);
temp1=theta(2)-alpha/m*sum((X*theta-y).*X(:,2));
theta(1)=temp0;
theta(2)=temp1;
梯度下降函数值应随着迭代次数的增加而减小,在debug时,观察J函数值的变换有利于对模型参数正确与否的判断。学习率α控制θj 更新步长,若取值过小,则J收敛速度过慢,若取值过大,则J更新可能掠过最低点,导致J越更新值越大,即无法收敛or发散。
2. 多变量线性回归(预测房价–尺寸&&房间数量)
2.1 数据处理
X=⎡⎣⎢111x11x21x31x12x22x32⎤⎦⎥θ=⎡⎣⎢θ0θ1θ2⎤⎦⎥y=⎡⎣⎢y1y2y3⎤⎦⎥
2.2特征缩放(feature scaling)
选取部分X数据观察,第二列:面积,第三列:房间数量
1 | 面积 | 房间数量 |
---|---|---|
1 | 2104 | 3 |
1 | 1600 | 3 |
1 | 2400 | 3 |
1 | 1416 | 2 |
1 | 3000 | 4 |
我们可以发现,面积取值范围远大于房间数量取值范围。如果直接使用数据进行计算,梯度下降速度较慢。当特征值相似时,梯度下降法收敛更快。通常,将特征缩放到-1~1之间(-3~3到-0.3~0.3范围内均可)。特征缩放公式:
x←x−μs
μ为数据x对应的特征均值,s为标准差(max-min)。
NOTE:预测实际数据时,也需要对数据进行缩放。
n=size(X,2);
for i=1:n
mu(i)=mean(X(:,i));
sigma(i)=std(X(:,i));
X_norm(:,i)=(X(:,i)-mu(i))./sigma(i);
end
n为特征个数,code对每个特征均进行了缩放。
接下来的梯度下降等计算方法与单变量线性回归形同。
2.3正规方程(normal equation)
除了特征下降法,正规方程也可以获得θ:
θ=(XTX)−1XTy
code: pinv(x’*x)*x’*y
梯度下降与正规方程比较:
梯度下降 | 正规方程 |
---|---|
需要计算α | 不需要 |
需要迭代多次 | 不需要 |
当特征数目很大时,仍能正常工作 | 需要计算矩阵乘法,当特征数很大时,计算慢 |
特征数<10000时比较适合 |