Python機(jī)器學(xué)習(xí) 第2版 課件 第10章集成學(xué)習(xí)_第1頁(yè)
Python機(jī)器學(xué)習(xí) 第2版 課件 第10章集成學(xué)習(xí)_第2頁(yè)
Python機(jī)器學(xué)習(xí) 第2版 課件 第10章集成學(xué)習(xí)_第3頁(yè)
Python機(jī)器學(xué)習(xí) 第2版 課件 第10章集成學(xué)習(xí)_第4頁(yè)
Python機(jī)器學(xué)習(xí) 第2版 課件 第10章集成學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Machine

Learning

with

Python10.1目錄10.210.410.3集成學(xué)習(xí)理論隨機(jī)森林投票法提升法10.5本章小結(jié)集成學(xué)習(xí)理論本節(jié)介紹集成學(xué)習(xí)理論及其包含的串行集成方法和并行集成方法。10.13

10.1集成學(xué)習(xí)理論集成學(xué)習(xí)介紹

集成學(xué)習(xí)是一種功能十分強(qiáng)大的機(jī)器學(xué)習(xí)方法,其基本思想是先通過一定的規(guī)則生成一定數(shù)量的基學(xué)習(xí)器,再采用某種集成策略將這些基學(xué)習(xí)器的預(yù)測(cè)結(jié)果組合起來,從而形成最終的結(jié)論。集成學(xué)習(xí)不是一個(gè)單獨(dú)的機(jī)器學(xué)習(xí)算法,而是一個(gè)將多重或多個(gè)弱學(xué)習(xí)器組合成一個(gè)強(qiáng)學(xué)習(xí)器,從而有效地提升分類效果。

集成學(xué)習(xí)主要包括3個(gè)部分:個(gè)體的生成方法、基學(xué)習(xí)器(個(gè)體學(xué)習(xí)器)和結(jié)論的合(集)成方法。一般而言,集成學(xué)習(xí)中的基學(xué)習(xí)器可以是同質(zhì)的“弱學(xué)習(xí)器”,也可以是異質(zhì)的“弱學(xué)習(xí)器”。目前,同質(zhì)基學(xué)習(xí)器的應(yīng)用最為廣泛,同質(zhì)基學(xué)習(xí)器使用最多的模型是CART決策樹和神經(jīng)網(wǎng)絡(luò)。同質(zhì)基學(xué)習(xí)器按照基學(xué)習(xí)器之間是否存在依賴關(guān)系又可以分為兩類。4

10.1集成學(xué)習(xí)理論串行集成方法

參與訓(xùn)練的基學(xué)習(xí)器按照順序執(zhí)行。串行方法的原理是利用基學(xué)習(xí)器之間的依賴關(guān)系,對(duì)之前訓(xùn)練中錯(cuò)誤標(biāo)記的樣本賦以較高的權(quán)重值,以提高整體的預(yù)測(cè)效果,其代表算法是Boosting算法。并行集成方法

參與訓(xùn)練的基學(xué)習(xí)器并行執(zhí)行。并行方法的原理是利用基學(xué)習(xí)器之間的獨(dú)立性,由于基學(xué)習(xí)器之間不存在強(qiáng)依賴關(guān)系,通過平均可以顯著降低錯(cuò)誤率,其代表算法是Bagging和隨機(jī)森林算法。集成策略

根據(jù)集成學(xué)習(xí)的用途不同,結(jié)論合成的方法也各不相同。當(dāng)集成學(xué)習(xí)用于分類時(shí),集成的輸出通常由各基學(xué)習(xí)器的輸出投票產(chǎn)生。通常采用絕對(duì)多數(shù)投票法(某分類成為最終結(jié)果,當(dāng)且僅當(dāng)有超過半數(shù)的基學(xué)習(xí)器輸出結(jié)果為該分類)或相對(duì)多數(shù)投票法(某分類成為最終結(jié)果,當(dāng)且僅當(dāng)輸出結(jié)果為該分類的基學(xué)習(xí)器的數(shù)目最多)。理論分析和大量實(shí)驗(yàn)表明,后者優(yōu)于前者。當(dāng)集成學(xué)習(xí)用于回歸時(shí),集成的輸出通常是由各學(xué)習(xí)器的輸出通過簡(jiǎn)單平均或加權(quán)平均產(chǎn)生,采用加權(quán)平均可以得到比簡(jiǎn)單平均更好的泛化能力。隨機(jī)森林本節(jié)介紹隨機(jī)森林算法原理和實(shí)驗(yàn)及參數(shù)10.26

