中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

實戰(zhàn):用Python實現(xiàn)隨機(jī)森林

2018-12-10    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

因為有Scikit-Learn這樣的庫,現(xiàn)在用Python實現(xiàn)任何機(jī)器學(xué)習(xí)算法都非常容易。實際上,我們現(xiàn)在不需要任何潛在的知識來了解模型如何工作。雖然不需要了解所有細(xì)節(jié),但了解模型如何訓(xùn)練和預(yù)測對工作仍有幫助。比如:如果性能不如預(yù)期,我們可以診斷模型或當(dāng)我們想要說服其他人使用我們的模型時,我們可以向他們解釋模型如何做出決策的。

在本文中,我們將介紹如何在Python中構(gòu)建和使用Random Forest,而不是僅僅顯示代碼,我將嘗試了解模型的工作原理。我將從一個簡單的單一決策樹開始,然后以解決現(xiàn)實世界數(shù)據(jù)科學(xué)問題的方式完成隨機(jī)森林。本文的完整代碼在GitHub上以Jupyter Notebook的形式提供。

理解決策樹

決策樹是隨機(jī)森林的構(gòu)建塊,它本身就是個直觀的模型。我們可以將決策樹視為詢問有關(guān)我們數(shù)據(jù)問題的流程圖。這是一個可解釋的模型,因為它決定了我們在現(xiàn)實生活中的做法:在最終得出決定之前,我們會詢問有關(guān)數(shù)據(jù)的一系列問題。

決策樹的主要技術(shù)細(xì)節(jié)是如何構(gòu)建有關(guān)數(shù)據(jù)的問題,決策樹是通過形成能夠最大限度減少基尼系數(shù)的問題而建立的。稍后我會討論Gini Impurity,但這意味著決策樹試圖形成盡可能純的節(jié)點,其中包含來自單個類的高比例樣本(數(shù)據(jù)點)的節(jié)點。

Gini Impurity和構(gòu)建樹可能有點難以理解,所以首先讓我們構(gòu)建一個決策樹,以便可以更好的理解它。

關(guān)于最簡單問題的決策樹

我們從一個非常簡單的二進(jìn)制分類問題開始,如下所示:

 

 

我們的數(shù)據(jù)只有兩個特征(標(biāo)簽),且只有6個數(shù)據(jù)點。

雖然這個問題很簡單,但它不是線性可分的,這意味著我們不能通過數(shù)據(jù)繪制一條直線來對點進(jìn)行分類。然而,我們可以繪制一系列劃分類的直線,這基本上是決策樹在形成一系列問題時將要做的事情。

要創(chuàng)建決策樹并在數(shù)據(jù)上訓(xùn)練,我們可以使用Scikit-Learn:

 

 

在訓(xùn)練過程中,我們?yōu)槟P吞峁┨卣骱蜆?biāo)簽,以便學(xué)習(xí)根據(jù)特征對點進(jìn)行分類。我們沒有針對這個簡單問題的測試集,但是在測試時,我們只給模型提供功能并讓它對標(biāo)簽做出預(yù)測。

我們可以在訓(xùn)練數(shù)據(jù)上測試我們模型的準(zhǔn)確性:

 

 

我們看到它100%正確,這是我們所期望的,因為我們給了它訓(xùn)練的答案。

可視化決策樹

當(dāng)我們訓(xùn)練決策樹時,實際上會發(fā)生什么?我發(fā)現(xiàn)了解決策樹的最有用的方法是通過可視化,我們可以使用Scikit-Learn的功能(詳細(xì)信息請查看筆記本或本文)。

 

 

上圖顯示了決策樹的整個結(jié)構(gòu),除葉節(jié)點(終端節(jié)點)外,所有節(jié)點都有5個部分:

問題基于特征值詢問數(shù)據(jù):每個問題都有對或錯的答案。根據(jù)問題的答案,數(shù)據(jù)點在樹中移動。

Gini:節(jié)點的Gini雜質(zhì)。當(dāng)我們向下移動樹時,平均加權(quán)基尼系數(shù)必須減少。

samples:節(jié)點中的觀察數(shù)。

value:每個類的樣本數(shù)量。例如,頂部節(jié)點在類0中有2個樣本,在類1中有4個樣本。

class:節(jié)點中點的多數(shù)分類。在葉節(jié)點的情況下,這是對節(jié)點中所有樣本的預(yù)測。

