机器学习之线性回归原理及sklearn实现
1、线性回归问题
以房价预测为例,占地面积为变量x1,房屋年龄为变量x2,房屋价格为预测变量y。
为什么叫线性回归问题,因为目标函数是一个线性回归函数。什么是目标函数?
(1)、目标函数:目标函数是我们需要的最终结果,及最终拟合了数据的函数。
假设目标函数为y = θ1*x1 + θ2*x2 + b。
那么我们如何得到目标函数中的参数呢?如何使用数据来拟合得到最好的θ1、θ2以及b就是接下来要做的事情。
(2)、损失函数:损失函数是我们得到的预测值y_pre与真实数据中的y的某种方式计算出来的差值。那么也就是说损失函数越小,就代表着我们目标函数的参数越好。
一般线性回归问题我们用均方差来作为损失函数,即 J(θ1,θ2)=∑(y-y_pre)^2 #小弟能力有限,暂时博客没什么好的书写方式,公式里的符号能理解就好
也就是说我们现在的问题就是在这个J(θ1,θ2)上面找事情了,找到它最小的情况,并且计算出这时的θ1和θ2以及b
2、解决途径
对于损失函数J(θ1,θ2)=∑(y-y_pre)^2,我们最常用的方式自然是传说中的梯度下降法了。当然不只是梯度下降法,也有其他的解法,如最小二乘法等。
(1)、梯度下降
梯度下降的原理如其名所述,取其梯度,按梯度下降,然后下降到最低点,就得到我们最想要的最小的J了。
梯度是什么?对于损失函数 J = ∑(y-y_pre)^2 来说,梯度就是J分别对θ1和θ2求偏导数,即{∂J/∂θ1,∂J/∂θ2}
那梯度下降就是参数减去这个偏导数喽。
θ1 = θ1 - ∂J/∂θ1
θ2 = θ2 - ∂J/∂θ2
这样一次减法操作就是一次梯度下降,梯度下降法正是通过这样一次次的减法,直到最后使得θ1和θ2趋于稳定,也就是J达到或者接近最小值。
那么为什么这样一次次的减法就能得到结果呢?我们画个图来看一下。
因为三维图不太会画,就用二维图像,一个θ值来分析。一个参数两个参数都是一样的,只不过多一个减法公式。
如图,假设初始的θ值位于A点,那么A点的偏导,如斜线所示,是一个正数,那么θ = θ - ∂J/∂θ(正数)这样的减法公式之后,横左边必然是变小了,A点自然是向左移动了,假设从A点移动到了B点,那么可以发现J的值确实是变小了。如果A点在函数最小值的的左边呢?
如图,如果一开始在C点,这时的偏导是负数,那么θ = θ - ∂J/∂θ(负数) 之后,theta变大了,横坐标右移,自然J也就变小了,这也就是说不论哪种情况下进行梯度下降,J都是在减小的。
损失函数J梯度下降公式是这样的,以一个θ举例: θ = θ - λ*(∂J/∂θ),多出一个λ,这个λ是超参数,是人为设定的,也就是可以我们可以控制梯度下降的步长,是下降的快一点还是慢一点。这里不是设置的越大越好,因为如果λ太大,会导致发生从A点直接下降到C点这种情况,也就是说步子太大了,直接跨过了最低点。
以上就是线性回归Linear Regression以及梯度下降GD的原理,下面我们来看一下sklearn中如何使用。
# 本篇学习线性回归算法,使用自带的波士顿放假数据集
#导入包
from sklearn import datasets
from sklearn import linear_model
import pandas as pd
import matplotlib.pyplot as plt
#导入数据,切分为数据集X以及目标集y
data = datasets.load_boston()
X = pd.DataFrame(data['data'],columns=data.feature_names)
y = pd.DataFrame(data['target'],columns=data.)
#生成模型对象,并fit数据,预测结果
reg = linear_model.LinearRegression()
reg.fit(X,y)
predictions = reg.predict(X)
print(predictions)
sklearn的使用十分简单,以上就是使用sklearn做的一个线性回归预测房价,当然没有什么模型评价、模型优化等等,这些之后再聊。