【回归预测】线性回归

什么是线性回归

线性回归就是给定一个确定的函数公式,当我们有新的样本进来的时候我们可以通过这个公式预测出该样本的结果。线性回归最常见的例子就是房价的预测。就如我第一篇文章说的,当我们得到一个面积与房价的关系方程的时候。我们可以预测任意面积房子的价格。
那么问题一瞬间就转变到我们该如何去求出这个函数公式。

线性回归的模型

假设我们拥有如下一批量关于房屋面积与房价的数据。在这里插入图片描述
我们可以令放假为y,令面积为x。我们可以初步认定我们的模型是一个一元一次方程:y=a+θ*x。
在这里插入图片描述
如此类推,线性回归预测函数就是:
在这里插入图片描述
综合起来也可以是:
在这里插入图片描述
其中w和b是通过模型学习之后得到的参数。所以接下来的重点就是如何去确定 ω \omega ω,b了。定义他们的关键在于如何定义f(x)和y的区别。y就是我们输入的一个矩阵,是数据集实际的值。f(x)是通过模型预测得到的式子计算出来的值。在回归度量中我们经常使用均方误差来衡量模型,所以我们可以使均方误差值最小,既得到:
( ω ∗ , b ∗ ) = a r g m i n ω , b ∑ m = i ∞ ( f ( x i ) − y i ) 2 ( 式 2 ) (\omega^*,b^*)=arg min_\omega,_b\sum_{m=i}^\infty (f(x_i) - y_i)^2 (式2) ω,b=argminω,bm=i(f(xi)yi)22
对应展开可以得到:
( ω ∗ , b ∗ ) = a r g m i n ω , b ∑ m = i ∞ ( y i − ω ∗ x i − b ) 2 ( 式 2 ) (\omega^*,b^*)=arg min_\omega,_b\sum_{m=i}^\infty (y_i-\omega*x_i-b)^2(式2) ω,b=argminω,bm=i(yiωxib)22
事实上,均方误差在机器学习中使分厂有用的。他对应常用的欧式距离。而在使均方误差最小化的方法,我们常用最小二乘法。所谓的最小二乘法,其实就是找一条合适的线去拟合我们这个的数据集。(PS:小编现在的工作用比较多的使非负最小二乘法=。=,具体都是什么这里就不做详细解释了)
那么你可能会问,直到公式又如何,怎么才能求出来最后的极值呢?这里引入一个叫梯度下降的概念。大致意思就是通过不断求导来求出极值。从式1可以自导,我们的函数因为使2次方,所以生成的图是U形状的。(忘记二次方程的朋友点这里)求导其实就是求函数的斜率。如下图缩视,已知“U”的最低点就是我们的极值点,而这个点的求导结果等于0。那么我们可以通过不断求导,让结果不断的趋于零,从而得到我们的极值。就相当于红->黄->蓝->绿的求导顺序,而绿线刚好就是求导结果等于0的时候。
在这里插入图片描述
回到线性回归里面,我们可以基于式2分别对 ω \omega ω和b进行求导得:
d ( ω , b ) d ( ω ) = 2 ( ω ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) ( 式 3 ) \frac{d(\omega,b)}{d(\omega)}=2(\omega\sum_{i=1} ^mx_i^2-\sum_{i=1} ^m(y_i-b)x_i)(式3) d(ω)d(ω,b)=2(ωi=1mxi2i=1m(yib)xi)3
d ( ω , b ) d ( b ) = 2 ( m b − ∑ i = 1 m ( y i − ω x i ) ) ( 式 4 ) \frac{d(\omega,b)}{d(b)}=2(mb-\sum_{i=1} ^m(y_i-\omega x_i))(式4) d(b)d(ω,b)=2(mbi=1m(yiωxi))4
然后分别令式3和式4为0。这样就能得到我们的最优解。下面的公式我就不推出来啦,打出来不容易,请容我皮一波,大家自己推导吧!哈哈哈哈。

代码样例

说了这么多乱起八糟的数学推导,是不是有点云里雾里的感觉。没关系,接下来我们继续上面的例子写一个简单的线性回归模型,预测出最后的房价

from sklearn import linear_model

# 我们有49行数据,现在划分数35笔数据为训练集,14笔数据为测试集合
# 划分x训练集
diabetes_X_train = np.array(room_df['RoomSize'][:25])
diabetes_X_test = np.array(room_df['RoomSize'][25:])
# 这里需要将x转2为数组,至于为什么请查看矩阵乘法相关知识
diabetes_X_train = diabetes_X_train.reshape(25,1)
diabetes_X_test = diabetes_X_test.reshape(25,1)
# 划分y训练集
diabetes_y_train = np.array(room_df['Price'][:25])
diabetes_y_test = np.array(room_df['Price'][25:])
# 创建线性回归模型并训练数据
regr = linear_model.LinearRegression().fit(diabetes_X_train, diabetes_y_train)

# w系数的值
print('系数: ', regr.coef_)



# 画出二位散点图
import matplotlib.pyplot as plt
# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test,  color='black')
plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue',
         linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

总结

线性回归是最基础的机器学习算法之一。但它也包含很多知识点以及扩充点。它数据监督学习。
总体来讲就是给定数据集,然后拟定一条方程,再通过求导的方式求出极值,也就是最拟合数据的一条线。从而达到输入任意x对应预测出y的值的效果。
点我阅读更多算法分享

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值