跟我一起学scikit-learn16:线性回归算法

线性回归算法是使用线性方程对数据集拟合得算法,是一个非常常见的回归算法。本章首先从最简单的单变量线性回归算法开始介绍,然后介绍了多变量线性回归算法,其中成本函数以及梯度下降算法的推导过程会用到部分线性代数和偏导数;接着重点介绍了梯度下降算法的求解步骤以及性能优化方面的内容;最后通过一个房价预测模型,介绍了线性回归算法性能优化的一些常用步骤和方法。

1.单变量线性回归算法

我们先考虑最简单的单变量线性回归算法,即只有一个输入特征。

1.预测函数

针对数据集x和y,预测函数会根据输入特征x来计算输出值h(x)。其输入和输出的函数关系如下:
h θ ( x ) = θ 0 + θ 1 x {h}_{\theta}(x)={\theta}_{0}+{\theta}_{1}x hθ(x)=θ0+θ1x
这个方程表达的是一条直线。我们的任务是构造一个 h θ {h}_{\theta} hθ函数,来映射数据集中的输入特征x和输出值y,使得预测函数 h θ {h}_{\theta} hθ计算出来的值与真实值y的整体误差最小。构造 h θ {h}_{\theta} hθ函数的关键就是找到合适的 θ 0 {\theta}_{0} θ0 θ 1 {\theta}_{1} θ1的值, θ 0 {\theta}_{0} θ0 θ 1 {\theta}_{1} θ1成为模型参数。

假设我们有如下的数据集:
NeatReader-1559784236614.png

假设模型参数 θ 0 = 1 {\theta}_{0}=1 θ0=1 θ 1 = 3 {\theta}_{1}=3 θ1=3,则预测函数为 h θ ( x ) = 1 + 3 x {h}_{\theta}(x)=1+3x hθ(x)=1+3x。针对数据集中的第一个样本,输入为1,根据模型函数预测出来的值是4,与输出值y是吻合的。针对第二个样本,输入为2,根据模型函数预测出来的值是7,与实际输出值y相差1。模型的求解过程就是找出一组最合适的模型参数 θ 0 {\theta}_{0} θ0 θ 1 {\theta}_{1} θ1,以便能最好地拟合数据集。

怎样来判断最好地拟合了数据集呢?没错,就是使用成本函数(也叫损失函数)。当拟合成本最小时,即找到了最好的拟合参数。

2.成本函数

单变量线性回归算法的成本函数是:
J ( θ ) = J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta)=J({\theta}_{0},{\theta}_{1})=\frac{1}{2m}\sum_{i=1}^m(h({x}^{(i)})-{y}^{(i)})^2 J(θ)=J(θ0,θ1)=2m1i=1m(h(x(i))y(i))2
其中, h ( x ( i ) ) − y ( i ) h({x}^{(i)})-{y}^{(i)} h(x(i))y(i)是预测值和真实值之间的误差,故成本就是预测值和真实值之间误差平方的平均值,之所以乘以1/2是为了方便计算。这个函数也称为均方差公式。有了成本函数,就可以精确地测量模型对训练样本拟合的好坏程度。

3.梯度下降算法

有了预测函数,也可以精确地测量预测函数对训练样本的拟合情况。但怎么求解模型参数 θ 0 {\theta}_{0} θ0 θ 1 {\theta}_{1} θ1的值呢?这时梯度下降算法就排上了用场。

我们的任务是找到合适的 θ 0 {\theta}_{0} θ0 θ 1 {\theta}_{1} θ1,使得成本函数 J ( θ 0 , θ 1 ) J({\theta}_{0},{\theta}_{1}) J(θ0,θ1)最小。为了便于理解,我们切换到三维空间来描述这个任务。在一个三维空间里,以 θ 0 {\theta}_{0} θ0作为x轴,以 θ 1 {\theta}_{1} θ1作为y轴,以成本函数 J ( θ 0 , θ 1 ) J({\theta}_{0},{\theta}_{1}) J(θ0,θ1)作为z轴,那么我们的任务就是要找出当z轴上的值最小的时候所对应的x轴上的值和y轴上的值。

梯度下降算法的原理是:先随机选择一组 θ 0 {\theta}_{0} θ0 θ 1 {\theta}_{1} θ1,同时选择一个参数 α \alpha α作为移动的步长。然后,让x轴上的 θ 0 {\theta}_{0} θ0和y轴上的 θ 1 {\theta}_{1} θ1分别向特定的方向移动一小步,这个步长的大小就由参数 α \alpha α决定。经过多次迭代之后,x轴和y轴上的值决定的点就慢慢靠近z轴上的最小值处,如图所示。
figure5_1.png
这是个等高线图,就是说在我们描述的三维空间里,你的视角在正上方,看到一圈一圈z轴值相同的点构成的线。在上图中,随机选择的点在 X 0 {X}_{0} X0处,经过多次迭代后,慢慢地靠近圆心处,即z轴上最小值附近。

问题来了, X 0 {X}_{0} X0(由 [ θ 0 , θ 1 ] [{\theta}_{0},{\theta}_{1}] [θ0,θ1]描述)怎么知道往哪个方向移动,才能靠近z轴上最小值附近?答案是往成本函数逐渐变小的方向移动。怎么表达成本函数逐渐变小的方向呢?答案是偏导数。

可以简单地把偏导数理解为斜率。我们要让 θ j {\theta}_{j} θj不停地迭代,由当前 θ j {\theta}_{j} θj的值,根据 J ( θ ) J(\theta) J(θ)的偏导数函数,算出 J ( θ ) J(\theta) J(θ) θ j {\theta}_{j} θj上的斜率,然后在乘以学习率 α \alpha α,就可以让 θ j {\theta}_{j} θ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值