乾貨!機器學習中 5 種必知必會的迴歸算法!

提到迴歸算法,我想很多人都會想起線性迴歸,因爲它通俗易懂且非常簡單。但是,線性迴歸由於其基本功能和有限的移動自由度,通常不適用於現實世界的數據。

實際上,它只是經常用作評估和研究新方法時進行比較的基準模型。在現實場景中我們經常遇到迴歸預測問題,今天我就給大家總結分享 5 種迴歸算法。

1、神經網絡迴歸

理論

神經網絡的強大令人難以置信的,但它們通常用於分類。信號通過神經元層,並被概括爲幾個類。但是,通過更改最後的激活功能,它們可以非常快速地適應迴歸模型。

每個神經元通過激活功能傳遞以前連接的值,達到泛化和非線性的目的。常用的激活函數:Sigmoid 或 ReLU 函數。

通過將最後一個激活函數 (輸出神經元) 替換爲線性激活函數,可以將輸出映射到固定類別之外的各種值。這樣,輸出不是將輸入分類到任何一個類別中的可能性,而是神經網絡將觀測值置於其上的連續值。從這個意義上講,它就像是線性迴歸的神經網絡的補充。

神經網絡迴歸具有非線性 (除了複雜性) 的優點,可以在神經網絡中較早地通過 S 型和其他非線性激活函數引入神經網絡。但是,由於 ReLU 忽略了負值之間的相對差異,因此過度使用 ReLU 作爲激活函數可能意味着該模型傾向於避免輸出負值。這可以通過限制 ReLU 的使用並添加更多的負值適當的激活函數來解決,也可以通過在訓練之前將數據標準化爲嚴格的正範圍來解決。

實現

使用 Keras,我們構建了以下人工神經網絡結構,只要最後一層是具有線性激活層的密集層或簡單地是線性激活層即可。

model = Sequential()
model.add(Dense(100, input_dim=3, activation='sigmoid'))
model.add(ReLU(alpha=1.0))
model.add(Dense(50, activation='sigmoid'))
model.add(ReLU(alpha=1.0))
model.add(Dense(25, activation='softmax'))
#IMPORTANT PART
model.add(Dense(1, activation='linear'))

神經網絡的問題一直是其高方差和過度擬合的趨勢。在上面的代碼示例中,有許多非線性源,例如 SoftMax 或 Sigmoid。如果你的神經網絡在純線性結構的訓練數據上表現良好,則最好使用修剪後的決策樹迴歸法,該方法可以模擬神經網絡的線性和高變異性,但可以讓數據科學家更好地控制深度、寬度和其他屬性以控制過度擬合。

2、決策樹迴歸

理論

在決策樹中分類和迴歸非常相似,因爲兩者都通過構造是 / 否節點的樹來工作。雖然分類結束節點導致單個類值 (例如,對於二進制分類問題爲 1 或 0),但是迴歸樹以連續值(例如 4593.49 或 10.98) 結尾。

由於迴歸作爲機器學習任務的特殊性和高差異性,因此需要仔細修剪決策樹迴歸器。但是,它進行迴歸的方式是不規則的,而不是連續地計算值。因此,應該修剪決策樹,使其具有最大的自由度。

實現

決策樹迴歸可以很容易地在 sklearn 創建:

from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor()
model.fit(X_train, y_train)

由於決策樹迴歸參數非常重要,因此建議使用 sklearn 的 GridCV 參數搜索優化工具來找到模型的正確準則。在正式評估性能時,請使用 K 折檢驗而不是標準的訓練分割,以避免後者的隨機性干擾高方差模型的精細結果。

3、LASSO 迴歸

理論

LASSO 迴歸是線性迴歸的一種變體,特別適合於多重共線性 (要素彼此之間具有很強的相關性) 的數據。它可以自動執行部分模型選擇,例如變量選擇或參數消除。

縮小的過程爲迴歸模型增加了許多好處:

LASSO 並沒有像神經網絡的高方差方法和決策樹迴歸那樣通過調整模型的複雜性來補償數據的複雜性,而是試圖通過變形空間來降低數據的複雜性,從而能夠通過簡單的迴歸技術來處理。在此過程中,LASSO 自動以低方差方法幫助消除或扭曲高度相關和冗餘的特徵。

LASSO 迴歸使用 L1 正則化,這意味着它按絕對值加權誤差。這種正則化通常會導致具有較少係數的稀疏模型,這使得它具有可解釋性。

實現

在 sklearn 中,LASSO 迴歸附帶了一個交叉驗證模型,該模型可以選擇許多具有不同基本參數和訓練路徑的訓練模型中表現最佳的模型,從而使需要手動完成的任務實現自動化。

from sklearn.linear_model import LassoCV
model = LassoCV()
model.fit(X_train, y_train)

4、Ridge 迴歸

理論

Ridge 迴歸與 LASSO 迴歸非常相似,因爲它適用於收縮。Ridge 和 LASSO 迴歸都非常適用於具有大量彼此不獨立 (共線性) 的特徵的數據集,但是兩者之間最大的區別是 Ridge 利用 L2 正則化,由於 L2 正則化的性質,係數越來越接近零,但是無法達到零。正因爲如此,如果你希望對每個變量的優先級產生小的影響進行優先級排序,則 Ridge 是更好的選擇。如果希望在模型中考慮幾個變量,每個變量具有中等到較大的影響,則 LASSO 是更好的選擇。

實現

Ridge 迴歸可以在 sklearn 中實現,如下所示。像 LASSO 迴歸一樣,sklearn 可以實現交叉驗證選擇許多受過訓練的模型中最好的模型的實現。

from sklearn.linear_model import RidgeCV
model = Ridge()
model.fit(X_train, y_train)

5、ElasticNet 迴歸

理論

ElasticNet 試圖通過結合 L1 和 L2 正則化來利用 Ridge 迴歸和 LASSOb 迴歸中的最佳方法。

LASSO 和 Ridge 提出了兩種不同的正則化方法。λ是控制懲罰強度的轉折因子。

除了λ參數之外,ElasticNet 還添加了一個附加參數α,用於衡量 L1 和 L2 正則化應該如何 "混合":

“混合因子”α只是確定在損失函數中應考慮多少 L1 和 L2 正則化。

實現

可以使用 sklearn 的交叉驗證模型來實現 ElasticNet:

from sklearn.linear_model import ElasticNetCV
model = ElasticNetCV()
model.fit(X_train, y_train)
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/r3F2Q1bWy9QQG-uELbWe6w