10.2.1算法原理

7

10.2.2實(shí)現(xiàn)及參數(shù)

Scikit-learn中提供了隨機(jī)森林分類器,其函數(shù)原型如下:sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion='gini',max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features='auto',max_leaf_nodes=None,bootstrap=True,oob_score=False,n_jobs=1,random_state=None,verbose=0,warm_start=False)

8

10.2.2實(shí)現(xiàn)及參數(shù)

主要參數(shù):1)n_estimators:隨機(jī)森林中樹的數(shù)量。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值10。2)criterion:特征選擇標(biāo)準(zhǔn)。數(shù)據(jù)類型為字符串,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值gini。其可選值如:gini:表示切分時(shí)的評(píng)價(jià)準(zhǔn)則時(shí)gini系數(shù);entropy:表示切分的評(píng)價(jià)準(zhǔn)則時(shí)信息熵。3)max_depth:決策樹的最大深度。數(shù)據(jù)類型為整型或None,與決策樹中一致。4)min_samples_split:子數(shù)據(jù)集再切分需要的最小樣本數(shù)。數(shù)據(jù)類型為整型或浮點(diǎn)型,與決策樹中一致。5)min_samples_leaf:葉子結(jié)點(diǎn)上的最小樣本數(shù)。數(shù)據(jù)類型為整型或浮點(diǎn)型,與決策樹中一致。6)min_weight_fraction_leaf:葉子結(jié)點(diǎn)最小的樣本權(quán)重和。數(shù)據(jù)類型為浮點(diǎn)型,與決策樹中一致。7)max_features:劃分結(jié)點(diǎn)以尋找最優(yōu)劃分特征時(shí),設(shè)置允許搜索的最大特征個(gè)數(shù)。數(shù)據(jù)類型為整型、浮點(diǎn)型、字符串型或None,與決策樹中一致。

9

10.2.2實(shí)現(xiàn)及參數(shù)

主要參數(shù):8)max_leaf_nodes:最大葉子結(jié)點(diǎn)數(shù)。數(shù)據(jù)類型為整型或None,與決策樹中一致。限制最大葉子結(jié)點(diǎn)數(shù),可以防止過擬合。9)bootstrap:建立決策樹時(shí),是否使用有放回抽樣。數(shù)據(jù)類型為布爾型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值True,即放回抽樣。10)oob_score:估計(jì)泛化誤差時(shí)是否使用袋外樣本(out-of-bagsamples)。數(shù)據(jù)類型為布爾型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值False,即不使用袋外樣本。11)n_jobs:用于擬合和預(yù)測(cè)的并行作業(yè)數(shù)量。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值1。如果值為-1,則并行工作的數(shù)量被設(shè)置為CPU核的數(shù)量。12)random_state:隨機(jī)種子的設(shè)置。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值None,即使用當(dāng)前系統(tǒng)時(shí)間作為種子,每次隨機(jī)結(jié)果不同。6)min_weight_fraction_leaf:葉子結(jié)點(diǎn)最小的樣本權(quán)重和。數(shù)據(jù)類型為浮點(diǎn)型,與決策樹中一致。13)verbose:控制決策樹建立過程的冗余度。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值0。14)warm_start:數(shù)據(jù)類型為布爾型。若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值False。當(dāng)被設(shè)置為True時(shí),調(diào)用之前的模型,用來擬合完整數(shù)據(jù)集或添加更多的基學(xué)習(xí)器,反之則創(chuàng)建一個(gè)全新的隨機(jī)森林。10

10.2.2實(shí)現(xiàn)及參數(shù)

主要屬性:1)estimators_:決策樹實(shí)例的數(shù)組,存放所有訓(xùn)練過的決策樹。2)classes_:類別標(biāo)簽。3)n_classes_:類別的數(shù)量。4)n_features_:訓(xùn)練時(shí)使用的特征數(shù)量。5)n_outputs_:訓(xùn)練時(shí)輸出的數(shù)量。6)features_importances:特征的重要程度。該值越高,則該特征越重要。7)oob_score_:訓(xùn)練數(shù)據(jù)使用包外估計(jì)時(shí)的得分。

