1. 程式人生 > 實用技巧 >【機器學習】【數學建模】迴歸分析

【機器學習】【數學建模】迴歸分析

引言

前面我們講過曲線擬合問題。曲線擬合問題的特點是,根據得到的若干有關變數的 一組資料,尋找因變數與(一個或幾個)自變數之間的一個函式,使這個函式對那組資料擬合得最好。通常,函式的形式可以由經驗、先驗知識或對資料的直觀觀察決定,要 作的工作是由資料用最小二乘法計算函式中的待定係數。從計算的角度看,問題似乎已經完全解決了,還有進一步研究的必要嗎?

從數理統計的觀點看,這裡涉及的都是隨機變數,我們根據一個樣本計算出的那些係數,只是它們的一個(點)估計,應該對它們作區間估計假設檢驗,如果置信區間太大,甚至包含了零點,那麼係數的估計值是沒有多大意義的。另外也可以用方差分析方法對模型的誤差進行分析,對擬合的優劣給出評價。簡單地說,迴歸分析就是對擬合問題作的統計分析

模型種類

以下為常用的迴歸模型。

除了這 7 種最常用的迴歸技術之外,你還可以看看其它模型,如 Bayesian、Ecological 和 Robust 迴歸。

Linear Regression線性迴歸

TIPS:

我們假設線性迴歸的噪聲服從均值為0的正態分佈。 當噪聲符合正態分佈N(0,delta2)時,因變數則符合正態分佈N(ax(i)+b,delta2),其中預測函式y=ax(i)+b。這個結論可以由正態分佈的概率密度函式得到。也就是說當噪聲符合正態分佈時,其因變數必然也符合正態分佈。

在用線性迴歸模型擬合數據之前,首先要求資料應符合或近似符合正態分佈,否則得到的擬合函式不正確。

一元線性迴歸

利用最小二乘估計得到最佳擬合直線:

多元線性迴歸

迴歸模型的假設檢驗:

迴歸係數的假設檢驗和區間估計:

Stepwise Regression逐步迴歸

當我們處理多個獨立變數時,就使用逐步迴歸。在這種技術中,獨立變數的選擇是藉助於自動過程來完成的,不涉及人工干預。

逐步迴歸的做法是觀察統計值,例如 R-square、t-stats、AIC 指標來辨別重要的變數。基於特定標準,通過增加/刪除協變數來逐步擬合迴歸模型。常見的逐步迴歸方法如下所示:

  • 標準的逐步迴歸做兩件事,每一步中增加或移除自變數。
  • 前向選擇從模型中最重要的自變數開始,然後每一步中增加變數。
  • 反向消除從模型所有的自變數開始,然後每一步中移除最小顯著變數。

這種建模技術的目的是通過使用最少的自變數在得到最大的預測能力。它也是處理高維資料集的方法之一。

這個實際上就是我們後面將提到的多元迴歸變數篩選方法的應用。

Ridge Regression嶺迴歸

嶺迴歸是當資料遭受多重共線性(獨立變數高度相關)時使用的一種技術。

在多重共線性中,即使最小二乘估計(OLS)是無偏差的,但是方差很大,使得觀察值遠離真實值。嶺迴歸通過給迴歸估計中增加額外的偏差度,能夠有效減少方差。

線上性方程中,預測誤差可以分解為兩個子分量。首先是由於偏頗,其次是由於方差。預測誤差可能由於這兩個或兩個分量中的任何一個而發生。這裡,我們將討論由於方差引起的誤差。

嶺迴歸通過收縮引數 λ(lambda)解決了多重共線性問題。

上面這個公式中包含兩項。第一個是最小平方項,第二個是係數 β 的平方和項,前面乘以收縮引數 λ。增加第二項的目的是為了縮小系數 β 的幅值以減小方差。

本質上是L2正則化

Lasso Regression套索迴歸

類似於嶺迴歸,套索(Least Absolute Shrinkage and Selection Operator)迴歸懲罰的是迴歸係數的絕對值。此外,它能夠減少變異性和提高線性迴歸模型的準確性。

