一、線性迴歸python
優勢:結果易於理解,計算上不復雜。算法
缺點:對非線性的數據擬合很差。app
適用數據:數值型、標稱型。函數
迴歸的目的是預測數值型的目標值。最直接的辦法是依據輸入寫出一個目標值的計算公式;這就是迴歸方程,其中的未知係數稱做迴歸係數,求這些迴歸係數的過程就是迴歸。
測試
線性迴歸意味着能夠將輸入項分別乘以一些常量,再將結果加起來獲得輸出。spa
Y=XTw如何求w,經常使用方法就是找出使偏差最小的w。.net
平方偏差能夠寫作:sum(yi-xiTw)2blog
用矩陣表示:(y-Xw)T(y-Xw),對w求導,獲得XT(Y-Xw),令其等於0,求解出w如:w'=(XTX)-1XTy。該方法也稱做OLS(普通最小二乘法)。ip
模型效果能夠經過計算預測值和真實值的相關係數來衡量,numpy庫的corrcoef(yEstimate,yActual)能夠計算;相關性越高,模型效果越好。get
代數求解:
第一:用所給樣本求出兩個相關變量的(算術)平均值:
x_=(x1+x2+x3+...+xn)/n
y_=(y1+y2+y3+...+yn)/n
第二:分別計算分子和分母:(兩個公式任選其一)
分子=(x1y1+x2y2+x3y3+...+xnyn)-nx_Y_
分母=(x1^2+x2^2+x3^2+...+xn^2)-n*x_^2
第三:計算b:b=分子/分母
python實現:
二、局部加權線性迴歸
線性迴歸的問題:可能出現欠擬合現象;緣由:求的是具備最小均方偏差的無偏估計;解決:引入一些誤差。
LWLR算法:給待預測點附近的每一個點賦予必定的權重,而後在這個子集上基於最小均方差來進行普通的迴歸。
w'=(
X
T
WX)
-1
X
T
Wy,其中W是一個矩陣,用來給每一個數據點賦予權重。
LWLR使用「核」來對附近的點賦予更高的權重。最經常使用的核是高斯核,其對應權重以下:
w(i,i)=exp(|x(i)-x|/(-2k2)),其中x(i)是預測點,k是惟一考慮的參數,決定了對附近點賦予多大的權重。
若是k取值較大,和標準迴歸相似,可能出現欠擬合現象;若k取值較小,則可能出現過擬合現象。
局部線性迴歸的問題:增長了計算量(由於其對每一個點預測時都必須使用整個數據集)。
python實現:
三、嶺迴歸
若是特徵比樣本點還多,用前面的方法不可行,由於輸入數據矩陣再也不是滿秩矩陣,求逆會出錯。
嶺迴歸就是在矩陣XTX上加一個λI從而使其非奇異,迴歸係數的計算公式變成:
w'=(
X
T
X+
λI)
-1
X
Ty
嶺迴歸最早用於處理特徵數多於樣本數的狀況,如今也應用於在估計中加入誤差,從而獲得更好的估計。
經過引入λ來限制了全部w之和,經過引入該懲罰項,可以減小不重要的參數,該技術在統計學中也叫作縮減。
縮減方法能夠去掉不重要的參數,所以能更好地理解數據。此外,與簡單線性迴歸相比,縮減法能取得更好的預測效果。
λ很是小時,係數與普通迴歸同樣;而λ很是大時,全部迴歸係數縮減爲0;能夠在中間某處找到使得預測結果最好的λ值。
python實現:
四、lasso(另外一個縮減方法)
在增長以下約束時,普通的最小二乘法迴歸會獲得與嶺迴歸的同樣的公式。
sum(wk2)<=λ
lasso方法也對迴歸係數作了限定,對應的約束條件以下:
sum(|wk|)<=λ
這個約束條件使用絕對值取代平方和。在λ足夠小的時候,一些係數會所以被迫縮減到0,這個特性能夠幫助咱們更好地理解數據。
缺點:計算複雜。
五、前向逐步迴歸
效果與lasso方法差很少,但更加簡單,屬於一種貪心算法,即每一步都儘量減小偏差。(一開始,全部權重設爲1,而後每一步所作的決策是對某個權重增長或減小一個很小的值。)
python實現:
六、權衡誤差與方差
https://blog.csdn.net/qq_30490125/article/details/52401773