一、 先說我對這個題目的理解
直線的x,y方程是這樣的:y = kx+b, k就是斜率.
求線性回歸斜率, 就是說
有這么一組(x, y)的對應值——樣本。如果有四組,就說樣本量是4.
根據這些樣本,做“線性回歸”,最終求出一條直線(即y = kx + b的k值和b值),使得樣本里的各個點(x, y) “盡可能的”落到直線(或者直線附近)上。
二、 python解題需要安裝的包
實際解題主要用到的python庫是pandas. 解題算法是“最小二乘法”,這用到了pandas的ols函數。
我的系統是ubuntu14.04.
實際實驗過程如下:
$ sudo pip install numpy
$ sudo pip install pandas
安裝pandas的依賴包(使用pandas.ols函數就必須安裝這個依賴包):
$ sudo pip install statsmodels
如果發現安裝失敗,則需要安裝系統依賴庫先:
在http://www.netlib.org/lapack/ 下載lapack-3.6.0的包,然后:
$ cd lapack-3.6.0
$ mv make.inc.example make.inc
$ sudo apt-get install gfortran
把makefile文件中的:
lib: lapacklib tmglib
改為:
lib: blaslib variants lapacklib tmglib
$ sudo make
$ sudo cp lib*.a /usr/lib
以上依然不行,然而,'可能'只需要下面兩個命令:
$ sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran
$ sudo pip install statsmodels (安裝時間有點長...)
過了.
三、 python解題
$ ipython
> import numpy as np
> import pandas as pd
> x = np.array([2,3,4,6])
> xx = pd.DataFrame({"k": x})
> yy = pd.Series([22,33,44,66]) # 口算都知道斜率是11,最終方程是y=11x
> res = pd.ols(y=yy, x=xx)
> res
-------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <k> + <intercept>
Number of Observations: 4
Number of Degrees of Freedom: 2
R-squared: 1.0000
Adj R-squared: 1.0000
Rmse: 0.0000
F-stat (1, 2): inf, p-value: 0.0000
Degrees of Freedom: model 1, resid 2
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
k 11.0000 0.0000 1404889085527666.75 0.0000 11.0000 11.0000
intercept -0.0000 0.0000 -0.68 0.5691 -0.0000 0.0000
---------------------------------End of Summary---------------------------------
可以看出,直線方程就是這樣的:y = 11x - 0 (就是最左邊的一列值作為k和b)
可以直接讀取beta,關注每個系數:
> res.beta
k 1.100000e+01
intercept -2.131628e-14
dtype: float64
> res.beta[0] # <--------- 斜率
(試試把上面樣本里x最后一個改為7,即x = np.array([2,3,4,7]))
四、 end
參考資料:
http://www.cnblogs.com/fangwenyu/p/4284523.html
