Andrew机器学习笔记1:线性回归 linear regression

根据斯坦福大学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=12mi=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αmi=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θ2y=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范围内均可)。特征缩放公式:

xxμ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时比较适合

你可能感兴趣的:(机器学习)