在機器學習領域,我們經常處理包含許多變數的數據,在處理這樣的數據時,就會出現多重共線性。在這種情況下,可以使用正規化迴歸(例如 Lasso)來避免多重共線性。
在 JMP Pro 中,正規化迴歸可以用作一種稱為「廣義迴歸」的方法,透過縮小參數估計值(迴歸係數)和選擇變量,實現穩定的模型估計,從而減少多重共線性的影響。
下圖顯示了當迴歸係數被 Lasso 縮小時發生的情況。查看「原始解釋變數的估計值」報告,我們可以看到影響較小的解釋變數已縮小為 0,這證實了 Lasso 正在進行變數選擇。

那麼在存在多重共線性的情況下,Lasso 迴歸如何發揮作用?在本文中,我們使用與反應(Y)的真實關係已預先確定的假設數據,並檢查套索迴歸、多元迴歸分析和逐步方法對真實模型的估計準確性。
目錄
虛擬數據
反應變數:Y
解釋變數:X1至X20(20個變數)
Y 由常態隨機數生成,其平均值是幾個解釋變數的線性組合,標準誤差為 10。

我們將以這種格式準備兩種類型的數據,並比較 Lasso 迴歸的有效性。
1. 解釋變數之間相關性較小的數據
2. 解釋變數之間存在一定程度的相關性(多重共線性)的數據
這使我們能夠檢查多重共線性的存在或不存在如何影響變數選擇和模型估計。
*這兩類樣本資料已附於本文。
1. 解釋變數之間相關性較小的資料範例
資料:“data_without_correlation.jmp”
解釋變數之間的相關性(r) :-0.06至0.10

利用這些數據,採用多元迴歸分析、逐步迴歸(停止規則:最小BIC)和Lasso迴歸(驗證方法:BIC)擬合模型,所得迴歸係數匯總於下表。 「真實方程式」列列出了用於產生 Y 的解釋變數的真實係數。

在逐步法中,沒有被選取的變數的係數顯示為0,在Lasso迴歸中,如果透過正規化將某個係數縮小為0,那麼它也顯示為0。
這些結果證實,這兩種方法估計的模型都接近真實方程,無效變數的係數為零或非常小。
換句話說,在解釋變數之間幾乎沒有相關性的資料中,多元迴歸分析、逐步方法和套索迴歸都能夠以較高的準確度估計真實的反應關係。
2. 解釋變數之間存在一定相關性的資料範例
資料:“data_without_correlation.jmp”
解釋變數之間的相關性(r):-0.50~0.52

對於這樣的數據,解釋變數之間的相關性很容易使得迴歸係數估計變得不穩定。如果對這些數據進行多元迴歸分析,VIF 將會非常大,多重共線性的影響將會很明顯。

與情況 1 一樣,我們使用多元迴歸分析、逐步迴歸和套索迴歸來擬合模型,並提供一個表格來總結所獲得的係數。

在多元迴歸分析中,多重共線性的影響導致係數與真實值有顯著差異。
即使採用逐步法,也沒有選出重要的變量,選擇了不必要的變量,也沒有根據真實方程式進行正確的變量選擇。
另一方面,使用 Lasso 迴歸,如案例 1 所示,我們能夠將無效解釋變數縮小到 0,並獲得有效變數的幾乎準確的估計值。
3. Lasso係數的模擬
在迄今為止的範例中,我們使用的資料是使用隨機常態函數從一組常態隨機數中產生的。然而,由於這些是隨機數,結果可能會根據所選的隨機數而有所不同。
使用 JMP 中的「模擬」功能,您可以根據大量常態隨機數集重複估計,以獲得迴歸係數的模擬分佈。這使我們能夠使用 Lasso 迴歸來評估變數選擇的有效性和可靠性。
在這裡,我們使用模擬來檢查在對「有點相關的資料」(情況 2)執行 Lasso 迴歸時,無效變數縮小到 0 的頻率,以及有效變數估計為非零的頻率。
在 JMP 中運行模擬的步驟
在執行 Lasso 迴歸時,我們展示如何對估計值執行 500 次模擬。
- 右鍵單擊 Lasso 報告“原始解釋變數的估計值”中的“估計值”數字,然後選擇“模擬”。
- 將出現一個模擬窗口,因此將來源列設為 Y,將目標列設為 Y。將樣本數設定為 500(模擬次數),將隨機種子值設為 123456(為了方便重現結果而指定的值)。

這將輸出一個新的資料表,其中包含從 500 次模擬中獲得的迴歸係數分佈。
如果在輸出資料表上執行腳本“單變量分佈”,則會顯示每個變數的模擬分佈。此外,「零的數量」和「零的百分比」將顯示在「摘要統計」報告中。

上面得到的每一個變數的零的數量和零的百分比都匯總在一個表中。

在真實方程中不起作用的變數透過 Lasso 迴歸高度收縮為 0。另一方面,真實方程中係數絕對值較大的變數(例如X7、X12)在500次模擬中從未縮小到0,這表示它們總是可以包含在模型中。
模擬證實,即使在多重共線性資料的情況下,Lasso迴歸也可以高機率地消除無效變數並穩定地選擇重要變數。
但在實際應用中請注意,在具有強多重共線性的數據中,Lasso 回歸傾向於僅選擇一個高度相關的解釋變量,而排除其他變量。
作者:Naohiro Masukawa(JMP 日本)
Naohiro Masukawa - JMP 使用者社區