11

10.2.2實(shí)現(xiàn)及參數(shù)

主要方法:1)fit(X,y[,sample_weight]):訓(xùn)練模型。2)predict(X):用模型進(jìn)行預(yù)測(cè),返回預(yù)測(cè)值。3)predict_log_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是X預(yù)測(cè)為各個(gè)類別的概率的對(duì)數(shù)值。11)predict_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是X預(yù)測(cè)為各個(gè)類別的概率值。12)n_outputs_:訓(xùn)練時(shí)輸出的數(shù)量。4)score(X,y[,sample_weight]):返回在(X,y)上預(yù)測(cè)的準(zhǔn)確率。

12

10.2.2實(shí)現(xiàn)及參數(shù)【例10-1】對(duì)隨機(jī)森林分類器和決策樹分類器進(jìn)行比較:#導(dǎo)入內(nèi)置數(shù)據(jù)集模塊fromsklearn.datasetsimportload_breast_cancer#導(dǎo)入sklearn模塊中的決策樹分類器類和隨機(jī)森林分類器類fromsklearn.treeimportDecisionTreeClassifierfromsklearn.ensembleimportRandomForestClassifier#導(dǎo)入sklearn模塊中的模型驗(yàn)證類fromsklearn.model_selectionimporttrain_test_split,cross_val_scoreimportmatplotlib.pyplotasplt13

10.2.2實(shí)現(xiàn)及參數(shù)#導(dǎo)入乳腺癌數(shù)據(jù)集cancer=load_breast_cancer()#使用train_test_split函數(shù)自動(dòng)分割訓(xùn)練集與測(cè)試集,其中test_size為測(cè)試集所占比例x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.3)#定義一個(gè)決策樹分類器對(duì)象用于做比較dt=DecisionTreeClassifier(random_state=0)#定義一個(gè)隨機(jī)森林分類器對(duì)象rf=RandomForestClassifier(random_state=0)dt.fit(x_train,y_train)rf.fit(x_train,y_train)score_dt=dt.score(x_test,y_test)score_rf=rf.score(x_test,y_test)14

10.2.2實(shí)現(xiàn)及參數(shù)#輸出準(zhǔn)確率print('SingleTree:',score_dt)print('RandomForest:',score_rf)dt_scores=[]rf_scores=[]#使用cross_val_score進(jìn)行交叉驗(yàn)證,其中:#cv為份數(shù),即將數(shù)據(jù)集劃分為n分,依次取每一份做測(cè)試集,其他n-1份做訓(xùn)練集,#返回每次測(cè)試準(zhǔn)確率評(píng)分的列表foriinrange(10):rf_score=cross_val_score(RandomForestClassifier(n_estimators=25),cancer.data,cancer.target,cv=10).mean()rf_scores.append(rf_score)dt_score=cross_val_score(DecisionTreeClassifier(),cancer.data,cancer.target,cv=10).mean()dt_scores.append(dt_score)15

10.2.2實(shí)現(xiàn)及參數(shù)#繪制評(píng)分對(duì)比曲線plt.figure()plt.title('RandomForestVSDecisionTree')plt.xlabel('Index')plt.ylabel('Accuracy')plt.plot(range(10),rf_scores,label='RandomForest')plt.plot(range(10),dt_scores,label='DecisionTree')plt.legend()plt.show()16

10.2.2實(shí)現(xiàn)及參數(shù)#觀察弱分類器數(shù)量對(duì)分類準(zhǔn)確度的影響rf_scores=[]foriinrange(1,50):rf=RandomForestClassifier(n_estimators=i)rf_score=cross_val_score(rf,cancer.data,cancer.target,cv=10).mean()rf_scores.append(rf_score)

plt.figure()plt.title('RandomForest')plt.xlabel('n_estimators')plt.ylabel('Accuracy')plt.plot(range(1,50),rf_scores)plt.show()17

