干貨!機(jī)器學(xué)習(xí)中 5 種必知必會(huì)的回歸算法!
提到回歸算法,我想很多人都會(huì)想起線性回歸,因?yàn)樗ㄋ滓锥曳浅:?jiǎn)單。但是,線性回歸由于其基本功能和有限的移動(dòng)自由度,通常不適用于現(xiàn)實(shí)世界的數(shù)據(jù)。
實(shí)際上,它只是經(jīng)常用作評(píng)估和研究新方法時(shí)進(jìn)行比較的基準(zhǔn)模型。在現(xiàn)實(shí)場(chǎng)景中我們經(jīng)常遇到回歸預(yù)測(cè)問(wèn)題,今天我就給大家總結(jié)分享 5 種回歸算法。
1、神經(jīng)網(wǎng)絡(luò)回歸
理論
神經(jīng)網(wǎng)絡(luò)的強(qiáng)大令人難以置信的,但它們通常用于分類。信號(hào)通過(guò)神經(jīng)元層,并被概括為幾個(gè)類。但是,通過(guò)更改最后的激活功能,它們可以非??焖俚剡m應(yīng)回歸模型。
每個(gè)神經(jīng)元通過(guò)激活功能傳遞以前連接的值,達(dá)到泛化和非線性的目的。常用的激活函數(shù):Sigmoid 或 ReLU 函數(shù)。
通過(guò)將最后一個(gè)激活函數(shù)(輸出神經(jīng)元)替換為線性激活函數(shù),可以將輸出映射到固定類別之外的各種值。這樣,輸出不是將輸入分類到任何一個(gè)類別中的可能性,而是神經(jīng)網(wǎng)絡(luò)將觀測(cè)值置于其上的連續(xù)值。從這個(gè)意義上講,它就像是線性回歸的神經(jīng)網(wǎng)絡(luò)的補(bǔ)充。
神經(jīng)網(wǎng)絡(luò)回歸具有非線性(除了復(fù)雜性)的優(yōu)點(diǎn),可以在神經(jīng)網(wǎng)絡(luò)中較早地通過(guò)S型和其他非線性激活函數(shù)引入神經(jīng)網(wǎng)絡(luò)。但是,由于 ReLU 忽略了負(fù)值之間的相對(duì)差異,因此過(guò)度使用 ReLU 作為激活函數(shù)可能意味著該模型傾向于避免輸出負(fù)值。這可以通過(guò)限制 ReLU 的使用并添加更多的負(fù)值適當(dāng)?shù)募せ詈瘮?shù)來(lái)解決,也可以通過(guò)在訓(xùn)練之前將數(shù)據(jù)標(biāo)準(zhǔn)化為嚴(yán)格的正范圍來(lái)解決。
實(shí)現(xiàn)
使用Keras,我們構(gòu)建了以下人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),只要最后一層是具有線性激活層的密集層或簡(jiǎn)單地是線性激活層即可。
- 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'))
神經(jīng)網(wǎng)絡(luò)的問(wèn)題一直是其高方差和過(guò)度擬合的趨勢(shì)。在上面的代碼示例中,有許多非線性源,例如SoftMax或Sigmoid。如果你的神經(jīng)網(wǎng)絡(luò)在純線性結(jié)構(gòu)的訓(xùn)練數(shù)據(jù)上表現(xiàn)良好,則最好使用修剪后的決策樹(shù)回歸法,該方法可以模擬神經(jīng)網(wǎng)絡(luò)的線性和高變異性,但可以讓數(shù)據(jù)科學(xué)家更好地控制深度、寬度和其他屬性以控制過(guò)度擬合。
2、決策樹(shù)回歸
理論
在決策樹(shù)中分類和回歸非常相似,因?yàn)閮烧叨纪ㄟ^(guò)構(gòu)造是/否節(jié)點(diǎn)的樹(shù)來(lái)工作。雖然分類結(jié)束節(jié)點(diǎn)導(dǎo)致單個(gè)類值(例如,對(duì)于二進(jìn)制分類問(wèn)題為1或0),但是回歸樹(shù)以連續(xù)值(例如4593.49或10.98)結(jié)尾。
由于回歸作為機(jī)器學(xué)習(xí)任務(wù)的特殊性和高差異性,因此需要仔細(xì)修剪決策樹(shù)回歸器。但是,它進(jìn)行回歸的方式是不規(guī)則的,而不是連續(xù)地計(jì)算值。因此,應(yīng)該修剪決策樹(shù),使其具有最大的自由度。
實(shí)現(xiàn)
決策樹(shù)回歸可以很容易地在 sklearn 創(chuàng)建:
- from sklearn.tree import DecisionTreeRegressor
- model = DecisionTreeRegressor()
- model.fit(X_train, y_train)
由于決策樹(shù)回歸參數(shù)非常重要,因此建議使用sklearn的GridCV參數(shù)搜索優(yōu)化工具來(lái)找到模型的正確準(zhǔn)則。在正式評(píng)估性能時(shí),請(qǐng)使用K折檢驗(yàn)而不是標(biāo)準(zhǔn)的訓(xùn)練分割,以避免后者的隨機(jī)性干擾高方差模型的精細(xì)結(jié)果。
3、LASSO 回歸
理論
LASSO回歸是線性回歸的一種變體,特別適合于多重共線性(要素彼此之間具有很強(qiáng)的相關(guān)性)的數(shù)據(jù)。它可以自動(dòng)執(zhí)行部分模型選擇,例如變量選擇或參數(shù)消除。
縮小的過(guò)程為回歸模型增加了許多好處:
- 對(duì)真實(shí)參數(shù)的估計(jì)更加準(zhǔn)確和穩(wěn)定。
- 減少采樣和非采樣錯(cuò)誤。
- 空間波動(dòng)更平滑。
LASSO并沒(méi)有像神經(jīng)網(wǎng)絡(luò)的高方差方法和決策樹(shù)回歸那樣通過(guò)調(diào)整模型的復(fù)雜性來(lái)補(bǔ)償數(shù)據(jù)的復(fù)雜性,而是試圖通過(guò)變形空間來(lái)降低數(shù)據(jù)的復(fù)雜性,從而能夠通過(guò)簡(jiǎn)單的回歸技術(shù)來(lái)處理。在此過(guò)程中,LASSO自動(dòng)以低方差方法幫助消除或扭曲高度相關(guān)和冗余的特征。
LASSO回歸使用L1正則化,這意味著它按絕對(duì)值加權(quán)誤差。這種正則化通常會(huì)導(dǎo)致具有較少系數(shù)的稀疏模型,這使得它具有可解釋性。
實(shí)現(xiàn)
在sklearn中,LASSO回歸附帶了一個(gè)交叉驗(yàn)證模型,該模型可以選擇許多具有不同基本參數(shù)和訓(xùn)練路徑的訓(xùn)練模型中表現(xiàn)最佳的模型,從而使需要手動(dòng)完成的任務(wù)實(shí)現(xiàn)自動(dòng)化。
- from sklearn.linear_model import LassoCV
- model = LassoCV()
- model.fit(X_train, y_train)
4、Ridge回歸
理論
Ridge回歸與LASSO回歸非常相似,因?yàn)樗m用于收縮。Ridge和LASSO回歸都非常適用于具有大量彼此不獨(dú)立(共線性)的特征的數(shù)據(jù)集,但是兩者之間最大的區(qū)別是Ridge利用L2正則化,由于L2正則化的性質(zhì),系數(shù)越來(lái)越接近零,但是無(wú)法達(dá)到零。
正因?yàn)槿绱?,如果你希望?duì)每個(gè)變量的優(yōu)先級(jí)產(chǎn)生小的影響進(jìn)行優(yōu)先級(jí)排序,則 Ridge 是更好的選擇。如果希望在模型中考慮幾個(gè)變量,每個(gè)變量具有中等到較大的影響,則 LASSO 是更好的選擇。
實(shí)現(xiàn)
Ridge回歸可以在sklearn中實(shí)現(xiàn),如下所示。像 LASSO 回歸一樣,sklearn可以實(shí)現(xiàn)交叉驗(yàn)證選擇許多受過(guò)訓(xùn)練的模型中最好的模型的實(shí)現(xiàn)。
- from sklearn.linear_model import RidgeCV
- model = Ridge()
- model.fit(X_train, y_train)
5、ElasticNet 回歸
理論
ElasticNet 試圖通過(guò)結(jié)合L1和L2正則化來(lái)利用 Ridge 回歸和 LASSOb回歸中的最佳方法。
LASSO和Ridge提出了兩種不同的正則化方法。λ是控制懲罰強(qiáng)度的轉(zhuǎn)折因子。
- 如果λ= 0,則目標(biāo)變得類似于簡(jiǎn)單線性回歸,從而獲得與簡(jiǎn)單線性回歸相同的系數(shù)。
- 如果λ=∞,則由于系數(shù)平方的權(quán)重?zé)o限大,系數(shù)將為零。小于零的值會(huì)使目標(biāo)無(wú)限。
- 如果0 <λ<∞,則λ的大小決定賦予物鏡不同部分的權(quán)重。
除了λ參數(shù)之外,ElasticNet還添加了一個(gè)附加參數(shù)α,用于衡量L1和L2正則化應(yīng)該如何"混合":
- 當(dāng)α等于0時(shí),該模型是純粹的嶺回歸模型,
- 而當(dāng)α等于1時(shí),它是純粹的LASSO回歸模型。
“混合因子”α只是確定在損失函數(shù)中應(yīng)考慮多少L1和L2正則化。
實(shí)現(xiàn)
可以使用 sklearn 的交叉驗(yàn)證模型來(lái)實(shí)現(xiàn)ElasticNet:
- from sklearn.linear_model import ElasticNetCV
- model = ElasticNetCV()
- model.fit(X_train, y_train)