【人工智能】決策樹與隨機森林方式的泰坦尼克號幸存者預(yù)測報告
編譯器:Pycharm2019+Anaconda虛擬環(huán)境
Python版本:3.7
所需Python模塊:


一、?對決策樹及問題本身的認(rèn)識
在正式運用隨機森林算法之前,必須用普通的決策樹對解決泰坦尼克號幸存者預(yù)測進行實驗驗證,找到針對該問題的模型優(yōu)化的可行性方法。
決策樹?是一種基本的分類與回歸方法,學(xué)習(xí)通常包含三個步驟:特征選擇、決策樹的生成和決策樹的剪枝。決策樹實際上就是尋找最純凈的劃分方法,向著讓特征“混亂度”(熵)降低最快的方向劃分,當(dāng)劃分到一定純度則停止分類,生成決策樹,學(xué)習(xí)這個過程生成我們需要的智能模型;而過度追求純度會忽視類別的本質(zhì),造成過擬合現(xiàn)象,這時就需要“剪枝”,剔除掉多余的影響。
根據(jù)決策樹的實現(xiàn)步驟——
① 首先做的是讀取、標(biāo)記數(shù)據(jù)、丟棄一定的無關(guān)數(shù)據(jù)。這里所用的方法同教材(《scikit-learn機器學(xué)習(xí):常用算法原理及編程實戰(zhàn)》)中的相同,就不單獨列出了,需要對決策樹有初步了解的還可以?參考文章末尾?給出的鏈接。


② 隨后以適應(yīng)大數(shù)據(jù)量計算的簡單交叉驗證方法,需調(diào)用train_test_split函數(shù)將從train.csv中讀取的891個樣本分為訓(xùn)練數(shù)據(jù)集(tr)和交叉驗證數(shù)據(jù)集(cv)。

數(shù)據(jù)處理完畢后,可以先進行決策樹的生成觀察結(jié)果進行有指向性的優(yōu)化工作。第一次初始化生成樹的效果(兩數(shù)據(jù)集的驗證準(zhǔn)確率)如下:

可以直觀看到訓(xùn)練數(shù)據(jù)集準(zhǔn)確率極高,存在過擬合風(fēng)險,多次運行驗證數(shù)據(jù)集的結(jié)果的確相差較大。用安裝的graphviz生成該決策樹的樹狀圖:

得到的模型十分復(fù)雜,準(zhǔn)備從著手進行改進,先從判斷信息混亂程度的標(biāo)準(zhǔn)(用informationentropy還是Gini impurity)與對應(yīng)的結(jié)束閥值(min_impurity_decrease)入手。

上圖中定義的im_threshold函數(shù)顯示的是以基尼不純度(Gini impurity)為指標(biāo)的最佳閥值尋找過程,同樣,生成的決策樹和一次交叉驗證結(jié)果如下:


不僅擬合的曲線效果不錯,決策樹也被簡化了很多,交叉驗證數(shù)據(jù)集的準(zhǔn)確率也比較可觀。不過準(zhǔn)確率雖然有時能達到很高的值,穩(wěn)定性有所欠缺,作另外兩次檢測不改變參數(shù)分別得到的結(jié)果:


在此基礎(chǔ)上試著去衡量其他指標(biāo)共同限制下模型的擬合情況設(shè)置criterion(標(biāo)準(zhǔn))、min_impurity_decrease(閥值)、max_depth(深度)、min_samples_split(節(jié)點劃分后的樣本數(shù))。如下圖通過自己定義的函數(shù)im_multiply構(gòu)建所需的字典param_grid,調(diào)用GridSearchCV來實現(xiàn),找到的最佳參數(shù)組合以及調(diào)整后再次擬合繪制的決策樹模型,示例圖:


可以看到兩個驗證數(shù)據(jù)的驗證結(jié)果十分接近,過擬合問題得到一定解決,而且決策樹較之前者更為簡化,預(yù)測時的效率進一步提高,穩(wěn)定性也提高了。但因為限制過多影響了機器學(xué)習(xí)的敏銳性,預(yù)測的準(zhǔn)確率沒有前者來得高,而且在尋找最優(yōu)參數(shù)時因為組合增多導(dǎo)致的計算量變大,使算法 運行時間過長 ,雖然尋找最優(yōu)參數(shù)只需運行一次,但性價比相對還是不高。

二、隨機森林方式的模型優(yōu)化
隨機森林 便是在決策樹基礎(chǔ)上的一種集成學(xué)習(xí)(Ensemble Learning)方法,在結(jié)構(gòu)上同普通的決策樹相一致,起到了避免對某一關(guān)聯(lián)性較大發(fā)特征作出“傾向性”決策的危險,而為了衡量分析這個優(yōu)化過程的好壞我們可以首先通過定義的函數(shù)plot_learning_curve簡單繪制其本身的學(xué)習(xí)曲線:


可以看到訓(xùn)練數(shù)據(jù)集一直保持著極高的準(zhǔn)確率,同交叉驗證數(shù)據(jù)集的差距很明顯,存在?過擬合?現(xiàn)象,必須進行參數(shù)的優(yōu)化,方法同普通決策樹中的優(yōu)化思路(建立所需的字典,依次檢驗找到最佳)一致,其中一個重要的參數(shù)就是隨機森林的?決策樹生成數(shù)量n_estimators?。和普通決策樹的方案一樣,自行定義im_RandomForest函數(shù)來找到最優(yōu)的參數(shù)組合,如圖得到結(jié)果:

增添參數(shù)后二次進行擬合,并畫出優(yōu)化過后的模型學(xué)習(xí)曲線,且對test.csv中的數(shù)據(jù)進行預(yù)測。

由于隨機森林生成了多條決策樹進行選擇,整個集成學(xué)習(xí)是較為抽象的(樹和森林的解釋雖然比較形象),為了直觀一點看到?jīng)Q策樹的結(jié)果,且不嫌麻煩的話,我們可以全部已圖像來生成,全部列出是一件難以實現(xiàn)的工作,在這里只給出其中一條:

根據(jù)最優(yōu)參數(shù)配置運行完畢,觀察學(xué)習(xí)曲線,可以看到曲線擬合較為成功,解決了過擬合的問題。為了再比較兩種標(biāo)準(zhǔn)對擬合模型的影響,又用gini作為標(biāo)準(zhǔn)進行了一次擬合與預(yù)測,結(jié)果二者的區(qū)別并不明顯,最終運行結(jié)果、決策樹模型、學(xué)習(xí)曲線效果如下:




參考文章:
https://blog.csdn.net/alionsss/article/details/88173945
https://www.cnblogs.com/bonelee/p/8036024.html
https://www.cnblogs.com/baby-lily/p/10646226.html
https://blog.csdn.net/submarineas/article/details/85727804
https://blog.csdn.net/guolindonggld/article/details/101135001
《scikit-learn機器學(xué)習(xí):常用算法原理及編程實戰(zhàn)》_黃永昌
本文所用代碼(注意讀取文檔運行時的相對路徑是否正確)、文件文檔(包括訓(xùn)練集測試集)、圖片壓縮包:
鏈接:https://pan.baidu.com/s/1YzGX48luWolJsNkEg9pZ4A?
提取碼:sh8s?
