波士頓房價數據分析(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;藍點是一個標準差 |
我們可以比較兩種線性迴歸模型預測的結果
Comments
Post a Comment