套索迴歸不同於嶺迴歸,懲罰函式它使用的是係數的絕對值之和,而不是平方。這導致懲罰項(或等價於約束估計的絕對值之和),使得一些迴歸係數估計恰好為零。施加的懲罰越大,估計就越接近零。實現從 n 個變數中進行選擇

本質是L1正則化

ElasticNet彈性迴歸

彈性迴歸是嶺迴歸和套索迴歸的混合技術,它同時使用L2 和 L1 正則化。當有多個相關的特徵時,彈性網路是有用的。套索迴歸很可能隨機選擇其中一個,而彈性迴歸很可能都會選擇。

Logistic Regression邏輯斯蒂迴歸

把Y的結果帶入一個非線性變換的Sigmoid函式中,即可得到[0,1]之間取值範圍的數S,S可以把它看成是一個概率值,如果我們設定概率閾值為0.5,那麼S大於0.5可以看成是正樣本,小於0.5看成是負樣本,就可以進行分類了。

邏輯迴歸用來計算事件成功(Success)或者失敗(Failure)的概率,廣泛用於分類問題。當因變數是二進位制(0/1,True/False,Yes/No)時,應該使用邏輯迴歸。這裡,Y 的取值範圍為 [0,1],它可以由下列等式來表示。

odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence
ln(odds) = ln(p/(1-p))
logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk

在上面的等式中,通過使用最大似然估計來得到最佳的引數,而不是使用線性迴歸最小化平方誤差的方法。

損失函式:對數似然函式

Polynomial Regression多項式迴歸

如果自變數的指數大於 1,則它就是多項式迴歸方程。

注意:不要次數過高造成過擬合(類似於Ronge現象),應觀察影象。

偏相關係數

在研究兩個變數之間的線性相關程度時,可考察這兩個變數的簡單相關係數。但

在研究多個變數之間的線性相關程度時,單純使用兩兩變數的簡單相關係數常具有虛假

性。因為簡單相關係數只考慮了兩個變數之間的相互作用,而沒有考慮其它變數對這兩

個變數的影響。為了更準確、真實地反映變數之間的相關關係,統計學中定義了偏相關

係數(又稱淨相關係數)。

偏相關係數的檢驗:

【】

多元迴歸變數篩選方法

用迴歸建模首先遇到的難題,就是選擇哪些變數作為因變數的解釋變數。在我們選擇自變數時,一方面希望儘可能不遺漏重要的解釋變數;另一方面,又要遵循引數節省原則,使自變數的個數儘可能少。

下面我們介紹一些有效的變數篩選方法,向前選擇變數法、向後刪除變數法和逐步迴歸法。

偏 F 檢驗是變數篩選的統計依據。

向前選擇變數法

  1. 對所有的這 m 個模型進行 F 檢驗,選擇 F 值最高者作為第 一個進入模型的自變數(記為xi1)。
  2. 對剩下的 m−1個變數分別進行偏 F 檢驗(即以 y 與xi1的模型為減模型, 以 y 與xi1 以及另一個自變數xj的模型為全模型)。
  3. 如果至少有一個 x1 通過了偏 F 檢 驗,則在所有通過偏 F 檢驗的變數中,選擇 Fj 值最大者作為第二個被選的自變數,進 入模型(記為 xi2 )。
  4. 繼續上述步驟,直到在模型之外的自變數均不能通過偏 F 檢驗。

向後刪除變數法

逐步迴歸法

逐步迴歸法採取邊進邊退的方法。對於模型外部的變數,只要它還可提供顯

著的解釋資訊,就可以再次進入模型;而對於已在內部的變數,只要它的偏 F 檢驗不

能通過,則還可能從模型中被刪除。

步驟:向前選擇、向後刪除、迴圈。

由於變數數變化,此處判定值通常採用校正決定係數

模型評價

這裡涉及到評價模型的內容,此處僅簡略介紹。

殘差的樣本方差(MSE)

可以證明,MSE是σ^2的無偏估計量。

判定係數(R-square)

1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)

