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

    文章

    8414

    浏览量

    132607
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84661
  • 随机森林
    +关注

    关注

    1

    文章

    22

    浏览量

    4270

原文标题:机器学习笔记系列(十四) | 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 7467次阅读
    蚁群<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 1646次阅读

    [源代码]Python算法详解

    [源代码]Python算法详解[源代码]Python算法详解
    发表于 06-06 17:50 0次下载

    基于Python实现随机森林算法

    机器学习算法是数据挖掘、数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中较为常用的两种算法,本文将会对随机森林
    的头像 发表于 09-21 11:17 1208次阅读
    基于<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 661次阅读

    Python建模算法与应用

    Python作为一种功能强大、免费、开源且面向对象的编程语言,在科学计算、数学建模、数据分析等领域展现出了卓越的性能。其简洁的语法、对动态输入的支持以及解释性语言的本质,使得Python在多个平台
    的头像 发表于 07-24 10:41 550次阅读