天天看點

Python線性回歸學習筆記

1.什麼是線性回歸

2.簡單線性回歸

3.多元線性回歸

一:什麼是線性回歸

線性回歸,是利用數理統計中回歸分析,來确定兩種或兩種以上變量間互相依賴的定量關系的一種統計分析方法,運用十分廣泛。其表達形式為y = w’x+e,e為誤差服從均值為0的正态分布。(百度百科)

回歸分析中,隻包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為一進制線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關系,則稱為多元線性回歸分析。如圖是一進制線性回歸

Python線性回歸學習筆記

那麼這樣的統計分析方法有什麼實際用處呢?

用一道題來解釋:

有一家快遞公司送貨,送貨的曆史記錄如下

X1: 運輸裡程 X2: 運輸次數 Y:總運輸時間

Python線性回歸學習筆記

問題來了, 如果一個運輸任務是跑102英裡,運輸6次,預計多少小時?

很顯然這是預測問題,即使建立函數y=ax1+bx2+c求出a,b,c即可也無法完全應用于整個資料集,其現實是影響總運輸時間的還有運輸車的種類、天氣、司機等等,這時要找出最适合的函數。

二:簡單線性回歸

先來看看一個簡單的一進制線性回歸分析問題和python代碼實作

假設有一組資料型态為 y=b0+b1x,其中x=[1,3,2,1,3] y=[14,24,18,17,27]

def fitSLP(x, y):
    n=len(x)
    up=
    down=
    for i in range(,n):
        up+=(x[i]-np.mean(x))*(y[i]-np.mean(y))
        down+=(x[i]-np.mean(x))**
    b1=up/down
    b0=np.mean(y)-b1*np.mean(x)
    return b0,b1

def predict(x,b0,b1):
    return b0+b1*x

x=[,,,,]
y=[,,,,]
b0,b1=fitSLP(x,y)
print 'b0:',b0,'b1:',b1

x_test=
y_test=predict(x_test, b0, b1)
print 'y_test:',y_test
           

運作結果:b0: 10.0 b1: 5.0 y_test: 40.0

可以得到線性回歸y=10+5x,當x=6是預計y=40

三:多元線性回歸

回到之前提到的快遞公司送貨問題,這是自變量有兩個,這是回歸方程y=b0+b1*x1+b2*x,利用sklearn裡面的linear_model實作python代碼如下

from numpy import genfromtxt
from sklearn import linear_model
#導入資料
dataPath=r'E:\mlresources\express.csv'
deliveryData=genfromtxt(dataPath,delimiter=',')

print deliveryData

X=deliveryData[:,:-]
y=deliveryData[:,-]
#建立模型
regr=linear_model.LinearRegression()
regr.fit(X, y)
print "coefficients"  #b1,b2.....
print regr.coef_
print "intercept: "  #b0
print regr.intercept_

xPred=[,]
yPred=regr.predict(xPred)
print yPred
           

運作結果中:

coefficients[ 0.0611346 0.92342537]是系數b1,b2

intercept: -0.868701466782是截距b0

按照 多元回歸方程 E(y)=β0+β1*x1+β2*x2+ … +βp*xp即可構造更多元的回歸方程,但是當自變量中有分類型變量(categorical data) , 如何處理?

Python線性回歸學習筆記

對于車型來說,有小汽車、SUV、卡車,這是可以用數字0、1、2代表其不同類别,但并不能直接作為自變量輸入,需要作出轉化成數值型變量

Python線性回歸學習筆記

此時資料集如下.csv檔案

Python線性回歸學習筆記

事實上,代碼并沒有改變。。。。python真好用