經驗值:>0.4, 擬合效果好。
資料集的樣本越大,R²越大,因此,不同資料集的模型結果比較會有一定的誤差。也因此產生了校正決定係數

n為樣本數量,p為特徵數量。該式消除了樣本數量和特徵數量的影響。

sklearn. metrics庫函式

python的sklearn.metrics中包含一些損失函式,評分指標來評估迴歸模型的效果。

主要包含以下幾個指標:

  • explained_variance_score(解釋方差分)(var:方差)

#explained_variance_score:解釋方差分,這個指標用來衡量我們模型對資料集波動的解釋程度,如果取值為1時,模型就完美,越小效果就越差。
explained_variance_score(y_true, y_pred, multioutput=[0.3, 0.7])
  • mean_absolute_error(平均絕對誤差)

#給定資料點的平均絕對誤差,一般來說取值越小,模型的擬合效果就越好。
mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])
  • mean_squared_error(均方誤差)

mean_squared_error(y_true, y_pred) 
  • mean_squared_log_error

目標實現指數增長時,例如人口數量、一種商品在幾年時間內的平均銷量等,這個指標最適合使用。請注意,這個指標懲罰的是一個被低估的估計大於被高估的估計。

mean_squared_log_error(y_true, y_pred) 
  • median_absolute_error(中位數絕對誤差)

中位數絕對誤差適用於包含異常值的資料的衡量.

median_absolute_error(y_true, y_pred)
  • r2_score

方法:

sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
#y_true:觀測值
#y_pred:預測值
#sample_weight:樣本權重,預設None
#multioutput:多維輸入輸出,可選‘raw_values’, ‘uniform_average’, ‘variance_weighted’或None。預設為’uniform_average’;
raw_values:分別返回各維度得分
uniform_average:各輸出維度得分的平均
variance_weighted:對所有輸出的分數進行平均,並根據每個輸出的方差進行加權。

例項:

>>> from sklearn.metrics import r2_score
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> r2_score(y_true, y_pred)
0.948...
>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
>>> y_pred = [[0, 2], [-1, 2], [8, -5]]
>>> r2_score(y_true, y_pred, multioutput='variance_weighted')
...
0.938...
>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
>>> y_pred = [[0, 2], [-1, 2], [8, -5]]
>>> r2_score(y_true, y_pred, multioutput='uniform_average')
...
0.936...
>>> r2_score(y_true, y_pred, multioutput='raw_values')
...
array([ 0.965..., 0.908...])
>>> r2_score(y_true, y_pred, multioutput=[0.3, 0.7])
...
0.925...

顯著性檢驗

一般地,迴歸方程的假設檢驗包括兩個方面:一個是對模型的檢驗,即檢驗自變數與因變數之間的關係能否用一個線性模型來表示,這是由F 檢驗來完成的;另一個檢驗是關於迴歸引數的檢驗,即當模型檢驗通過後,還要具體檢驗每一個自變數對因變數的影響程度是否顯著。這就是下面要討論的t 檢驗。在一元線性分析中,由於自變數的個數只有一個,這兩種檢驗是統一的,它們的效果完全是等價的。但是,在多元線性迴歸分析中,這兩個檢驗的意義是不同的。從邏輯上說,一般常在 F 檢驗通過後,再進 一步進行t 檢驗。

迴歸模型的線性關係檢驗

  • 需要注意的是,即使 F 檢驗通過了,也不說明該模型就是一個恰當的迴歸模型。

迴歸係數的顯著性檢驗

迴歸引數的檢驗是考察每一個自變數對因變數的影響是否顯著。換句話說,就是要 檢驗每一個總體引數是否顯著不為零。

首先看對 β1 = 0的檢驗。 β1 代表 x 變化一個單位對 y 的影響程度。對 β1 的檢驗 就是要看這種影響程度是否有顯著差異。

1)

2)

復共線性與有偏估計

有時某些迴歸係數的估計值的絕對值差異較大,有時迴歸係數的估計值 的符號與問題的實際意義相違背等。研究結果表明,產生這些問題的原因之一是迴歸自 變數之間存在著近似線性關係,稱為復共線性(Multicollinearity)。

參考資料