機(jī)器學(xué)習(xí)分類一些整理

1、完整的機(jī)器學(xué)習(xí)建模流程

1. 實(shí)際問題抽象成數(shù)學(xué)問題

2. 獲取數(shù)據(jù)

3. 特征工程

4. 訓(xùn)練模型、診斷、調(diào)優(yōu)

5. 模型驗(yàn)證、誤差分析

6.模型融合

7. 上線運(yùn)行

https://blog.csdn.net/czl389/article/details/77658965一個(gè)完整的建模案例

2、幾個(gè)使用過的分類模型

K近鄰(當(dāng)K為1時(shí)也稱最近鄰)https://scikit-learn.org/stable/modules/neighbors.html,機(jī)器學(xué)習(xí)分類算法中算是比較簡(jiǎn)單的算法,它的優(yōu)點(diǎn)在于非常容易解釋,難點(diǎn)在于如何選擇合適的K值

K值較小,則模型復(fù)雜度較高,容易發(fā)生過擬合,學(xué)習(xí)的估計(jì)誤差會(huì)增大,預(yù)測(cè)結(jié)果對(duì)近鄰的實(shí)例點(diǎn)非常敏感。

K值較大可以減少學(xué)習(xí)的估計(jì)誤差,但是學(xué)習(xí)的近似誤差會(huì)增大,與輸入實(shí)例較遠(yuǎn)的訓(xùn)練實(shí)例也會(huì)對(duì)預(yù)測(cè)起作用,使預(yù)測(cè)發(fā)生錯(cuò)誤,k值增大模型的復(fù)雜度會(huì)下降。

對(duì)于類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。

在應(yīng)用中,k值一般取一個(gè)比較小的值,通常采用交叉驗(yàn)證法來來選取最優(yōu)的K值。

https://blog.csdn.net/weixin_39881922/article/details/80419270一篇不錯(cuò)的文章

https://blog.csdn.net/weixin_41060109/article/details/80878325利用交叉驗(yàn)證選擇K值,可視化

https://blog.csdn.net/sinat_33150417/article/details/83273922? knn的調(diào)參

注意:在類別平衡情況下使用,對(duì)異常值不敏感。

樸素貝葉斯:基于貝葉斯定理的分類器,假設(shè)特征之間是相互獨(dú)立的,稱之為‘樸素’。https://scikit-learn.org/stable/modules/naive_bayes.html

可以高效處理高維數(shù)據(jù)

對(duì)小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能處理多分類任務(wù),對(duì)缺失數(shù)據(jù)不太敏感,算法也比較簡(jiǎn)單

支持向量機(jī):https://scikit-learn.org/stable/modules/svm.html,目前最火的算法之一,可以處理線性分類或者非線性分類,根據(jù)核函數(shù)的選擇來定。

1)一般推薦在做訓(xùn)練之前對(duì)數(shù)據(jù)進(jìn)行歸一化,當(dāng)然測(cè)試集中的數(shù)據(jù)也需要?dú)w一化。。

2)在特征數(shù)非常多的情況下,或者樣本數(shù)遠(yuǎn)小于特征數(shù)的時(shí)候,使用線性核,效果已經(jīng)很好,并且只需要選擇懲罰系數(shù)C即可。

3)在選擇核函數(shù)時(shí),如果線性擬合不好,一般推薦使用默認(rèn)的高斯核'rbf'。這時(shí)我們主要需要對(duì)懲罰系數(shù)C和核函數(shù)參數(shù)γ。進(jìn)行調(diào)參,通過多輪的交叉驗(yàn)證選擇合適的懲罰系數(shù)C和核函數(shù)參數(shù)γ。

4)理論上高斯核不會(huì)比線性核差,但是這個(gè)理論卻建立在要花費(fèi)更多的時(shí)間來調(diào)參上。所以實(shí)際上能用線性核解決問題我們盡量使用線性核。

5)對(duì)缺失數(shù)據(jù)敏感

在高維數(shù)據(jù)中表現(xiàn)良好,在特征維度遠(yuǎn)大于樣本數(shù)目時(shí)仍然高效,但要注意過擬合問題。

決策樹: https://scikit-learn.org/stable/modules/tree.html ,易于理解和解釋,可進(jìn)行決策樹的可視化,需要進(jìn)行類別不均衡處理,容易過擬合。能夠同時(shí)處理數(shù)據(jù)型和常規(guī)型屬性,需要提前進(jìn)行缺失值處理。決策樹一般作為集成學(xué)習(xí)的基分類器使用。不必?fù)?dān)心異常值或者數(shù)據(jù)是否線性可分。

邏輯回歸:https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression,屬于分類模型,有很多正則化模型方法解決多重共線性問題,可以便利地觀測(cè)樣本概率,可以輕松地利用新數(shù)據(jù)來更新模型(使用在線梯度下降算法,online gradient descent)。

缺點(diǎn)

容易欠擬合,一般準(zhǔn)確度不太高

不能很好地處理大量多類特征或變量;

???????????? 只能處理兩分類問題(在此基礎(chǔ)上衍生出來的softmax可以用于多分類),且必須線性可分;

