分享

机器学习教程 三-用scikit-learn求解一元线性回归问题

问题导读:
1、scikit-learn如何实现一元线性回归模型?
2、如何使用matplotlib画一元线性图像?
3、如何进行模型评估?




上一篇:机器学习教程 二-安装octave绘制3D函数图像

一元线性回归是最简单的一种模型,但应用广泛,比如简单地预测商品价格、成本评估等,都可以用一元线性模型,本节主要讲解scikit-learn一元线性回归的使用以及作图说明

一元线性回归

y=f(x)叫做一元函数,回归的意思就是根据已知数据复原某些值,线性回归(regression)就是用线性的模型做回归复原。
那么一元线性回归就是:已知一批(x,y)值来复原另外未知的值。

比如:告诉你(1,1),(2,2),(3,3),那么问你(4,?)是多少,很容易复原出来(4,4),这就是一元线性回归问题的求解
当然实际给你的数据可能不是严格线性,但依然让我们用一元线性回归来计算,那么就是找到一个最能代表已知数据的一元线性函数来做复原和求解

scikit-learn的一元线性回归

编写代码scikit_learn_linear_model_demo.py如下:
[mw_shl_code=applescript,true]import numpy as np
from sklearn.linear_model import LinearRegression

x = [[1],[2],[3],[4],[5],[6]]
y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
model = LinearRegression()
model.fit(x, y)
predicted = model.predict([13])[0]
print predicted[/mw_shl_code]
执行结果:
[mw_shl_code=applescript,true][[ 12.82666667]][/mw_shl_code]
这里面的model是一个estimator,它通过fit()方法来算出模型参数,并通过predict()方法来预测
LinearRegression的fit()方法就是学习这个一元线性回归模型:
y = a + bx

画一元线性图像

为了说明scikit-learn的回归效果,我们用matplotlib画图像试一下,先安装:
[mw_shl_code=applescript,true]pip install matplotlib[/mw_shl_code]
编写plot_linear.py如下:
[mw_shl_code=applescript,true]import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties()

plt.figure()
plt.title('this is title')
plt.xlabel('x label')
plt.ylabel('y label')
plt.axis([0, 25, 0, 25])
plt.grid(True)
x = [[1],[2],[3],[4],[5],[6]]
y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
plt.plot(x, y, 'k.')
plt.show()[/mw_shl_code]

执行后如下图:
2016-06-28_150010.jpg

事实上,我们可以把预测和作图两部分结合起来,如下:
[mw_shl_code=applescript,true]import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

x = [[1],[2],[3],[4],[5],[6]]
y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
model = LinearRegression()
model.fit(x, y)
x2 = [[0], [2.5], [5.3], [9.1]]
y2 = model.predict(x2)

plt.figure()
plt.title('linear sample')
plt.xlabel('x')
plt.ylabel('y')
plt.axis([0, 10, 0, 10])
plt.grid(True)
plt.plot(x, y, 'k.')
plt.plot(x2, y2, 'g-')
plt.show()[/mw_shl_code]

执行后画出图像如下:
2016-06-28_150056.jpg
这里面plot()函数的第三个参数非常简单:k表示卡其色khaki,g表示绿色green,r表示红色red,'.'表示点,'-'表示线

其他相关用法

方差计算:方差用来衡量样本的分散程度,方差公式是
2016-06-28_150134.jpg
用numpy库的已有的方法是:
[mw_shl_code=applescript,true]np.var([1,2,3,4,5,6], ddof=1)[/mw_shl_code]
得出方差为:3.5

其中ddof是无偏估计校正技术

协方差计算:协方差表示两个变量的总体变化趋势,如果朝同方向变化则为正,朝反方向变化则为负,不相关则为0,协方差公式是:
2016-06-28_150236.jpg
用numpy库的已有的方法是:
[mw_shl_code=applescript,true]np.cov([1,2,3,4,5,6], [1,2.1,2.9,4.2,5.1,5.8])[0][1][/mw_shl_code]
得出协方差为:3.43

事实上,方差/协方差就是线性方程的参数b:1.02
代入一个数据就可以得到a值:1 = a + 1.02 * 1,所以a=-0.02
因此回归方程就是y = -0.02 + 1.02 * x
因此预测x=13时,y=-0.02+1.02*13=13.24
这就是通过最小化成本函数来做回归


模型评估

R方度量方法可以评估线性回归效果,R方也叫确定系数,表示模型对现实数据的拟合程度。R方算法为:1-(残差平方和/样本总体平方和)

也可以用model.score()方法直接计算R方
[mw_shl_code=applescript,true]model.score(X_test, y_test) [/mw_shl_code]

来源:SharEDITor



相关文章

机器学习教程 一-不懂这些线性代数知识 别说你是搞机器学习的
http://www.aboutyun.com/forum.php?mod=viewthread&tid=18997



机器学习教程 二-安装octave绘制3D函数图像
http://www.aboutyun.com/thread-19006-1-1.html


机器学习教程 三-用scikit-learn求解一元线性回归问题
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19020


机器学习教程 四-用scikit-learn求解多元线性回归问题
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19042


机器学习教程 五-用matplotlib绘制精美的图表
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19060


机器学习教程 六-用scikit-learn求解多项式回归问题
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19073


机器学习教程 七-用随机梯度下降法(SGD)做线性拟合
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19086


机器学习教程 八-用scikit-learn做特征提取
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19095


机器学习教程 九-二元分类效果的评估方法
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19107


机器学习教程十-用scikit-learn的网格搜索快速找到最优模型参数
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19120


机器学习教程 十一-用scikit-learn做聚类分析大数据
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19129


机器学习教程 十二-神经网络模型的原理 大数据
http://www.aboutyun.com/forum.php?mod=viewthread&tid=19339





没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条