10.2.2實(shí)現(xiàn)及參數(shù)程序運(yùn)行結(jié)果如下,繪制的結(jié)果圖如圖10-1、圖10-2所示:SingleTree:0.9181286549707602RandomForest:0.9473684210526315

圖10-1隨機(jī)森林和決策樹對(duì)比圖

圖10-2隨機(jī)森林算法準(zhǔn)確率隨弱分類器數(shù)量變化圖

投票法本節(jié)介紹投票法算法原理和實(shí)現(xiàn)及參數(shù)10.319

10.3投票法

20

10.3投票法

21

10.3投票法Scikit-learn中提供了一種投票法分類器,其函數(shù)原型如下:sklearn.ensemble.Votingclassifier(estimators,voting=’hard’,weights=None,n_jobs=1)22

10.3投票法

主要參數(shù):1)estimators:預(yù)測(cè)器序列。每個(gè)預(yù)測(cè)器必須有fit函數(shù)進(jìn)行訓(xùn)練。2)voting:投票模式。數(shù)據(jù)類型為字符串型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值hard。其可選參數(shù)如下:hard:使用多數(shù)規(guī)則表決預(yù)測(cè)的類標(biāo)簽;soft:基于各個(gè)基學(xué)習(xí)器的預(yù)測(cè)概率之和預(yù)測(cè)類標(biāo)簽。3)weights:不同預(yù)測(cè)器的權(quán)重。數(shù)據(jù)類型為字整型或None,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值None。4)n_jobs:用于擬合和預(yù)測(cè)的并行運(yùn)行的工作(作業(yè))數(shù)量。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值1。如果值為-1,那么工作數(shù)量被設(shè)置為核的數(shù)量。

23

10.3投票法

主要方法:1)fit(X,y[,sample_weight]):訓(xùn)練模型。2)predict(X):用模型進(jìn)行預(yù)測(cè),返回預(yù)測(cè)值。3)score(X,y[,sample_weight]):返回在(X,y)上預(yù)測(cè)的準(zhǔn)確率。

24

10.3投票法

【例10-2】使用投票法進(jìn)行樣本分類:#導(dǎo)入內(nèi)置數(shù)據(jù)集模塊fromsklearn.datasetsimportload_breast_cancer#導(dǎo)入sklearn模塊中的分類器類fromsklearn.ensembleimportVotingClassifierfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.treeimportDecisionTreeClassifierfromsklearn.naive_bayesimportGaussianNB#導(dǎo)入sklearn模塊中的模型驗(yàn)證類fromsklearn.model_selectionimporttrain_test_split,cross_val_scoreimportmatplotlib.pyplotasplt

25

10.3投票法

【例10-2】使用投票法進(jìn)行樣本分類:#導(dǎo)入乳腺癌數(shù)據(jù)集cancer=load_breast_cancer()x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.3,random_state=0)#定義分類器對(duì)象clf1=KNeighborsClassifier()clf2=DecisionTreeClassifier()clf3=GaussianNB()#使用上述三個(gè)弱分類器作為Voting分類器的子分類器vcfh=VotingClassifier(estimators=[('knn',clf1),('dt',clf2),('gnb',clf3)],voting='hard')vcfs=VotingClassifier(estimators=[('knn',clf1),('dt',clf2),('gnb',clf3)],voting='soft')

26

10.3投票法【例10-2】使用投票法進(jìn)行樣本分類:#分類并輸出結(jié)果forclf,clf_nameinzip([clf1,clf2,clf3,vcfh,vcfs],['KNN','DecisionTree','NaiveBayes','HardVoting','SoftVoting']):clf=clf.fit(x_train,y_train)score=clf.score(x_test,y_test)print('Accuracyof%s:%.2f'%(clf_name,score))

程序運(yùn)行結(jié)果如下:AccuracyofKNN:0.95AccuracyofDecisionTree:0.90AccuracyofNaiveBayes:0.92AccuracyofHardVoting:0.94AccuracyofSoftVoting:0.95提升法本節(jié)介紹提升法算法原理和實(shí)現(xiàn)及參數(shù)10.428

10.4提升法提升法原理