???????????? 對(duì)于非線性特征,需要進(jìn)行轉(zhuǎn)換;

隨機(jī)森林:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier 屬于集成模型,它的基分類器是決策樹,集成方法是Bagging,一般比其他算法效果優(yōu)良,它能夠處理很高維度的數(shù)據(jù),并且不用做特征選擇,在訓(xùn)練完后,它能夠給出哪些feature比較重要??梢詫ob_score設(shè)置為True,來查看模型的泛化能力。實(shí)現(xiàn)比較簡(jiǎn)單,訓(xùn)練速度快,可以處理不平衡數(shù)據(jù)。

缺點(diǎn):

在噪音大的數(shù)據(jù)集上容易過擬合。

對(duì)于有不同取值的屬性的數(shù)據(jù),取值劃分較多的屬性會(huì)對(duì)隨機(jī)森林產(chǎn)生更大的影響,所以隨機(jī)森林在這種數(shù)據(jù)上產(chǎn)出的屬性權(quán)值是不可信的。

3、數(shù)據(jù)預(yù)處理

這一部分占建模過程很大比例,我們拿到的數(shù)據(jù)一般是比較雜亂的,一般要進(jìn)行缺失值、異常值處理,對(duì)于需要將數(shù)據(jù)歸一化的模型還要進(jìn)行歸一化處理,一般建議進(jìn)行歸一化處理,這樣可以提升模型的訓(xùn)練速度。

https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

在進(jìn)行數(shù)據(jù)處理時(shí),需要用到python里面的pandas模塊,如果遇到困難,去查pandas的官方文檔,里面有很多例子。

缺失值查看可以直接用df.isnull().sum()來查看每一列的空值,注意我們拿到的數(shù)據(jù)可能不存在空值,原因在于別人把空值填成0了。缺失值可視化可以用missingno模塊,缺失值如果不多直接刪除整條記錄即可。

異常值,可以通過箱型圖等來進(jìn)行可視化。異常值不是缺失值,更不是錯(cuò)誤值,同樣是真實(shí)情況的表現(xiàn),之所以覺得一個(gè)數(shù)據(jù)異常,是因?yàn)槲覀兡軌蛴玫降臄?shù)據(jù)量不夠大,無法準(zhǔn)確地代表整個(gè)此類數(shù)據(jù)的分布。如果把異常值放在海量數(shù)據(jù)的大背景下,那么這個(gè)異常值也就不那么異常了。

針對(duì)一些非數(shù)值型特征,要把他們轉(zhuǎn)換為數(shù)值類型,這樣才可以投入模型,上面給的網(wǎng)址有此類特征處理方法,當(dāng)然具體使用哪種編碼還要視情況而定,一般獨(dú)熱編碼常用,labelcoder不常用。處理時(shí)最好將特征處理為有序的,處理成數(shù)值類型時(shí)最好要包含原有信息。

對(duì)于類別,也要定義為數(shù)值標(biāo)簽。

4、類別不平衡

https://imbalanced-learn.org/en/stable/api.html

很多算法是要求類別均衡時(shí)使用的,所以在建模之前要查看下類別均衡問題,一般類別比例超過4:1,視為不平衡,此時(shí)就需要進(jìn)行類別均衡處理,可參照上面網(wǎng)站。

5、特征選擇

https://scikit-learn.org/stable/modules/feature_selection.html

分為單變量特征選擇和多變量特征選擇。可以利用基于模型的特征排序生成一個(gè)特征重要性的條形圖。

6、訓(xùn)練時(shí)一些注意事項(xiàng)

訓(xùn)練集、測(cè)試集、驗(yàn)證集

在使用數(shù)據(jù)集訓(xùn)練模型之前,我們需要先將整個(gè)數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集、測(cè)試集。訓(xùn)練集是用來訓(xùn)練模型的,通過嘗試不同的方法和思路使用訓(xùn)練集來訓(xùn)練不同的模型,再通過驗(yàn)證集使用交叉驗(yàn)證來挑選最優(yōu)的模型,通過不斷的迭代來改善模型在驗(yàn)證集上的性能,最后再通過測(cè)試集來評(píng)估模型的性能。

為保證訓(xùn)練集、驗(yàn)證集、測(cè)試集都在同一個(gè)分布上,我們需要把數(shù)據(jù)打亂,再隨機(jī)劃分。

小規(guī)模數(shù)據(jù)

傳統(tǒng)地采用70%/30%的劃分原則,就是指將整個(gè)數(shù)據(jù)集中的70%用于模型的訓(xùn)練也就是訓(xùn)練集,整個(gè)數(shù)據(jù)集中的30%用于模型的測(cè)試也就是測(cè)試集,其實(shí)這里的測(cè)試集被稱為驗(yàn)證集或者開發(fā)集會(huì)更適合。如果想要加入驗(yàn)證集,可能劃分標(biāo)準(zhǔn)就改成了60%/20%/20%,也就是指將整個(gè)數(shù)據(jù)集的60%劃分為訓(xùn)練集,20%劃分為驗(yàn)證集,20%劃分為驗(yàn)證集。

