首页 > 代码库 > 一元线性回归

一元线性回归

1、概念

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

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

那么一元线性回归就是:已知一批(x,y)值来复原另外未知的值。

比如:告诉你(1,1),(2,2),(3,3),那么问你(4,?)是多少,很容易复原出来(4,4),这就是一元线性回归问题的求解。

当然实际给你的数据可能不是严格线性,但依然让我们用一元线性回归来计算,那么就是找到一个最能代表已知数据的一元线性函数来做复原和求解。

2、scikit-learn的一元线性回归

技术分享
 1 import numpy as np
 2 from sklearn.linear_model import LinearRegression
 3 x = [[1],[2],[3],[4],[5],[6]]
 4 y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
 5 print x
 6 print(y)
 7 model = LinearRegression()
 8 model.fit(x, y) #训练模型
 9 predicted = model.predict([13])[0]#预测输出
10 print predicted
View Code

结果:

1 [[1], [2], [3], [4], [5], [6]]
2 [[1], [2.1], [2.9], [4.2], [5.1], [5.8]]
3 [ 12.82666667]

这里面的model是一个estimator,它通过fit()方法来算出模型参数,并通过predict()方法来预测,LinearRegression的fit()方法就是学习这个一元线性回归模型:

y = a + bx

原数据的图像:

技术分享
 1 import matplotlib.pyplot as plt
 2 from matplotlib.font_manager import FontProperties
 3 font = FontProperties()
 4 plt.figure()
 5 plt.title(this is title)
 6 plt.xlabel(x label)
 7 plt.ylabel(y label)
 8 plt.axis([0, 25, 0, 25])
 9 plt.grid(True)
10 x = [[1],[2],[3],[4],[5],[6]]
11 y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
12 plt.plot(x, y, k.)
13 plt.show()
View Code

结果:

技术分享

合在一起:

技术分享
 1 import numpy as np
 2 from sklearn.linear_model import LinearRegression
 3 import matplotlib.pyplot as plt
 4 from matplotlib.font_manager import FontProperties
 5 
 6 x = [[1],[2],[3],[4],[5],[6]]
 7 y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
 8 model = LinearRegression()
 9 model.fit(x, y)
10 x2 = [[0], [2.5], [5.3], [9.1]]
11 y2 = model.predict(x2)
12 
13 plt.figure()
14 plt.title(linear sample)
15 plt.xlabel(x)
16 plt.ylabel(y)
17 plt.axis([0, 10, 0, 10])
18 plt.grid(True)
19 plt.plot(x, y, k.)
20 plt.plot(x2, y2, g-)
21 plt.show()
View Code

技术分享

其他相关用法

方差计算:方差用来衡量样本的分散程度,方差公式是

技术分享

用numpy库已有的方法:

1 np.var([1, 2, 3, 4, 5, 6], ddof=1)
1 3.5

得出方差是3.5。

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

协方差计算:协方差表示两个变量的总体变化趋势,如果朝同方向变化则为正,朝反方向变化则为负,不相关则为0,协方差公式是:

技术分享

1 np.cov([1,2,3,4,5,6], [1,2.1,2.9,4.2,5.1,5.8])[0][1]
1 3.4299999999999997

得出协方差是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方:

 model.score(X_test, y_test)

 

一元线性回归