• 【笔记】随机森林和Extra-Trees


    随机森林和Extra-Trees

    随机森林

    先前说了bagging的方法,其中使用的算法都是决策树算法,对于这样的模型,因为具有很多棵树,而且具备了随机性,那么就可以称为随机森林

    在sklearn中封装了随机森林的类,可以使用这个类直接创建出一个随机森林,同时sklearn中的随机森林模型的随机性更为复杂,对于决策树来说,都是对每一个节点进行划分,详情看这里

    在sklearn中的封装的随机森林默认在每一个节点上,都是在一个随机的特征子集上寻找一个最优的划分,并不是在节点上对所有的特征进行划分,这就增加了每一个子模型的随机性

    具体使用

    (在notebook中)

    加载好需要的类库,虚拟数据的随机种子设置为666,绘制图像

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets
    X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=666)
    plt.scatter(X[y==0,0],X[y==0,1])
    plt.scatter(X[y==1,0],X[y==1,1])
    

    图像如下

    使用sklearn提供的随机模型只要调用RandomForestClassifier这个类就可以,然后实例化,传入参数,设置样本点为500,随机种子为666,使用全部核心并行,并使用未使用的样本点进行测试计算准确度,然后进行训练,计算准确度

    from sklearn.ensemble import RandomForestClassifier
    
    rf_clf = RandomForestClassifier(n_estimators=500,random_state=666,oob_score=True,n_jobs=-1)
    rf_clf.fit(X,y)
    rf_clf.oob_score_
    

    结果如下

    新添加一个参数进行实例化,传入参数max_leaf_nodes,限制每一个决策树的叶子节点,设置为16,然后训练并计算样本的准确度

    rf_clf2 = RandomForestClassifier(n_estimators=500,max_leaf_nodes=16,random_state=666,oob_score=True,n_jobs=-1)
    rf_clf2.fit(X,y)
    rf_clf2.oob_score_
    

    结果如下

    可以不断调参以获得更好的准确度,这里不难发现,随机森林的参数是可以使用决策树的参数的

    Extra trees

    和随机森林非常类似的还有Extra trees,极其随机的森林,其极其的随机性表现在,在节点划分上,直接使用随机的特征和随机的阈值,可以想象,这每棵树的差别会更加的大,很随机,这种方式提供了额外的随机性,而且抑制了过拟合(方差),但是这样的操作增大了bias(偏差),所以要看问题本身是不是适合使用这种方法

    这个方法比起随机森林而言,有着更快的训练速度,在sklearn中使用也很简单,调用ExtraTreesClassifier这个类就可以了,使用的参数也和RandomForestClassifier一样,需要注意的是,bootsreap默认是flase,所以要使用放回取样还需要设置为true,然后训练并计算准确度

    from sklearn.ensemble import ExtraTreesClassifier
    
    et_clf = ExtraTreesClassifier(n_estimators=500,bootstrap=True,oob_score=True,random_state=666)
    et_clf.fit(X,y)
    et_clf.oob_score_
    

    结果如下

    添加一个新的参数,添加max_leaf_nodes=,设置为16,然后训练模型并计算准确度

    et_clf2 = ExtraTreesClassifier(n_estimators=500,max_leaf_nodes=16,bootstrap=True,oob_score=True,random_state=666)
    et_clf2.fit(X,y)
    et_clf2.oob_score_
    

    结果如下

    其实集成学习也可以解决回归问题,在sklearn中可以使用很多类来解决,比如baggingregressor,randomforestregressor,extratreesregressor等类,使用方式和上面大致一样,不过因为解决的是回归问题,所以输出结果是一个数字

    感谢观看,文笔有限,博客不出彩,还请多多见谅
  • 相关阅读:
    Spring Boot 打包插件,真是太有用了!
    java高级应用:线程池全面解析
    漫画:HTTP 协议极简教程,傻瓜都能看懂!
    Tomcat 连接数与线程池详解
    Intellij IDEA Debug 调试技巧
    Java 程序员必须掌握的 5 个注解!
    如何优雅地终止一个线程?
    springmvc实现REST中的GET、POST、PUT和DELETE
    @Resource 和 @Autowired注解的异同
    SpringMVC的各种参数绑定方式
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14347727.html
Copyright © 2020-2023  润新知