Boosting是一種可將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器的算法。這種算法先從初始訓(xùn)練集訓(xùn)練出一個(gè)基學(xué)習(xí)器,再根據(jù)基學(xué)習(xí)器的表現(xiàn)對(duì)訓(xùn)練樣本分布進(jìn)行調(diào)整,使得先前基學(xué)習(xí)器做錯(cuò)的訓(xùn)練樣本在后續(xù)受到更多關(guān)注,然后基于調(diào)整后的樣本分布來訓(xùn)練下一個(gè)基學(xué)習(xí)器。如此重復(fù)進(jìn)行,直至基學(xué)習(xí)器數(shù)目達(dá)到事先指定的值T,最終將這T個(gè)基學(xué)習(xí)器進(jìn)行加權(quán)結(jié)合。Boosting擁有系列算法,如AdaBoost,GradientBoosting,LogitBoost等,其中最著名的代表是AdaBoost算法。Boosting中的個(gè)體分類器可以是不同類的分類器。29

10.4提升法

30

10.4提升法

31

10.4提升法Scikit-learn中提供了一種AdaBoost分類器,其函數(shù)原型如下:

sklearn.ensemble.AdaBoostClassifier(base_estimator=None,n_estimators=50learning_rate=1.0,algorithm='SAMME.R',random_state=None)32

10.4提升法

主要參數(shù):1)base_estimator:基分類器,在該分類器基礎(chǔ)上進(jìn)行boosting。默認(rèn)為決策樹,理論上可以是任意一個(gè)分類器,但是如果使用其他分類器時(shí)需要指明樣本權(quán)重。。2)n_estimators:基分類器提升(循環(huán))次數(shù)。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值50。這個(gè)值過大,模型容易過擬合,值過小,模型容易欠擬合。。3)learning_rate:學(xué)習(xí)率,表示梯度收斂速度。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值1。如果過大,容易錯(cuò)過最優(yōu)值,如果過小,則收斂速度會(huì)很慢。該值需要和n_estimators進(jìn)行一個(gè)權(quán)衡,當(dāng)分類器迭代次數(shù)較少時(shí),學(xué)習(xí)率可以小一些,當(dāng)?shù)螖?shù)較多時(shí),學(xué)習(xí)率可以適當(dāng)放大。4)algorithm:模型提升準(zhǔn)則。數(shù)據(jù)類型為字符串型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值SAMME.R??蛇x值如:

SAMME:對(duì)樣本集預(yù)測(cè)錯(cuò)誤的概率進(jìn)行劃分;SAMME.R:對(duì)樣本集的預(yù)測(cè)錯(cuò)誤的比例,即錯(cuò)分率進(jìn)行劃分。5)random_state:設(shè)置隨機(jī)種子。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值None。

33

10.4提升法

主要屬性:1)estimators_:所有訓(xùn)練過的基礎(chǔ)分類器。2)classes_:類別標(biāo)簽。3)n_classes_:類別的數(shù)量。4)estimator_weights_:每個(gè)基礎(chǔ)分類器的權(quán)重。5)feature_importances:每個(gè)特征的重要性。6)estimator_errors_:每個(gè)基礎(chǔ)分類器的分類誤差。

34

10.4提升法

主要方法:1)fit(X,y[,sample_weight]):訓(xùn)練模型。2)predict(X):用模型進(jìn)行預(yù)測(cè),返回預(yù)測(cè)值。3)predict_log_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是X預(yù)測(cè)為各個(gè)類別的概率的對(duì)數(shù)值。4)predict_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是X預(yù)測(cè)為各個(gè)類別的概率值。5)score(X,y[,sample_weight]):返回在(X,y)上預(yù)測(cè)的準(zhǔn)確率。6)staged_predict_proba(X):返回一個(gè)二維數(shù)組,數(shù)組的元素依次是每一輪迭代結(jié)束時(shí)尚未完成的集成分類器預(yù)測(cè)X為各個(gè)類別的概率值。7)staged_predict(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是每一輪迭代結(jié)束時(shí)尚未完成的集成分類器的預(yù)測(cè)值。8)staged_score(X,y[,sample_weight]):返回一個(gè)數(shù)組,數(shù)組的元素依次是每一輪迭代結(jié)束時(shí)尚未完成的集成分類器的預(yù)測(cè)準(zhǔn)確率。

35

