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

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

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

Random Forest算法 python實現(xiàn)案例分析

sekJ_AI_class_v ? 2019-09-23 09:58 ? 次閱讀

Randomw Forest算法 python實現(xiàn),該系列文章主要是對常見的機器學(xué)習(xí)算法的實現(xiàn)。

完整的筆記和代碼以上傳到Github,地址為(覺得有用的話,歡迎Fork,請給作者個Star):

https://github.com/Vambooo/lihang-dl

隨機森林 Random Forest

隨機森林是對多棵樹組合對樣本訓(xùn)練預(yù)測的一種分類器,它是Bagging方法的最流行的版本之一。

可以理解為隨機森林是個體模型為決策樹的Bagging算法。

隨機森林由Breiman提出的一種分類算法,它使用Bootstrap重采樣技術(shù),從原始訓(xùn)練樣本集中有放回的重復(fù)隨機抽取n個樣本生成新的樣本集合,以此作為訓(xùn)練集來訓(xùn)練決策樹。然后按照上述步驟生成m棵決策樹組合而成隨機森林。

隨機森林算法

Random Forest算法案例 python實現(xiàn)

(代碼可以左右滑動看)

第一步:構(gòu)建數(shù)據(jù)(這里用make_blobs()來構(gòu)建聚類數(shù)據(jù))

X, y = make_blobs(n_samples=3000, centers=2, random_state=42, cluster_std=1.0)

n_samples是待生成的樣本的總數(shù);
n_features是每個樣本的特征數(shù);
centers表示類別數(shù);
cluster_std表示每個類別的方差。

from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=300, centers=4,
random_state=0, cluster_std=1.0)plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='rainbow');

定義樹的可視化方法

def visualize_tree(estimator, X, y, boundaries=True, 
                  xlim=None, ylim=None, ax=None): 
   ax = ax or plt.gca() 
       # 繪制訓(xùn)練點    ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap='viridis', 
              clim=(y.min(), y.max()), zorder=3)  
  ax.axis('tight')    ax.axis('off')    if xlim is None:
        xlim = ax.get_xlim()    if ylim is None: 
       ylim = ax.get_ylim()  
      # 擬合估計器    estimator.fit(X, y)  
  xx, yy = np.meshgrid(np.linspace(*xlim, num=200),                   
      np.linspace(*ylim, num=200))    Z = estimator.predict(np.c_[xx.ravel(), yy.ravel()])
    # 將結(jié)果放入到帶顏色的圖中    n_classes = len(np.unique(y))  

  Z = Z.reshape(xx.shape)    contours = ax.contourf(xx, yy, Z, alpha=0.3,                      
     levels=np.arange(n_classes + 1) - 0.5,                      
     cmap='viridis',zorder=1)
    ax.set(xlim=xlim, ylim=ylim)    
    # 繪制決策邊界    def plot_boundaries(i, xlim, ylim):     

   if i >= 0:      
      tree = estimator.tree_              
      if tree.feature[i] == 0:           
     ax.plot([tree.threshold[i], tree.threshold[i]], ylim, '-k', zorder=2)   
             plot_boundaries(tree.children_left[i],      
                          [xlim[0], tree.threshold[i]], ylim)   
             plot_boundaries(tree.children_right[i],                            
    [tree.threshold[i], xlim[1]], ylim)                    elif tree.feature[i] == 1:  
              ax.plot(xlim, [tree.threshold[i], tree.threshold[i]], '-k', zorder=2)         
       plot_boundaries(tree.children_left[i], xlim,                     
           [ylim[0], tree.threshold[i]])         
       plot_boundaries(tree.children_right[i], xlim,                       
         [tree.threshold[i], ylim[1]])          
      if boundaries:   
     plot_boundaries(0, xlim, ylim)

定義分類器的可視化方法

def visualize_classifier(model, X, y, ax=None, cmap='rainbow'):  
  ax = ax or plt.gca()    
    # 繪制訓(xùn)練點    ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=cmap,    
           clim=(y.min(), y.max()), zorder=3)    ax.axis('tight') 
   ax.axis('off')    xlim = ax.get_xlim()    ylim = ax.get_ylim()     
   # 擬合估計器    model.fit(X, y)
   xx, yy = np.meshgrid(np.linspace(*xlim, num=200),                   
      np.linspace(*ylim, num=200))  
  Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
    # 將擬合結(jié)果繪制在帶顏色的圖中  
  n_classes = len(np.unique(y))  
  contours = ax.contourf(xx, yy, Z, alpha=0.3,     
  levels=np.arange(n_classes + 1) - 0.5,    
  cmap=cmap,                        
    zorder=1)
    ax.set(xlim=xlim, ylim=ylim)
#定義可設(shè)置深度的決策樹分類器def depth_tree(depth=5):    clf = DecisionTreeClassifier(max_depth=depth, random_state=0)    visualize_tree(clf, X, y)

深度為1的決策樹分類器,分類效果

from sklearn.tree import DecisionTreeClassifiertree = DecisionTreeClassifier().fit(X, y)visualize_classifier(DecisionTreeClassifier(), X, y)

深度為5的決策樹分類器,分類效果

depth_tree(depth=5)

深度為10的決策樹分類器,分類效果

depth_tree(depth=10)

深度為15的決策樹分類器,分類效果

depth_tree(depth=15)

如上圖,當(dāng)決策樹的深度不斷增加時,會出現(xiàn)不同的分類區(qū)域,比如當(dāng)depth=10時,在黃色和藍(lán)色之間存在一條紫色區(qū)域,這塊數(shù)據(jù)應(yīng)該是噪聲或者特定采樣的結(jié)果,這塊不能歸為紫色一類,這種現(xiàn)象其實就是過擬合。

