波士頓房價數據分析(2)

傳統線性迴歸的問題

我在上一篇簡介如何使用線性迴歸來分析波士頓房價數據
線性迴歸會遇到的一個問題是拿來建模型所考慮的各種因素不一定都會對想預測的東西有貢獻
比方說如果想預測今天有多少人會來教室不翹課
學生的身高可能就不是一個很好的考慮因素
如果這時候把這種因素也考慮進來
在傳統線性迴歸的模型(Ax = b)中A矩陣就會是一個"ill-conditioned"的矩陣
在找尋係數x向量的時候任何b的不準都會因為A在取pseudo-inverse時被放大
若使用這種模型做預測
準確性會大大下降
完全體現“簡單或許比複雜還好”的“奧坎剃刀”法則

LASSO:增強版線性迴歸

我們的目標是能夠讓係數x向量中越多0越好
如此一來不重要的因素就不會影響預測了
其實早在90年代末期Robert Tibshirani發明了Least absolute shrinkage and selection operator (LASSO)便解決了傳統線性迴歸的缺陷
傳統線性迴歸不過是找尋以下的解

$$argmin_{x}  \| \mathbf{Ax-b} \|_{2} $$

其中 $$\|\mathbf{x}\|_{2}= (\frac{1}{n}  \sum_{i=1}^n   |  x_{i}  | ^{2} ) ^{ \frac{1}{2} }$$

LASSO在以上的最佳化過程中加入了一個$l_{1}$ norm的項(就是絕對值的意思)

$$argmin_{x}  \| \mathbf{Ax-b} \|_{2} +  \lambda  \| \mathbf{x} \|_{1}$$

其中 

$$\| \mathbf{x} \|_{1}= \frac{1}{n}  \sum_{i=1}^n   |  x_{i}  |$$

這個絕對值項非常特別因為它可以使最後x向量變得稀疏(有很多0出現)
而且有不易被極端值影響的特性

MATLAB實作

在MATLAB裡面程式碼非常直接
由於$ \lambda $是一個需要調整的參數
lasso函數會嘗試不同的$\lambda$值並將所有迴歸的結果儲存起來
甚至也可以使用交互確認(cross-validation)來增強模型預測的準確性
下圖即顯示不同$\lambda$對誤差MSE的影響

% LASSO
[x_lasso,FitInfo] = lasso(A,b,'Intercept',false,'CV',10);

LassoPlot. 綠點是使MSE最小的$ \lambda$;藍點是一個標準差

我們可以比較兩種線性迴歸模型預測的結果
傳統線性迴歸的x向量沒有任何零項
但是當lambda取1.48時,LASSO的x向量有三個零項
意味有三個因素可省去不看了
除了在高端房價的區域內表現不佳外
整體預測性並不會輸傳統線性迴歸


$ \lambda$ = 1.4808

關於LASSO更多的資訊可以參考華盛頓大學教授Steve Brunton的影片

Comments

Popular posts from this blog

大聖塔芭芭拉(Santa Barbara)地區私房景點推薦

[Upstream bioprocess development] Some notes about recent upstream process characterization approach

程序設計被忽略的一角:最大選擇率