10.4提升法【例10-3】對(duì)AdaBoost分類器和決策樹分類器進(jìn)行比較:fromsklearn.datasetsimportload_breast_cancerfromsklearn.treeimportDecisionTreeClassifierfromsklearn.ensembleimportAdaBoostClassifierfromsklearn.model_selectionimporttrain_test_split,cross_val_scoreimportmatplotlib.pyplotaspltcancer=load_breast_cancer()x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.3,random_state=1)abc=AdaBoostClassifier(DecisionTreeClassifier(),algorithm='SAMME',n_estimators=50,learning_rate=0.1)

36

10.4提升法【例10-3】對(duì)AdaBoost分類器和決策樹分類器進(jìn)行比較:dt=DecisionTreeClassifier()abc.fit(x_train,y_train)dt.fit(x_train,y_train)score_abc=abc.score(x_test,y_test)score_dt=dt.score(x_test,y_test)

#輸出準(zhǔn)確率print('AdaBoost:',score_abc)print('DecisionTree:',score_dt)#測(cè)試n_estimators參數(shù)對(duì)分類效果的影響abc_scores=[]

37

10.4提升法【例10-3】對(duì)AdaBoost分類器和決策樹分類器進(jìn)行比較:foriinrange(1,50):abc.estimators_=iabc.fit(x_train,y_train)abc_score=abc.score(x_test,y_test)abc_scores.append(abc_score)#繪制結(jié)果plt.figure()plt.title('AdaBoost')plt.xlabel('n_estimators')plt.ylabel('Accuracy')plt.plot(range(1,50),abc_scores)plt.show()

38

10.4提升法程序運(yùn)行結(jié)果如下,繪制的結(jié)果圖如圖10-3所示:AdaBoost:0.9590643274853801DecisionTree:0.9181286549707602圖10-3Adaboost算法準(zhǔn)確率隨n_estimators參數(shù)變化圖39

10.4提升法

40

10.4提升法Scikit-learn中的梯度提升分類器的函數(shù)原型如下:

sklearn.ensemble.GradientBoostingClassifier(learning_rate=0.1,n_estimators=100,subsample=1.0,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_depth=3,random_state=None,max_features=None,verbose=0,max_leaf_nodes=None,presort=‘a(chǎn)uto’)41

10.4提升法

主要參數(shù):1)min_samples_split:子數(shù)據(jù)集再切分需要的最小樣本數(shù)。數(shù)據(jù)類型為整型或浮點(diǎn)型,與決策樹中一致。2)min_samples_leaf:葉子結(jié)點(diǎn)上的最小樣本數(shù)。數(shù)據(jù)類型為整型或浮點(diǎn)型,與決策樹中一致。3)min_weight_fraction_leaf:葉子結(jié)點(diǎn)最小的樣本權(quán)重和。數(shù)據(jù)類型為浮點(diǎn)型,與決策樹中一致。4)max_depth:決策樹的最大深度。數(shù)據(jù)類型為整型或None,與決策樹中一致。5)max_leaf_nodes:最大葉子結(jié)點(diǎn)數(shù)。數(shù)據(jù)類型為整型或None,與決策樹中一致。6)max_features:隨機(jī)森林允許單個(gè)決策樹使用特征的最大數(shù)量。數(shù)據(jù)類型為整型、浮點(diǎn)型、字符串型或None,與決策樹中一致。

42

10.4提升法

主要參數(shù):7)learning_rate:每個(gè)弱學(xué)習(xí)器的權(quán)重縮減系數(shù)。數(shù)據(jù)類型為浮點(diǎn)型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值1.0。8)n_estimators:弱學(xué)習(xí)器的最大個(gè)數(shù)。數(shù)據(jù)類型為整型,若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值100。9)subsample:放回抽樣比例。數(shù)據(jù)類型為浮點(diǎn)型,取值范圍為[0,1],若不指定該參數(shù)值,則自動(dòng)使用默認(rèn)參數(shù)值1。如果取值為1,則全部樣本都使用,等于沒有使用子采樣。如果取值小于1,則只有一部分樣本會(huì)去做GBDT的決策樹擬合。選擇小于1的比例可以減少方差,即防止過擬合,但是會(huì)增加樣本擬合的偏差,因此取值不能太低,推薦在[0.5,0.8]之間。10)random_state:隨機(jī)種子的設(shè)置。數(shù)據(jù)類型為整型,與決策樹中一致。11)verbose:控制決策樹建立過程的冗余度。數(shù)據(jù)類型為整型,與決策樹中一致。12)persort:是否進(jìn)行預(yù)排序。數(shù)據(jù)類型為布爾型,與決策樹中一致。

43

10.4提升法

主要屬性:1)estimators_:每棵基礎(chǔ)決策樹。2)init:初始預(yù)測(cè)使用的分類器。3)oob_improvement_:輸出一個(gè)數(shù)組,給出了每增加一棵基礎(chǔ)決策樹,在包外估計(jì)的損失函數(shù)的改善情況。4)train_score_:輸出一個(gè)數(shù)組,給出了每增加一棵基礎(chǔ)決策樹,在訓(xùn)練集上的損失函數(shù)的值。5)feature_importances:每個(gè)特征的重要性。

44

10.4提升法

主要方法:1)fit(X,y[,sample_weight,monitor]):訓(xùn)練模型。其中monitor是一個(gè)可調(diào)用對(duì)象,它在當(dāng)前迭代過程結(jié)束時(shí)調(diào)用。如果返回True,則訓(xùn)練過程提前終止。2)predict(X):用模型進(jìn)行預(yù)測(cè),返回預(yù)測(cè)值。3)predict_log_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是X預(yù)測(cè)為各個(gè)類別的概率的對(duì)數(shù)值。4)predict_proba(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是X預(yù)測(cè)為各個(gè)類別的概率值。5)score(X,y[,sample_weight]):返回在(X,y)上預(yù)測(cè)的準(zhǔn)確率。6)staged_predict_proba(X):返回一個(gè)二維數(shù)組,數(shù)組的元素依次是每一輪迭代結(jié)束時(shí)集成分類器預(yù)測(cè)X為各個(gè)類別的概率值。7)staged_predict(X):返回一個(gè)數(shù)組,數(shù)組的元素依次是每一輪迭代結(jié)束時(shí)集成分類器的預(yù)測(cè)值。

45

10.4提升法【例10-4】對(duì)梯度提升分類器和決策樹分類器進(jìn)行比較:fromsklearn.datasetsimportload_breast_cancerfromsklearn.treeimportDecisionTreeClassifierfromsklearn.ensembleimportGradientBoostingClassifierfromsklearn.model_selectionimporttrain_test_split,cross_val_scoreimportmatplotlib.pyplotaspltimportnumpyasnpcancer=load_breast_cancer()x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.3,random_state=1)gbc=GradientBoostingClassifier(n_estimators=100,learning_rate=0.1)

46

10.4提升法【例10-4】對(duì)梯度提升分類器和決策樹分類器進(jìn)行比較:fromsklearn.datasetsimportload_breast_cancerfromsklearn.treeimportDecisionTreeClassifierfromsklearn.ensembleimportGradientBoostingClassifierfromsklearn.model_selectionimporttrain_test_split,cross_val_scoreimportmatplotlib.pyplotaspltimportnumpyasnpcancer=load_breast_cancer()x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.3,random_state=1)gbc=GradientBoostingClassifier(n_estimators=100,learning_rate=0.1)

47

10.4提升法【例10-4】對(duì)梯度提升分類器和決策樹分類器進(jìn)行比較:dt=DecisionTreeClassifier()gbc.fit(x_train,y_train)dt.fit(x_train,y_train)score_gbc=gbc.score(x_test,y_test)score_dt=dt.score(x_test,y_test)#輸出準(zhǔn)確率print('GradientBoost:',score_gbc)print('DecisionTree:',score_dt)

48

10.4提升法【例10-4】對(duì)梯度提升分類器和決策樹分類器進(jìn)行比較:#測(cè)試learning_rate參數(shù)對(duì)分類效果的影響gbc_scores=[]foriinnp.arange(0.1,1,0.05):gbc.learning_rate=igbc.fit(x_train,y_train)gbc_score=gbc.score(x_test,y_test)gbc_scores.append(gbc_score)

#繪制測(cè)試結(jié)果plt.figure()plt.title('GradientBoost')plt.xlabel('learning_rate')plt.ylabel('Accuracy')

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論