可以通過組合多個分類器(這里是決策樹分類器)來減少這個種過擬合的影響。這也是Bagging的思想。

下面就是使用Bagging來組合100個DecisionTreeClassifier來進(jìn)行測試。其中使用80%的數(shù)據(jù)來隨機化數(shù)據(jù)

from sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import BaggingClassifier
tree = DecisionTreeClassifier()bag = BaggingClassifier(tree, n_estimators=100, max_samples=0.8,                        random_state=1)
bag.fit(X, y)visualize_classifier(bag, X, y)

也可以直接使用Scikit-learn中已定義好的RandomForestClassifier來實現(xiàn)

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=0)visualize_classifier(model, X, y);

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

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131838
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84068
  • 隨機森林
    +關(guān)注

    關(guān)注

    1

    文章

    22

    瀏覽量

    4250

原文標(biāo)題:機器學(xué)習(xí)筆記系列(十四) | Random Forest算法 python實現(xiàn)

文章出處:【微信號:AI_class_vip,微信公眾號:人工智能學(xué)研社】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    利用python實現(xiàn)KNN算法

    K近鄰python實現(xiàn)
    發(fā)表于 10-25 17:24

    Python的Apriori算法和FP-Growth算法是什么

    [源碼和文檔分享]基于Python實現(xiàn)的Apriori算法和FP-Growth算法的頻繁項集挖掘的研究與實現(xiàn)
    發(fā)表于 06-04 12:49

    KNN分類算法python代碼實現(xiàn)

    kNN分類算法Python實現(xiàn)
    發(fā)表于 06-05 12:02

    Python實現(xiàn)k-近鄰算法

    算法。5、測試算法:計算錯誤率。6、使用算法:首先需要輸入樣本數(shù)據(jù)和結(jié)構(gòu)化的輸出結(jié)果,然后運行k-近鄰算法判定輸入數(shù)據(jù)分別屬于哪個分類,最后應(yīng)用對計算出的分類執(zhí)行后續(xù)的處理。關(guān)于k-近
    發(fā)表于 01-04 14:03

    random

    random.rar
    發(fā)表于 02-25 15:58 ?6次下載

    BP神經(jīng)網(wǎng)絡(luò)算法 python實現(xiàn)

    直接上代碼是最有效的學(xué)習(xí)方式。這篇教程通過由一段簡短的 python 代碼實現(xiàn)的非常簡單的實例來講解 BP 反向傳播算法。
    發(fā)表于 12-29 14:06 ?2.1w次閱讀
    BP神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>算法</b> <b class='flag-5'>python</b><b class='flag-5'>實現(xiàn)</b>

    大數(shù)據(jù)分析到底需要多少種工具_(dá)大數(shù)據(jù)分析總結(jié)

    大數(shù)據(jù)分析性能的好壞,也就是說機器學(xué)習(xí)預(yù)測的準(zhǔn)確率,與使用的學(xué)習(xí)算法、問題的性質(zhì)、數(shù)據(jù)集的特性包括數(shù)據(jù)規(guī)模、數(shù)據(jù)特征等都有關(guān)系。一般地,Ensemble方法包括Random Forest
    發(fā)表于 01-05 14:37 ?1.2w次閱讀
    大數(shù)據(jù)<b class='flag-5'>分析</b>到底需要多少種工具_(dá)大數(shù)據(jù)<b class='flag-5'>分析</b>總結(jié)

    蟻群算法python編程實現(xiàn)

    本文主要介紹了Python編程實現(xiàn)蟻群算法詳解,涉及螞蟻算法的簡介,主要原理及公式,以及Python中的
    發(fā)表于 02-02 10:36 ?7390次閱讀
    蟻群<b class='flag-5'>算法</b><b class='flag-5'>python</b>編程<b class='flag-5'>實現(xiàn)</b>

    Python基礎(chǔ)教程之《Python機器學(xué)習(xí)—預(yù)測分析核心算法》免費下載

     在學(xué)習(xí)和研究機器學(xué)習(xí)的時候,面臨令人眼花繚亂的算法,機器學(xué)習(xí)新手往往會不知所措。本書從算法Python 語言實現(xiàn)的角度,幫助讀者認(rèn)識機器學(xué)習(xí)。
    發(fā)表于 09-29 08:00 ?19次下載

    多元統(tǒng)計分析:R與Python實現(xiàn)

    多元統(tǒng)計分析:R與Python實現(xiàn)說明。
    發(fā)表于 05-27 11:27 ?10次下載

    Python實現(xiàn)所有算法-基本牛頓法

    Python實現(xiàn)所有算法-二分法 Python實現(xiàn)所有算法-力系統(tǒng)是否靜態(tài)平衡
    的頭像 發(fā)表于 07-13 10:40 ?1528次閱讀

    [源代碼]Python算法詳解

    [源代碼]Python算法詳解[源代碼]Python算法詳解
    發(fā)表于 06-06 17:50 ?0次下載

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

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

    如何使用Python生成四位隨機數(shù)字

    為了實現(xiàn)這些目標(biāo),Python 為我們提供了random() 模塊。random() 是一個內(nèi)置的 Python 模塊,用于生成隨機數(shù)。
    的頭像 發(fā)表于 04-15 12:47 ?441次閱讀

    Python建模算法與應(yīng)用

    Python作為一種功能強大、免費、開源且面向?qū)ο蟮木幊陶Z言,在科學(xué)計算、數(shù)學(xué)建模、數(shù)據(jù)分析等領(lǐng)域展現(xiàn)出了卓越的性能。其簡潔的語法、對動態(tài)輸入的支持以及解釋性語言的本質(zhì),使得Python在多個平臺
    的頭像 發(fā)表于 07-24 10:41 ?256次閱讀