本文转自 http://www.shareditor.com/blogshow/?blogId=53
一元线性回归是最简单的一种模型,但应用广泛,比如简单地预测商品价格、成本评估等,都可以用一元线性模型,本节主要讲解scikit-learn一元线性回归的使用以及作图说明
一元线性回归
y=f(x)叫做一元函数,回归的意思就是根据已知数据复原某些值,线性回归(regression)就是用线性的模型做回归复原。
那么一元线性回归就是:已知一批(x,y)值来复原另外未知的值。
比如:告诉你(1,1),(2,2),(3,3),那么问你(4,?)是多少,很容易复原出来(4,4),这就是一元线性回归问题的求解
当然实际给你的数据可能不是严格线性,但依然让我们用一元线性回归来计算,那么就是找到一个最能代表已知数据的一元线性函数来做复原和求解
scikit-learn的一元线性回归
代码如下: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
执行结果:
[[ 12.82666667]]
这里面的model是一个estimator,它通过fit()方法来算出模型参数,并通过predict()方法来预测
LinearRegression的fit()方法就是学习这个一元线性回归模型:
y = a + bx
画一元线性图像
代码如下:import matplotlib.pyplot as plt #画图的库
from matplotlib.font_manager import FontProperties #图属性的模块
font = FontProperties()
plt.figure()
plt.title('this is title') #图的标题
plt.xlabel('x label')#X轴标签
plt.ylabel('y label')#y轴标签
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.')#k表示卡其色khaki
plt.show()
事实上,我们可以把预测和作图两部分结合起来,如下:
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-')#plot()函数的第三个参数非常简单:k表示卡其色khaki,g表示绿色green,r表示红色red,'.'表示点,'-'表示线
plt.show()
其他相关用法
方差计算:方差用来衡量样本的分散程度,方差公式是np.var([1,2,3,4,5,6], ddof=1)
得出方差为:3.5
其中ddof是无偏估计校正技术
协方差计算:协方差表示两个变量的总体变化趋势,如果朝同方向变化则为正,朝反方向变化则为负,不相关则为0,协方差公式是:np.cov([1,2,3,4,5,6], [1,2.1,2.9,4.2,5.1,5.8])[0][1]
得出协方差为: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
这就是通过最小化成本函数来做回归