大規(guī)模數(shù)據(jù)

可以采用98%/1%/1%的規(guī)則來劃分?jǐn)?shù)據(jù)集。

建議

在有些數(shù)據(jù)集的劃分中,沒有真正的測(cè)試集,也就是只有訓(xùn)練集和測(cè)試集。利用訓(xùn)練集來訓(xùn)練模型,然后通過測(cè)試模型在測(cè)試集上的表現(xiàn)來調(diào)整超參和采用不同的策略來提高模型在測(cè)試集上的表現(xiàn),而沒有真正的測(cè)試集來評(píng)估模型的性能,缺少真正的測(cè)試集可能會(huì)導(dǎo)致模型過擬合,使用這種方式在測(cè)試集上所獲取的模型評(píng)估是不可靠的。建議不要省略驗(yàn)證集,利用驗(yàn)證集來調(diào)整模型,利用測(cè)試集來評(píng)估模型的指標(biāo)。如果模型上線的指標(biāo)要求比較高時(shí),可以適當(dāng)?shù)募哟鬁y(cè)試集的數(shù)量以此來獲取更高精度的評(píng)估指標(biāo),建議不要超過30%。

模型評(píng)估與選擇

https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter

二分類可以選擇precision,recall,F(xiàn)1-score,以及AUC,ROC

多分類不能選擇AUC,ROC,一般選擇F1-score。

選擇模型評(píng)價(jià)指標(biāo)也要根據(jù)實(shí)際情況來選擇。

模型選擇,可以使用交叉驗(yàn)證得分來進(jìn)行選擇,評(píng)價(jià)指標(biāo)選上述的,當(dāng)然在選擇模型時(shí)還應(yīng)該考慮模型的運(yùn)行時(shí)間。

某位大神測(cè)試了179種分類模型在UCI所有的121個(gè)數(shù)據(jù)上的性能,發(fā)現(xiàn)Random Forests 和 SVM 性能最好。


注意

如果算法在開發(fā)集上過擬合,則需要獲取更多的開發(fā)集數(shù)據(jù)。

如果開發(fā)集與測(cè)試集的數(shù)據(jù)分布和實(shí)際數(shù)據(jù)分布不同,則需要獲取新的開發(fā)集和測(cè)試集。

如果評(píng)估指標(biāo)無法對(duì)最重要的任務(wù)目標(biāo)進(jìn)行度量,則需要修改評(píng)估指標(biāo)。

7、參數(shù)調(diào)優(yōu)

https://scikit-learn.org/stable/modules/grid_search.html

主要介紹網(wǎng)格搜索法。

首先確定需要調(diào)優(yōu)的參數(shù),確定參數(shù)的數(shù)值范圍,某些參數(shù)是需要組合起來一起調(diào)優(yōu)的,選擇一個(gè)適合的scoring來進(jìn)行調(diào)參。

可以在嘗試中確定參數(shù)范圍,比如隨機(jī)森林參數(shù)max_depth,當(dāng)我們將參數(shù)范圍設(shè)置為[1,10],通過網(wǎng)格搜索法最優(yōu)參數(shù)是10,這時(shí)我們可以繼續(xù)將參數(shù)范圍修改到[5,20],以此類推,是一個(gè)不斷嘗試的過程。

不斷查看我們的調(diào)優(yōu)后的模型效果,比如對(duì)兩個(gè)參數(shù)調(diào)優(yōu)后,可看目前這兩個(gè)確定參數(shù)下的模型是否比調(diào)優(yōu)之前(最初的模型)效果好。當(dāng)然有些參數(shù)可能默認(rèn)的就是最好。

下面是一個(gè)大牛經(jīng)驗(yàn)所得分類模型一般需要調(diào)節(jié)的參數(shù)


8、查看模型是否過擬合或者欠擬合

判斷過擬合或者欠擬合。https://scikit-learn.org/stable/modules/learning_curve.html

1、當(dāng)訓(xùn)練集和測(cè)試集的誤差收斂但卻很高時(shí),為高偏差。

? ? 左上角的偏差很高,訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率都很低,很可能是欠擬合。

? ? 我們可以增加模型參數(shù),比如,構(gòu)建更多的特征,減小正則項(xiàng)。

? ? 此時(shí)通過增加數(shù)據(jù)量是不起作用的。

2、當(dāng)訓(xùn)練集和測(cè)試集的誤差之間有大的差距時(shí),為高方差。

? ? ?當(dāng)訓(xùn)練集的準(zhǔn)確率比其他獨(dú)立數(shù)據(jù)集上的測(cè)試結(jié)果的準(zhǔn)確率要高時(shí),一般都是過擬合。

? ? 右上角方差很高,訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率相差太多,應(yīng)該是過擬合。

? ? 我們可以增大訓(xùn)練集,降低模型復(fù)雜度,增大正則項(xiàng),或者通過特征選擇減少特征數(shù)。

理想情況是是找到偏差和方差都很小的情況,即收斂且誤差較小。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容