葉節(jié)點沒有問題,因為這些是最終預(yù)測的地方。要對新節(jié)點進(jìn)行分類,只需向下移動樹,使用點的特征來回答問題,直到到達(dá)class預(yù)測的葉節(jié)點。你可以使用上面的點進(jìn)行嘗試,或者進(jìn)行不同的預(yù)測。

基尼系數(shù)

在這一點上,我們應(yīng)該嘗試了解基尼系數(shù)。簡而言之,Gini Impurity是隨機(jī)選擇的樣本被節(jié)點中的樣本分布標(biāo)記錯誤的概率。例如,在頂部(根)節(jié)點中,有44.4%錯誤的可能性根據(jù)節(jié)點中樣本標(biāo)簽的分布對隨機(jī)選擇的數(shù)據(jù)點進(jìn)行分類。我們可以使用下面這個等式得到這個值:

 

 

節(jié)點的Gini系數(shù)n是1減去每個J類的p_i平方的總和,讓我們計算出根節(jié)點的基尼系數(shù)。

 

 

在每個節(jié)點處,決策樹在要素中搜索要拆分的值,從而最大限度地減少基尼系數(shù)。(拆分節(jié)點的替代方法是使用信息增益)。

然后,它以遞歸過程重復(fù)此拆分過程,直到達(dá)到最大深度,或者每個節(jié)點僅包含來自一個類的樣本。每層樹的加權(quán)總基尼系數(shù)必須減少。在樹的第二層,總加權(quán)基尼系數(shù)值為0.333:

 

 

最后一層的加權(quán)總Gini系數(shù)變?yōu)?意味著每個節(jié)點都是純粹的,并且從該節(jié)點隨機(jī)選擇的點不會被錯誤分類。雖然這似乎是好結(jié)果,但這意味著模型可能過度擬合,因為節(jié)點僅使用是通過訓(xùn)練數(shù)據(jù)構(gòu)建的。

過度擬合:為什么森林比一棵樹更好

你可能會想問為什么不只使用一個決策樹?它似乎是完美的分類器,因為它沒有犯任何錯誤!記住這其中的關(guān)鍵點是樹在訓(xùn)練數(shù)據(jù)上沒有犯錯。因為我們給樹提供了答案。機(jī)器學(xué)習(xí)模型的要點是很好地概括測試數(shù)據(jù)。不幸的是,當(dāng)我們不限制決策樹的深度時,它往往會過度擬合。

當(dāng)我們的模型具有高方差并且基本上記憶訓(xùn)練數(shù)據(jù)時,一定會發(fā)生過度擬合。這意味著它可以很好地在訓(xùn)練數(shù)據(jù)上,但由于測試數(shù)據(jù)不同,它將無法對測試數(shù)據(jù)做出準(zhǔn)確的預(yù)測!我們想要的是一個能很好地學(xué)習(xí)訓(xùn)練數(shù)據(jù)的模型,并且可以在其他數(shù)據(jù)集上發(fā)揮作用。當(dāng)我們不限制最大深度時,決策樹容易過度擬合的原因是因為它具有無限的復(fù)雜性,這意味著它可以保持增長,直到它為每個單獨的觀察只有一個葉節(jié)點,完美地對所有這些進(jìn)行分類。

要理解為什么決策樹具有高差異,我們可以用一個人來考慮它。想象一下,你覺得明天蘋果股票會上漲,你會問一些分析師。每一位分析師都可能會有很大差異并且會嚴(yán)重依賴他們可以訪問的數(shù)據(jù)。一位分析師可能只閱讀親蘋果新聞,因此她認(rèn)為價格會上漲,而另一位分析師最近從她的朋友那里聽到蘋果產(chǎn)品的質(zhì)量開始下降,她可能就認(rèn)為價格會下降。這些個體分析師的差異很大,因為他們的答案極其依賴于他們所看到的數(shù)據(jù)。

因為每個分析師都可以訪問不同的數(shù)據(jù),所以預(yù)計個體差異會很大,但整個集合的總體方差應(yīng)該減少。使用許多個體本質(zhì)上是隨機(jī)森林背后的想法:而不是一個決策樹,使用數(shù)百或數(shù)千個樹來形成一個強(qiáng)大的模型。(過度擬合的問題被稱為偏差-方差權(quán)衡,它是機(jī)器學(xué)習(xí)中的一個基本主題)。

隨機(jī)森林

隨機(jī)森林是許多決策樹組成的模型。這個模型不僅僅是一個森林,而且它還是隨機(jī)的,因為有兩個概念:

