为了账号安全,请及时绑定邮箱和手机立即绑定

机器学习从入门到XX(二):多元线性回归和正规方程

标签:
机器学习

多元线性回归

多特征

多个特征变量也称为多元线性回归(multivariate linear regression)。先解释一些符号含义:

  • x(i)表示训练集中的第i组用例

  • x(i)j表示第i组用例中的第j个特征变量

  • m表示训练用例的总数

  • n表示每组用例的特征数

多个特征变量有如下假设函数:


hθ(x)=θ0+θ1x1+θ2x2+θ3x3+...+θnxn


比如,我们可以认为

θ0

是房子的基础价格,

θ1

是每平米价格,

x1

是面积;

θ2

是每层价格,

x2

是层数;等等。


使用矩阵乘法来表示上面这个函数:


hθ(x)=[θ0θ1⋯θn]x0x1⋮xn=θTx


上一篇,曾给出过关于两个特征

(θ0,θ1)

时候的算法推导式



θ0:=θ0−α1m∑i=1m(hθ(xi)−yi)



θ1:=θ1−α1m∑i=1m((hθ(xi)−yi)xi)


应用到多个特征时,不难想到推导式应该如下:


}repeat until convergence:{θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)0θ1:=θ1−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)1θ2:=θ2−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)2⋯


即:


}repeat until convergence:{θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)jfor j := 0...n


多元线性回归实践

通过将训练样本中不同的特征的取值范围限制在大致相同的范围内,可以加快梯度下降的收敛速度。这是因为,当输入的范围比较小的时候,

θ

的递减速度比较快,而输入的范围比较大的时候,递减速度会变慢。理想情况下,可以通过对输入变量进行处理,将其限制在一个范围内,这个范围可能是−1 ≤ x ≤ 1−0.5 ≤ x ≤ 0.5。并不需要严格在这个范围内,因为我们的目的仅仅是让算法执行速度更快一些。


有两种技术做到这点,分别是特征缩放(feature scaling)均值归一化(mean normalization)。特征缩放是将输入值除以输入变量的范围(例如最大值减最小值),得到一个新的仅为1的范围。均值归一化是将输入值减去平均值后,再除以输入变量的范围,得到一个0左右的范围:


xi:=xi−μisi



ui

表示特征的平均值,

si

可以是(max-min)表示的范围,或者是标准差。例如,如果

xi

表示房价,范围是100到2000,平均为1000,那么:



xi:=price−10002000−100


我们需要保证我们的梯度下降算法工作正常。绘制一张图,x轴是迭代次数,y轴是

J(θ)

,随着迭代次数的增加,

J(θ)

应该呈下降趋势,否则,应当减小α。另外,为了测试收敛,可以设定一个E值,当前后两次

J(θ)

的下降小于这个值时,认为收敛,比如可以让E取值为

10−3

,在实践中这个阈值不容易确定。


clipboard.png

我们可以通过多种方式改善我们的假设函数。我们可以将多个特征合并成一个,比如将

x1

x2

合并成

x3

,使

x3=x1∗x2


有时,我们无法使用一条直线来定义假设函数,因为那样可能并不合适。这个时候,可以把假设函数设计成二次函数、三次函数、平方根函数等。例如,可以把

hθ(x)=θ0+θ1x1

设计成二次函数

hθ(x)=θ0+θ1x1+θ2x21

或三次函数

hθ(x)=θ0+θ1x1+θ2x21+θ3x31

,这样的拟合效果可能更好。对于上面的三次函数,我们可以引入两个新的特征

x2

x3

,使得

x2=x21

x3=x31

。还可以考虑平方根函数

hθ(x)=θ0+θ1x1+θ2x1−−√

。需要记得,这个时候特征缩放就显得格外重要了。


正规方程

梯度下降给出了最小化代价函数的算法,本节我们要讨论的另一种方式,是一种不基于迭代的算法,而是通过一个直接的计算公式,称为正规方程(Normal Equation)


θ=(XTX)−1XTy


下图是一个例子,以及上述公式中Xy的定义:

clipboard.png

X是指一个m x n+1的矩阵,其中m是指样本数量,n是特征个数,之所以是n+1,是因为第一列用全1填充。y是一个m x 1的向量,表示样本的结果。可以从数学上证明正规方程得到的θ能使代价函数最小化。对于使用正规方程计算时,我们无需考虑上面提到的特征缩放和归一化。

对比一下梯度下降和正规方程解法的优劣:

梯度下降正规方程
需要调整α无需调整α
需要多次迭代无需迭代
复杂度O(kn2)计算XTX−1时的复杂度为O(n3)
适用于n很大的时候n很大时很慢(>10000)

正规方程还有一个问题是,

XTX

未必是可逆的(不可逆的矩阵也称为奇异阵)。在使用octave计算正规方程是,通常使用pinv函数而不是inv函数,前者在

XTX

不可逆的情况下也能工作。


导致

XTX

不可逆的因素可能包括:


  • 特性冗余,即两个特性之间联系比较紧密,比如存在线性依赖关系

  • 特性比样本多,即(m ≤ n)

解决办法通常就是删除一些冗余的特性,或者简化特性。

线性回归代码总结

在整个线性回归问题中,主要有如下几个算法需要实现:

  • 代价函数

  • 梯度下降算法

  • 特征缩放

  • 正规方程

使用octavematlab利于快速验证算法和模型。在使用这两种编程语言和平台时,要始终以向量和矩阵的思维方式去思考,这样才能更好的利用两种语言的优势,将很多看似复杂的公式用几行代码实现。

前面定义过代价函数:


J(θ)=12m∑i=1m(hθ(xi)−yi)2


这里的

θ

就是向量的概念,而不是单个变量,可以用如下代码实现它,X是输入矩阵:


y = data(:, 2); m = length(y); X = [ones(m, 1), data(:,1)]; J = sum((X * theta  - y).^2) / (2*m);

前面归纳过低度下降函数的算法:


}repeat until convergence:{θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)jfor j := 0...n


用代码实现:

for iter = 1:num_iters     theta = theta - (sum((X * theta - y) .* X) * alpha / m)'; end

对于特性缩放,可以这么实现:


xi:=xi−μisi


mu = mean(X); sigma = std(X); X_norm = (X - mu) ./ sigma;

正规方程就比较简单了:


θ=(XTX)−1XTy


theta = pinv(X' * X) * X' * y;

原文链接:https://segmentfault.com/a/1190000013654914

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消