衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Random Forest算法 python實現案例分析

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

Randomw Forest算法 python實現,該系列文章主要是對常見的機器學習算法的實現。

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

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

隨機森林 Random Forest

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

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

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

隨機森林算法

Random Forest算法案例 python實現

(代碼可以左右滑動看)

第一步:構建數據(這里用make_blobs()來構建聚類數據)

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

n_samples是待生成的樣本的總數;
n_features是每個樣本的特征數;
centers表示類別數;
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() 
       # 繪制訓練點    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()])
    # 將結果放入到帶顏色的圖中    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()    
    # 繪制訓練點    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)
    # 將擬合結果繪制在帶顏色的圖中  
  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)
#定義可設置深度的決策樹分類器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)

如上圖,當決策樹的深度不斷增加時,會出現不同的分類區域,比如當depth=10時,在黃色和藍色之間存在一條紫色區域,這塊數據應該是噪聲或者特定采樣的結果,這塊不能歸為紫色一類,這種現象其實就是過擬合。

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

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

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來實現

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8438

    瀏覽量

    133080
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037
  • 隨機森林
    +關注

    關注

    1

    文章

    22

    瀏覽量

    4286

原文標題:機器學習筆記系列(十四) | Random Forest算法 python實現

文章出處:【微信號:AI_class_vip,微信公眾號:人工智能學研社】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    利用python實現KNN算法

    K近鄰python實現
    發表于 10-25 17:24

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

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

    KNN分類算法python代碼實現

    kNN分類算法Python實現
    發表于 06-05 12:02

    Python實現k-近鄰算法

    算法。5、測試算法:計算錯誤率。6、使用算法:首先需要輸入樣本數據和結構化的輸出結果,然后運行k-近鄰算法判定輸入數據分別屬于哪個分類,最后應用對計算出的分類執行后續的處理。關于k-近
    發表于 01-04 14:03

    random

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

    BP神經網絡算法 python實現

    直接上代碼是最有效的學習方式。這篇教程通過由一段簡短的 python 代碼實現的非常簡單的實例來講解 BP 反向傳播算法
    發表于 12-29 14:06 ?2.2w次閱讀
    BP神經網絡<b class='flag-5'>算法</b> <b class='flag-5'>python</b><b class='flag-5'>實現</b>

    大數據分析到底需要多少種工具_大數據分析總結

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

    蟻群算法python編程實現

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

    Python基礎教程之《Python機器學習—預測分析核心算法》免費下載

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

    多元統計分析:R與Python實現

    多元統計分析:R與Python實現說明。
    發表于 05-27 11:27 ?14次下載

    Python實現所有算法-基本牛頓法

    Python實現所有算法-二分法 Python實現所有算法-力系統是否靜態平衡
    的頭像 發表于 07-13 10:40 ?1682次閱讀

    [源代碼]Python算法詳解

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

    基于Python實現隨機森林算法

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

    如何使用Python生成四位隨機數字

    為了實現這些目標,Python 為我們提供了random() 模塊。random() 是一個內置的 Python 模塊,用于生成隨機數。
    的頭像 發表于 04-15 12:47 ?773次閱讀

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python在多個平臺
    的頭像 發表于 07-24 10:41 ?659次閱讀
    赌博博彩论坛| 自贡百家乐官网赌场娱乐网规则 | 百家乐官网网上投注文章| 澳门百家乐玩法与游戏规则| 网上百家乐官网娱乐场开户注册| 百家乐官网上分器定位器| 网上百家乐官网破战| 太阳城百家乐官网怎样开户| 百胜百家乐官网软件| 广南县| 利高娱乐城| 真钱现金斗地主| 皇冠足球比分| 新濠百家乐娱乐城| 百家乐平注法口诀技巧| 海港城百家乐的玩法技巧和规则 | 百家乐官网视频象棋| 大发真钱娱乐城| 锦江国际娱乐| 赌球网| 郑州市| 土默特左旗| 百家乐官网靠什么赢| 太原市| 百家乐官网投注法| 赌场百家乐官网信誉| 百家乐官网讲谈| YY百家乐官网的玩法技巧和规则| 查找百家乐官网群| 百家乐经验在哪找| 菲律宾百家乐娱乐场| 百家乐园云鼎赌场娱乐网规则| 澳门百家乐手机软件| 大发888娱 太阳城| 体育博彩概论| 永利博线上娱乐城| 百家乐官网太阳城球讯网| 百家乐官网怎么稳赢| 百家乐赔率技巧| 百家乐公式论坛| 全讯网纯净版|