隨機(jī)抽樣的數(shù)據(jù)點;
基于要素子集拆分的節(jié)點;

隨機(jī)抽樣

隨機(jī)森林背后的關(guān)鍵是每棵樹在數(shù)據(jù)點的隨機(jī)樣本上訓(xùn)練。樣本用替換(稱為bootstrapping)繪制,這意味著一些樣本將在一個樹中多次訓(xùn)練。這個想法是通過對不同樣本的每棵樹進(jìn)行訓(xùn)練,盡管每棵樹相對于一組特定的訓(xùn)練數(shù)據(jù)可能有很大的差異,但總體而言,整個森林的方差都很小。每個學(xué)習(xí)者在數(shù)據(jù)的不同子集上學(xué)習(xí),然后進(jìn)行平均的過程被稱為bagging,簡稱bootstrap aggregating。

用于拆分節(jié)點的隨機(jī)特征子集

隨機(jī)森林背后的另一個關(guān)鍵點是,只考慮所有特征的子集來分割每個決策樹中的每個節(jié)點。通常,這被設(shè)置為sqrt(n_features)意味著在每個節(jié)點處,決策樹考慮在特征的樣本上分割總計特征總數(shù)的平方根?紤]到每個節(jié)點的所有特征,也可以訓(xùn)練隨機(jī)森林。

如果你掌握單個決策樹、bagging決策樹和隨機(jī)特征子集,那么你就可以很好地理解隨機(jī)森林的工作原理。隨機(jī)森林結(jié)合了數(shù)百或數(shù)千個決策樹,在略微不同的觀察集上訓(xùn)練每個決策樹,并且僅考慮有限數(shù)量的特征來分割每個樹中的節(jié)點。隨機(jī)森林做出的最終預(yù)測是通過平均每棵樹的預(yù)測來做出的。

隨機(jī)森林實踐

與其他Scikit-Learn模型非常相似,在Python中使用隨機(jī)森林只需要幾行代碼。我們將構(gòu)建一個隨機(jī)森林,但不是針對上面提到的簡單問題。為了將隨機(jī)森林與單個決策樹的能力進(jìn)行對比,我們將使用分為訓(xùn)練和測試的真實數(shù)據(jù)集。

數(shù)據(jù)集

我們要解決的問題是二進(jìn)制分類任務(wù)。這些特征是個人的社會經(jīng)濟(jì)和生活方式特征,標(biāo)簽是健康狀況不佳為0和身體健康為1。此數(shù)據(jù)集是由中心疾病控制和預(yù)防收集,可以在這里找到。這是一個不平衡的分類問題,因此準(zhǔn)確性不是一個合適的指標(biāo)。相反,我們將測量接收器工作特性區(qū)域曲線(ROC AUC),從0(最差)到1(最佳)的度量,隨機(jī)猜測得分為0.5。我們還可以繪制ROC曲線以評估模型性能。

 

 

該筆記本包含了決策樹和隨機(jī)森林的實現(xiàn),但在這里我們只專注于隨機(jī)森林。在讀取數(shù)據(jù)后,我們可以實現(xiàn)并訓(xùn)練隨機(jī)森林如下:

 

 

在訓(xùn)練幾分鐘后,準(zhǔn)備好對測試數(shù)據(jù)進(jìn)行如下預(yù)測:

 

 

我們進(jìn)行類預(yù)測(predict)以及predict_proba計算ROC AUC所需的預(yù)測概率()。一旦我們進(jìn)行了預(yù)測測試,我們就可以將它們與測試標(biāo)簽進(jìn)行比較,以計算出ROC AUC。

 

 

結(jié)果

最終的ROC AUC是隨機(jī)森林為0.87,而單一決策樹是0.67。如果我們查看訓(xùn)練分?jǐn)?shù),我們注意到兩個模型都達(dá)到了1.0 ROC AUC,因為我們給這些模型提供了訓(xùn)練答案,并沒有限制最大深度。然而,盡管隨機(jī)森林過度擬合,但它能夠比單一決策樹更好地推廣測試數(shù)據(jù)。

如果我們檢查模型,我們會看到單個決策樹達(dá)到最大深度55,總共12327個節(jié)點。隨機(jī)森林中的平均決策樹的深度為46和13396個節(jié)點。即使平均節(jié)點數(shù)較多,隨機(jī)森林也能更好地推廣!

我們還可以繪制單個決策樹(頂部)和隨機(jī)森林(底部)的ROC曲線。頂部和左側(cè)的曲線是更好的模型:

 

 

 

 

