【預測演算法】01. 線性回歸原理及R語言實現
回歸分析是統計學的核心演算法,是機器學習最基本演算法,也是數學建模最常用的演算法之一。
簡單來說,回歸分析就是用一個或多個自變數來預測因變數的方法,具體是通過多組自變數和因變數的樣本數據,擬合出最佳的函數關係。
本篇由前入深將線性回歸的原理講清楚,並用案例演示實際操作。
一、最小二乘法
設有 組樣本點:
例1,現有10期的廣告費用與銷售額的數據:
先畫散點圖觀察一下:
cost<-c(30,40,40,50,60,70,70,70,80,90)nsale<-c(143.5,192.2,204.7,266,318.2,457,333.8,312.1,386.4,503.9)ndat<-as.data.frame(cbind(cost,sale))nplot(dat)n
可見,這些散點大致在一條直線上,一元線性回歸就是尋找一條直線,使得與這些散點擬合程度最好(越接近直線越好)。
比如畫這樣一條直線,方程可寫為: (線性模型), 其中 是待定係數,目標是選取與樣本點最接近的直線對應的 .
那麼,怎麼刻畫這種「最接近」?
是與橫軸 對應的直線上的點的縱坐標(稱為線性模型預測值),它與樣本點 對應的真實值 之差,就是預測誤差(紅線長度):
適合描述散點到直線的「接近程度」。
但絕對值不容易計算,改用:
我們需要讓所有散點總體上最接近該直線,故需要讓總的預測誤差
最小。
於是問題轉化為優化問題,選取 使得
(1)
這就是「最小二乘法」,有著很直觀的幾何解釋。
二、問題(1)求解
這是個求二元函數極小值問題。
根據微積分知識,二元函數極值是在一階偏導等於0點處取到:
解關於 的二元一次方程組得
其中,
三、 提升:矩陣形式推導
將線性模型的全部預測值,用矩陣來寫:
記
則矩陣表示為
於是,讓預測誤差最小的「最小二乘法」優化問題就表示為
(2)
這裡 即向量的長度,計算一下:
同樣 的極小值,在其一階偏導 處取到,為了對 求導,引入矩陣微積分知識:
於是,令
若 滿秩,則 可逆,從而可得 .
注1:最小二乘法求解需要矩陣 滿秩,否則只能採用梯度下降法求解.
注2:矩陣形式非常便於Matlab求解,同時也可以很容易地推廣到多元線性回歸:取
即可,對應 個自變數, 組樣本,第 組樣本為 ,結果形式不變: , 此時 .
注3:一些非線性回歸也可以轉化為線性回歸來做:
例如,人口指數增長模型 ,做對數變換: . 即將 的數據取對數作為因變數,再與自變數 數據做線性回歸,得到回歸係數 ,再由 可得到 .
其它可變換為線性回歸的函數形式:
再例如,自變數 , 因變數 ,想做如下非線性回歸:
令 ,做 元線性回歸即可。
四、最小二乘法的概率解釋
真實數據中,一個 值可能對應多個 值,因為實際 值可能受多種因素的影響,故可以假設任意一個 值對應的 的真實值是服從正態分布的隨機變數。那麼,什麼時候擬合效果最好,當然是預測值 取值概率最大的時候,即最大似然原理。
記
其中,
為真實值, 為預測誤差(即不能被線性模型刻畫的部分)。假設 為獨立同分布, 服從均值為 ,方差為 的正態分布。
該假設由中心極限定理可以保證,順便說一句,理想的誤差都得服從 均值,等方差的正態分布,否則說明建立的模型不充分,誤差中還有趨勢沒有被提取出來。
則 的概率密度為
這就意味著,在給定 和參數 情況下,因變數 也服從正態分布,即
其中,
定義所有樣本數據關於參數 的似然函數:
為了便於最大化似然函數,先取對數:
於是最大化對數似然函數,就相當於最小化:
這就從概率學角度完美地解釋了最小二乘法的合理性。
五、模型檢驗
1. 擬合優度檢驗
計算 ,反映了自變數所能解釋的方差佔總方差的百分比:
總平方和:
解釋平方和:
殘差平方和:
則
值越大說明模型擬合效果越好。通常可以認為當 時,所得到的回歸直線擬合得很好,而當 時,所得到的回歸直線很難說明變數之間的依賴關係。
2. 回歸方程參數的檢驗
回歸方程反應了因變數 隨自變數 變化而變化的規律,若 ,則 不隨 變化,此時回歸方程無意義。所以,要做如下假設檢驗:
① 檢驗
若 為真,則回歸平方和 與殘差平方和 都是 的無偏估計,因而採用 統計量:
來檢驗原假設 是否為真。
② 檢驗
對 的 檢驗與 檢驗是等價的( )。
3. 用回歸方程做預測得到回歸方程 後,預測 處的 值為 ,其置信區間為:
其中 的自由度為 , 稱為槓桿率, .
六、回到案例——例1
1. 做一元線性回歸
lreg<-lm(sale~cost,data=dat)nsummary(lreg)n
結果說明:
(1) 回歸方程為
sale= 5.58*cost – 23
(2) 回歸係數顯著不為0,其p值=5.94e-5 < 0.05
(3) 擬合優度R2=0.88,說明擬合效果很好
2. 回歸係數的置信區間
confint(lreg,parm="cost",level=0.95)n
回歸係數 的95%置信區間為[3.9, 7.26]
3. 回歸診斷par(mfrow=c(2,2))nplot(lreg) #繪製回歸診斷圖n
圖1是殘差擬合,越沒有趨勢越好,有趨勢說明可能需要二次項;
圖2是殘差正態性檢驗,越落在虛線上越好(理想的殘差服從0附件的正態分布,否則說明模型不夠充分還有趨勢沒有提取出來);
圖3檢驗殘差是否等方差;
圖4檢驗離群點,第6個樣本點偏離較遠,應該剔除掉重新做回歸。
4. 剔除離群點,重新做一元線性回歸
dat2<-dat[-6,] nlreg2<-lm(sale~cost,data=dat2)nsummary(lreg2)n
新回歸模型擬合優度R2=0.946有了明顯改進。新回歸方程為:
sale = 5.28*cost – 15.15
plot(dat2)nabline(lreg2)npoints(dat[6,],pch=8,col="red")n
5. 用回歸模型做預測
x<-data.frame(cost=c(100,110,120))npredict(lreg2,x,interval="prediction",level=0.95)n
注意:做預測的自變數數據需要存為數據框格式。
參考文獻:
- 《R語言實戰》,Robort I. Kabacoff
- 矩陣簡介與最小二乘法, 耿修瑞,中國科學院電子學研究所
- 最小二乘法解的矩陣形式推導
- 最小二乘法的極大似然解釋
- 《數學建模與數學實驗》,吳剛,張敬信等,中國商業出版社
版權所有,轉載請註明
推薦閱讀:
※廣義線性模型(Generalized Linear Model)
※線性回歸建模中殘差異方差性的分析和處理
※【譯文】R語言線性回歸入門
※求一條直線使得這條直線到給定點集距離的平方和最小。應該怎麼推導?
※請問為何「E(XY)=E(X)E(Y)」或者「相關係數=0」等價於「變數之間沒有線性關係」?有沒有幾何解釋呢?