zoukankan      html  css  js  c++  java
  • 【笔记】随机森林和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等类,使用方式和上面大致一样,不过因为解决的是回归问题,所以输出结果是一个数字

    感谢观看,文笔有限,博客不出彩,还请多多见谅
  • 相关阅读:
    队列的顺序存储表示---数组实现
    栈的应用---用栈计算逆波兰表达式
    栈的应用--栈用作判断平衡符号,[()]对的,[(])错的
    栈ADT的数组实现
    栈ADT的链表实现
    链表的游标实现
    链表应用之基数排序
    多项式ADT的数组实现
    ListView13添加2
    计算器的简单编写,熟悉访问器,重载
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14347727.html
Copyright © 2011-2022 走看看