1. 程式人生 > >6.線性迴歸之簡單線性迴歸

6.線性迴歸之簡單線性迴歸

起步

線性迴歸是利用數理統計和迴歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法。與之前的分類問題(Classification )不一樣的是,分類問題的結果是離散型的;而回歸問題中的結果是數值型的。

描述資料的特徵

1.均值( mean )

2.中位數( median )

3.眾數( mode )

4.方差( variance )

5.標準差 (standard deviation)、

簡單線性迴歸

簡單線性迴歸( Simple Linear Regression )包含一個自變數 x 和一個因變數 y ,也就是一元線性迴歸。被用來描述因變數(y)和自變數(X)以及偏差(error)之間關係的方程叫做迴歸模型,這個模型是: 

​​​​

其中偏差 ε 滿足正態分佈的,因此它的期望值是 0 。ε是獨立的。ε的方差(variance)對於所有的自變數 x 是一樣的。

因此式子也可以寫成:

其中,β0 是迴歸線的截距,β1 是迴歸線的斜率,E(y) 是在一個給定 x 值下 y 的期望值(均值)。

假設我們的估值函式(注意,是估計函式):


β 和 b 有什麼關係呢? β0 是表示迴歸方程中真實的值,而 b0 是對 β0 的估值,通過訓練能讓 b0 趨近於 β0 。從而提高估值函式準確度。

如何練處適合簡單線性迴歸模型的最佳迴歸線?

尋找的迴歸方程,是與真實值的離散程度最小的:


這就類似於高中學的最小二乘法了,利用那時候學到的公式套上去就能得到該方程了:

最小二乘法的推導過程可以檢視維基,寫得非常清楚:https://zh.wikipedia.org/wiki/最小二乘法

用python實現相應的例子:

預測當x=6時,y的值時多少?

程式碼如下:

#簡單線性迴歸的例子實現
import numpy as np

def fitSLR(x,y):
    n=len(x)
    fenzi=0
    fenmu=0
    for i in range(0,n):
        fenzi+=(x[i]-np.mean(x))*(y[i]-np.mean(y))
        fenmu+=pow((x[i]-np.mean(x)),2)
    b1=fenzi/fenmu
    b0=np.mean(y)-(b1*np.mean(x))
    return b0,b1

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

x=[1,3,2,1,3]
y=[14,24,18,17,27]

b0,b1=fitSLR(x,y)
print("intercept:",b0,"slop;",b1)

x_test=6
y_test=predict(6,b0,b1)

print ("y_test:",y_test)

結果為: