0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

集成學(xué)習(xí)和隨機(jī)森林,提供代碼實(shí)現(xiàn)

lviY_AI_shequ ? 來源:未知 ? 作者:李倩 ? 2018-07-17 17:07 ? 次閱讀

假設(shè)你去隨機(jī)問很多人一個(gè)很復(fù)雜的問題,然后把它們的答案合并起來。通常情況下你會(huì)發(fā)現(xiàn)這個(gè)合并的答案比一個(gè)專家的答案要好。這就叫做群體智慧。同樣的,如果你合并了一組分類器的預(yù)測(cè)(像分類或者回歸),你也會(huì)得到一個(gè)比單一分類器更好的預(yù)測(cè)結(jié)果。這一組分類器就叫做集成;因此,這個(gè)技術(shù)就叫做集成學(xué)習(xí),一個(gè)集成學(xué)習(xí)算法就叫做集成方法。

例如,你可以訓(xùn)練一組決策樹分類器,每一個(gè)都在一個(gè)隨機(jī)的訓(xùn)練集上。為了去做預(yù)測(cè),你必須得到所有單一樹的預(yù)測(cè)值,然后通過投票(例如第六章的練習(xí))來預(yù)測(cè)類別。例如一種決策樹的集成就叫做隨機(jī)森林,它除了簡(jiǎn)單之外也是現(xiàn)今存在的最強(qiáng)大的機(jī)器學(xué)習(xí)算法之一。

向我們?cè)诘诙掠懻摰囊粯樱覀儠?huì)在一個(gè)項(xiàng)目快結(jié)束的時(shí)候使用集成算法,一旦你建立了一些好的分類器,就把他們合并為一個(gè)更好的分類器。事實(shí)上,在機(jī)器學(xué)習(xí)競(jìng)賽中獲得勝利的算法經(jīng)常會(huì)包含一些集成方法。

在本章中我們會(huì)討論一下特別著名的集成方法,包括 bagging, boosting, stacking,和其他一些算法。我們也會(huì)討論隨機(jī)森林。

投票分類

假設(shè)你已經(jīng)訓(xùn)練了一些分類器,每一個(gè)都有 80% 的準(zhǔn)確率。你可能有了一個(gè)邏輯斯蒂回歸、或一個(gè) SVM、或一個(gè)隨機(jī)森林,或者一個(gè) KNN,或許還有更多(詳見圖 7-1)

一個(gè)非常簡(jiǎn)單去創(chuàng)建一個(gè)更好的分類器的方法就是去整合每一個(gè)分類器的預(yù)測(cè)然后經(jīng)過投票去預(yù)測(cè)分類。這種分類器就叫做硬投票分類器(詳見圖 7-2)。

令人驚奇的是這種投票分類器得出的結(jié)果經(jīng)常會(huì)比集成中最好的一個(gè)分類器結(jié)果更好。事實(shí)上,即使每一個(gè)分類器都是一個(gè)弱學(xué)習(xí)器(意味著它們也就比瞎猜好點(diǎn)),集成后仍然是一個(gè)強(qiáng)學(xué)習(xí)器(高準(zhǔn)確率),只要有足夠數(shù)量的弱學(xué)習(xí)者,他們就足夠多樣化。

這怎么可能?接下來的分析將幫助你解決這個(gè)疑問。假設(shè)你有一個(gè)有偏差的硬幣,他有 51% 的幾率為正面,49% 的幾率為背面。如果你實(shí)驗(yàn) 1000 次,你會(huì)得到差不多 510 次正面,490 次背面,因此大多數(shù)都是正面。如果你用數(shù)學(xué)計(jì)算,你會(huì)發(fā)現(xiàn)在實(shí)驗(yàn) 1000 次后,正面概率為 51% 的人比例為 75%。你實(shí)驗(yàn)的次數(shù)越多,正面的比例越大(例如你試驗(yàn)了 10000 次,總體比例可能性就會(huì)達(dá)到 97%)。這是因?yàn)榇髷?shù)定律 :當(dāng)你一直用硬幣實(shí)驗(yàn)時(shí),正面的比例會(huì)越來越接近 51%。圖 7-3 展示了始終有偏差的硬幣實(shí)驗(yàn)。你可以看到當(dāng)實(shí)驗(yàn)次數(shù)上升時(shí),正面的概率接近于 51%。最終所有 10 種實(shí)驗(yàn)都會(huì)收斂到 51%,它們都大于 50%。

同樣的,假設(shè)你創(chuàng)建了一個(gè)包含 1000 個(gè)分類器的集成模型,其中每個(gè)分類器的正確率只有 51%(僅比瞎猜好一點(diǎn)點(diǎn))。如果你用投票去預(yù)測(cè)類別,你可能得到 75% 的準(zhǔn)確率!然而,這僅僅在所有的分類器都獨(dú)立運(yùn)行的很好、不會(huì)發(fā)生有相關(guān)性的錯(cuò)誤的情況下才會(huì)這樣,然而每一個(gè)分類器都在同一個(gè)數(shù)據(jù)集上訓(xùn)練,導(dǎo)致其很可能會(huì)發(fā)生這樣的錯(cuò)誤。他們可能會(huì)犯同一種錯(cuò)誤,所以也會(huì)有很多票投給了錯(cuò)誤類別導(dǎo)致集成的準(zhǔn)確率下降。

如果使每一個(gè)分類器都獨(dú)立自主的分類,那么集成模型會(huì)工作的很好。去得到多樣的分類器的方法之一就是用完全不同的算法,這會(huì)使它們會(huì)做出不同種類的錯(cuò)誤,這會(huì)提高集成的正確率

接下來的代碼創(chuàng)建和訓(xùn)練了在 sklearn 中的投票分類器。這個(gè)分類器由三個(gè)不同的分類器組成(訓(xùn)練集是第五章中的 moons 數(shù)據(jù)集):

>>> from sklearn.ensemble import RandomForestClassifier >>> from sklearn.ensemble import VotingClassifier >>> from sklearn.linear_model import LogisticRegression >>> from sklearn.svm import SVC>>> log_clf = LogisticRegression() >>> rnd_clf = RandomForestClassifier() >>> svm_clf = SVC()>>> voting_clf = VotingClassifier(estimators=[('lr', log_clf), ('rf', rnd_clf), >>> ('svc', svm_clf)],voting='hard') >>> voting_clf.fit(X_train, y_train)

讓我們看一下在測(cè)試集上的準(zhǔn)確率:

>>> from sklearn.metrics import accuracy_score >>> for clf in (log_clf, rnd_clf, svm_clf, voting_clf): >>> clf.fit(X_train, y_train) >>> y_pred = clf.predict(X_test) >>> print(clf.__class__.__name__, accuracy_score(y_test, y_pred)) LogisticRegression 0.864 RandomForestClassifier 0.872 SVC 0.888 VotingClassifier 0.896

你看!投票分類器比其他單獨(dú)的分類器表現(xiàn)的都要好。

如果所有的分類器都能夠預(yù)測(cè)類別的概率(例如他們有一個(gè)predict_proba()方法),那么你就可以讓 sklearn 以最高的類概率來預(yù)測(cè)這個(gè)類,平均在所有的分類器上。這種方式叫做軟投票。他經(jīng)常比硬投票表現(xiàn)的更好,因?yàn)樗o予高自信的投票更大的權(quán)重。你可以通過把voting="hard"設(shè)置為voting="soft"來保證分類器可以預(yù)測(cè)類別概率。然而這不是 SVC 類的分類器默認(rèn)的選項(xiàng),所以你需要把它的probability hyperparameter設(shè)置為True(這會(huì)使 SVC 使用交叉驗(yàn)證去預(yù)測(cè)類別概率,其降低了訓(xùn)練速度,但會(huì)添加predict_proba()方法)。如果你修改了之前的代碼去使用軟投票,你會(huì)發(fā)現(xiàn)投票分類器正確率高達(dá) 91%

Bagging 和 Pasting

換句話說,Bagging 和 Pasting 都允許在多個(gè)分類器間對(duì)訓(xùn)練集進(jìn)行多次采樣,但只有 Bagging

就像之前講到的,可以通過使用不同的訓(xùn)練算法去得到一些不同的分類器。另一種方法就是對(duì)每一個(gè)分類器都使用相同的訓(xùn)練算法,但是在不同的訓(xùn)練集上去訓(xùn)練它們。有放回采樣被稱為裝袋(Bagging,是 bootstrap aggregating 的縮寫)。無放回采樣稱為粘貼(pasting)。

換句話說,Bagging 和 Pasting 都允許在多個(gè)分類器上對(duì)訓(xùn)練集進(jìn)行多次采樣,但只有 Bagging 允許對(duì)同一種分類器上對(duì)訓(xùn)練集進(jìn)行進(jìn)行多次采樣。采樣和訓(xùn)練過程如圖7-4所示。

當(dāng)所有的分類器被訓(xùn)練后,集成可以通過對(duì)所有分類器結(jié)果的簡(jiǎn)單聚合來對(duì)新的實(shí)例進(jìn)行預(yù)測(cè)。聚合函數(shù)通常對(duì)分類是統(tǒng)計(jì)模式(例如硬投票分類器)或者對(duì)回歸是平均。每一個(gè)單獨(dú)的分類器在如果在原始訓(xùn)練集上都是高偏差,但是聚合降低了偏差和方差。通常情況下,集成的結(jié)果是有一個(gè)相似的偏差,但是對(duì)比與在原始訓(xùn)練集上的單一分類器來講有更小的方差。

正如你在圖 7-4 上所看到的,分類器可以通過不同的 CPU 核或其他的服務(wù)器一起被訓(xùn)練。相似的,分類器也可以一起被制作。這就是為什么 Bagging 和 Pasting 是如此流行的原因之一:它們的可擴(kuò)展性很好。

在 sklearn 中的 Bagging 和 Pasting

sklearn 為 Bagging 和 Pasting 提供了一個(gè)簡(jiǎn)單的API:BaggingClassifier類(或者對(duì)于回歸可以是BaggingRegressor。接下來的代碼訓(xùn)練了一個(gè) 500 個(gè)決策樹分類器的集成,每一個(gè)都是在數(shù)據(jù)集上有放回采樣 100 個(gè)訓(xùn)練實(shí)例下進(jìn)行訓(xùn)練(這是 Bagging 的例子,如果你想嘗試 Pasting,就設(shè)置bootstrap=False)。n_jobs參數(shù)告訴 sklearn 用于訓(xùn)練和預(yù)測(cè)所需要 CPU 核的數(shù)量。(-1 代表著 sklearn 會(huì)使用所有空閑核):

>>>from sklearn.ensemble import BaggingClassifier >>>from sklearn.tree import DecisionTreeClassifier>>>bag_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=500, >>>max_samples=100, bootstrap=True, n_jobs=-1) >>>bag_clf.fit(X_train, y_train) >>>y_pred = bag_clf.predict(X_test)

如果基分類器可以預(yù)測(cè)類別概率(例如它擁有predict_proba()方法),那么BaggingClassifier會(huì)自動(dòng)的運(yùn)行軟投票,這是決策樹分類器的情況。

圖 7-5 對(duì)比了單一決策樹的決策邊界和 Bagging 集成 500 個(gè)樹的決策邊界,兩者都在 moons 數(shù)據(jù)集上訓(xùn)練。正如你所看到的,集成的分類比起單一決策樹的分類產(chǎn)生情況更好:集成有一個(gè)可比較的偏差但是有一個(gè)較小的方差(它在訓(xùn)練集上的錯(cuò)誤數(shù)目大致相同,但決策邊界較不規(guī)則)。

Bootstrap 在每個(gè)預(yù)測(cè)器被訓(xùn)練的子集中引入了更多的分集,所以 Bagging 結(jié)束時(shí)的偏差比 Pasting 更高,但這也意味著預(yù)測(cè)因子最終變得不相關(guān),從而減少了集合的方差??傮w而言,Bagging 通常會(huì)導(dǎo)致更好的模型,這就解釋了為什么它通常是首選的。然而,如果你有空閑時(shí)間和 CPU 功率,可以使用交叉驗(yàn)證來評(píng)估 Bagging 和 Pasting 哪一個(gè)更好。

Out-of-Bag 評(píng)價(jià)

對(duì)于 Bagging 來說,一些實(shí)例可能被一些分類器重復(fù)采樣,但其他的有可能不會(huì)被采樣。BaggingClassifier默認(rèn)采樣。BaggingClassifier默認(rèn)是有放回的采樣m個(gè)實(shí)例 (bootstrap=True),其中m是訓(xùn)練集的大小,這意味著平均下來只有63%的訓(xùn)練實(shí)例被每個(gè)分類器采樣,剩下的37%個(gè)沒有被采樣的訓(xùn)練實(shí)例就叫做 Out-of-Bag 實(shí)例。注意對(duì)于每一個(gè)的分類器它們的 37% 不是相同的。

因?yàn)樵谟?xùn)練中分類器從來沒有看到過 oob 實(shí)例,所以它可以在這些實(shí)例上進(jìn)行評(píng)估,而不需要單獨(dú)的驗(yàn)證集或交叉驗(yàn)證。你可以拿出每一個(gè)分類器的 oob 來評(píng)估集成本身。

在 sklearn 中,你可以在訓(xùn)練后需要?jiǎng)?chuàng)建一個(gè)BaggingClassifier來自動(dòng)評(píng)估時(shí)設(shè)置oob_score=True來自動(dòng)評(píng)估。接下來的代碼展示了這個(gè)操作。評(píng)估結(jié)果通過變量oob_score_來顯示:

>>> bag_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=500,bootstrap=True, n_jobs=-1, oob_score=True)>>> bag_clf.fit(X_train, y_train) >>> bag_clf.oob_score_ 0.93066666666666664

根據(jù)這個(gè) obb 評(píng)估,BaggingClassifier可以再測(cè)試集上達(dá)到93.1%的準(zhǔn)確率,讓我們修改一下:

>>> from sklearn.metrics import accuracy_score >>> y_pred = bag_clf.predict(X_test) >>> accuracy_score(y_test, y_pred) 0.93600000000000005

我們?cè)跍y(cè)試集上得到了 93.6% 的準(zhǔn)確率,足夠接近了!

對(duì)于每個(gè)訓(xùn)練實(shí)例 oob 決策函數(shù)也可通過oob_decision_function_變量來展示。在這種情況下(當(dāng)基決策器有predict_proba()時(shí))決策函數(shù)會(huì)對(duì)每個(gè)訓(xùn)練實(shí)例返回類別概率。例如,oob 評(píng)估預(yù)測(cè)第二個(gè)訓(xùn)練實(shí)例有 60.6% 的概率屬于正類(39.4% 屬于負(fù)類):

>>> bag_clf.oob_decision_function_ array([[ 0., 1.], [ 0.60588235, 0.39411765],[ 1., 0. ], ... [ 1. , 0. ],[ 0., 1.],[ 0.48958333, 0.51041667]])

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 分類器
    +關(guān)注

    關(guān)注

    0

    文章

    152

    瀏覽量

    13162
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8349

    瀏覽量

    132312
  • 決策樹
    +關(guān)注

    關(guān)注

    2

    文章

    96

    瀏覽量

    13534

原文標(biāo)題:【翻譯】Sklearn 與 TensorFlow 機(jī)器學(xué)習(xí)實(shí)用指南 —— 第7章 集成學(xué)習(xí)和隨機(jī)森林(上)

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    機(jī)器學(xué)習(xí)算法之隨機(jī)森林算法詳解及工作原理圖解

    隨機(jī)森林是一種靈活且易于使用的機(jī)器學(xué)習(xí)算法,即便沒有超參數(shù)調(diào)優(yōu),也可以在大多數(shù)情況下得到很好的結(jié)果。它也是最常用的算法之一,因?yàn)樗芎?jiǎn)易,既可用于分類也能用于回歸任務(wù)。 在這篇文章中,你將了解到
    的頭像 發(fā)表于 03-14 16:10 ?31.9w次閱讀
    機(jī)器<b class='flag-5'>學(xué)習(xí)</b>算法之<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>算法詳解及工作原理圖解

    不可錯(cuò)過 | 集成學(xué)習(xí)入門精講

    的估計(jì)區(qū)間 4、隨機(jī)森林隨機(jī)森林(Random Forest)是Bagging的擴(kuò)展變體。隨機(jī)森林
    發(fā)表于 06-06 10:11

    機(jī)器學(xué)習(xí)隨機(jī)森林相關(guān)知識(shí)

    機(jī)器學(xué)習(xí)隨機(jī)森林(三)
    發(fā)表于 04-02 10:06

    隨機(jī)森林的相關(guān)知識(shí)

    機(jī)器學(xué)習(xí)隨機(jī)森林(一)
    發(fā)表于 08-27 07:30

    ML之決策樹與隨機(jī)森林

    ML--決策樹與隨機(jī)森林
    發(fā)表于 07-08 12:31

    解讀決策樹與隨機(jī)森林模型的概念

    為什么要引入隨機(jī)森林呢。我們知道,同一批數(shù)據(jù),我們只能產(chǎn)生一顆決策樹,這個(gè)變化就比較單一了,這就有了集成學(xué)習(xí)的概念。
    發(fā)表于 10-18 17:47 ?3669次閱讀
    解讀決策樹與<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>模型的概念

    基于隨機(jī)森林RF和欠采樣集成的垃圾網(wǎng)頁檢測(cè)

    為解決垃圾網(wǎng)頁檢測(cè)過程中的不平衡分類和維數(shù)災(zāi)難問題,提出一種基于隨機(jī)森林( RF)和欠采樣集成的二元分類器算法。首先使用欠采樣技術(shù)將訓(xùn)練樣本集大類抽樣成多個(gè)子樣本集,再將其分別與小類樣本集合并構(gòu)成
    發(fā)表于 12-22 11:32 ?1次下載

    基于稀疏隨機(jī)森林模型的用電側(cè)異常行為檢測(cè)

    異常行為模式檢測(cè)方法。該方法首先利用時(shí)間窗函數(shù)與Bootstrap重采樣,建立用電側(cè)行為模式信息簇。其次,利用基于隨機(jī)權(quán)網(wǎng)絡(luò)的有監(jiān)督學(xué)習(xí)得到隨機(jī)森林模型。最后,對(duì)
    發(fā)表于 12-26 10:19 ?5次下載
    基于稀疏<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>模型的用電側(cè)異常行為檢測(cè)

    淺談機(jī)器學(xué)習(xí)技術(shù)中的隨機(jī)森林算法

    本次主題是隨機(jī)森林,杰里米(講師)提供了一些基本信息以及使用Jupyter Notebook的提示和技巧。 Jeremy談到的一些重要的事情是,數(shù)據(jù)科學(xué)并不等同于軟件工程。 在數(shù)據(jù)科學(xué)中,我們做
    的頭像 發(fā)表于 09-29 15:34 ?1719次閱讀

    一種基于數(shù)據(jù)集成隨機(jī)森林算法

    用于銷售預(yù)測(cè)的歷史數(shù)據(jù)存在稀疏性與波動(dòng)性等特點(diǎn),當(dāng)預(yù)測(cè)周期較長(zhǎng)時(shí),傳統(tǒng)統(tǒng)計(jì)學(xué)或者機(jī)器學(xué)習(xí)領(lǐng)域預(yù)測(cè)算法的預(yù)測(cè)效果較差。為此,利用隨機(jī)森林集成思想與訓(xùn)練數(shù)據(jù)集的
    發(fā)表于 03-16 11:37 ?12次下載
    一種基于數(shù)據(jù)<b class='flag-5'>集成</b>的<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>算法

    隨機(jī)森林的概念、工作原理及用例

    隨機(jī)森林是一種監(jiān)督式算法,使用由眾多決策樹組成的一種集成學(xué)習(xí)方法,輸出是對(duì)問題最佳答案的共識(shí)。隨機(jī)森林
    的頭像 發(fā)表于 08-05 10:00 ?6765次閱讀

    利用隨機(jī)森林進(jìn)行特征重要性評(píng)估

    隨機(jī)森林是以決策樹為基學(xué)習(xí)器的集成學(xué)習(xí)算法。隨機(jī)森林
    的頭像 發(fā)表于 10-10 17:14 ?1821次閱讀

    隨機(jī)森林算法及其實(shí)現(xiàn)

    其實(shí)從直觀角度來解釋,每棵決策樹都是一個(gè)分類器(假設(shè)現(xiàn)在針對(duì)的是分類問題),那么對(duì)于一個(gè)輸入樣本,N棵樹會(huì)有N個(gè)分類結(jié)果。而隨機(jī)森林集成了所有的分類投票結(jié)果,將投票次數(shù)最多的類別指定為最終的輸出,這就是一種最簡(jiǎn)單的 Baggin
    的頭像 發(fā)表于 05-15 09:46 ?1889次閱讀
    <b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>算法及其<b class='flag-5'>實(shí)現(xiàn)</b>

    基于Python實(shí)現(xiàn)隨機(jī)森林算法

    機(jī)器學(xué)習(xí)算法是數(shù)據(jù)挖掘、數(shù)據(jù)能力分析和數(shù)學(xué)建模必不可少的一部分,而隨機(jī)森林算法和決策樹算法是其中較為常用的兩種算法,本文將會(huì)對(duì)隨機(jī)森林算法的
    的頭像 發(fā)表于 09-21 11:17 ?1140次閱讀
    基于Python<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>算法

    什么是隨機(jī)森林?隨機(jī)森林的工作原理

    隨機(jī)森林使用名為“bagging”的技術(shù),通過數(shù)據(jù)集和特征的隨機(jī)自助抽樣樣本并行構(gòu)建完整的決策樹。雖然決策樹基于一組固定的特征,而且經(jīng)常過擬合,但隨機(jī)性對(duì)
    發(fā)表于 03-18 14:27 ?3205次閱讀
    什么是<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>?<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>的工作原理