我們看到隨機(jī)森林明顯優(yōu)于單一決策樹。我們可以采用模型的另一個診斷措施是繪制測試預(yù)測的混淆矩陣:

 

 

特征重要性(Feature Importances)

隨機(jī)森林中的特征重要性表示在該特征上拆分的所有節(jié)點上Gini系數(shù)減少的總和。我們可以使用這些來嘗試找出隨機(jī)森林最重要的預(yù)測變量,同時也可以從訓(xùn)練有素的隨機(jī)森林中提取特征重要性,并將其放入Pandas數(shù)據(jù)框中,如下所示:

 

 

我們還可以通過刪除具有0或低重要性的特征來使用特征重要性來選擇特征。

在森林中可視化樹

最后,我們可以在森林中可視化單個決策樹。這次,我們必須限制樹的深度,否則它將太大而無法轉(zhuǎn)換為圖像。為了制作我將最大深度限制為6,這仍然導(dǎo)致我們無法完全解析的大樹!

 

 

優(yōu)化決策樹

下一步可能是通過隨機(jī)搜索和Scikit-Learn中的RandomizedSearchCV來優(yōu)化隨機(jī)森林。

優(yōu)化是指在給定數(shù)據(jù)集上找到模型的最佳超參數(shù)。最佳超參數(shù)將在數(shù)據(jù)集之間變化,因此我們必須在每個數(shù)據(jù)集上單獨執(zhí)行優(yōu)化(也稱為模型調(diào)整)。我喜歡將模型調(diào)整視為尋找機(jī)器學(xué)習(xí)算法的最佳設(shè)置。有關(guān)隨機(jī)森林模型優(yōu)化的隨機(jī)搜索的實現(xiàn),請參閱Jupyter Notebook。

結(jié)論

在本文中,我們不僅在Python中構(gòu)建和使用了隨機(jī)森林,而且還對模型的進(jìn)行了分析。

我們首先查看了一個單獨的決策樹,一個隨機(jī)森林的基本構(gòu)建塊,然后我們看到了如何在一個集合模型中組合數(shù)百個決策樹。當(dāng)與bagging特征一起使用和隨機(jī)抽樣時,該集合模型被稱為隨機(jī)森林。從這篇文章中理解的關(guān)鍵概念是:

決策樹:直觀模型,根據(jù)詢問有關(guān)特征值的問題流程圖做出決策,通過過度擬合訓(xùn)練數(shù)據(jù)表示方差高。

Gini Impurity:衡量決策樹在拆分每個節(jié)點時嘗試最小化的度量。表示根據(jù)節(jié)點中樣本的分布對來自節(jié)點的隨機(jī)選擇的樣本進(jìn)行分類的概率。

Bootstrapping:用替換的方式隨機(jī)觀察組進(jìn)行采樣。隨機(jī)森林用于訓(xùn)練每個決策樹的方法。

隨機(jī)的特征子集:在考慮如何在決策樹中分割每個節(jié)點時選擇一組隨機(jī)特征。

隨機(jī)森林:由數(shù)百或數(shù)千個決策樹組成的集合模型,使用自舉,隨機(jī)特征子集和平均投票來進(jìn)行預(yù)測。這是一個bagging整體的例子。

偏差-方差權(quán)衡:機(jī)器學(xué)習(xí)中的基本問題,描述了高復(fù)雜度模型之間的權(quán)衡,以采用最好的方式學(xué)習(xí)訓(xùn)練數(shù)據(jù),代價是無法推廣到測試數(shù)據(jù)以及簡單的模型(高偏見)甚至無法學(xué)習(xí)訓(xùn)練數(shù)據(jù)。隨機(jī)森林減少了單個決策樹的方差,同時還準(zhǔn)確地學(xué)習(xí)了訓(xùn)練數(shù)據(jù),從而更好地預(yù)測了測試數(shù)據(jù)。

希望本文為你提供了開始在項目中使用隨機(jī)森林所需的信心和理解。隨機(jī)森林是一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,但這不應(yīng)該阻止我們知道它是如何工作的!

文章原標(biāo)題《an-implementation-and-explanation-of-the-random-forest-in-python》

作者:William Koehrsen 譯者:虎說八道

標(biāo)簽: 代碼 搜索 推廣

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:美團(tuán)DB數(shù)據(jù)同步到數(shù)據(jù)倉庫的架構(gòu)與實踐

下一篇:大數(shù)據(jù)處理基本過程