zoukankan      html  css  js  c++  java
  • 机器学习之随机森林

    随机森林模型

      bagging模型的核心思想是每次同类别、彼此之间无强关联的基学习器,以均等投票机制进行基学习器的组合。

      具体的方式是:从训练集样本中随机抽取一部分样本,采用任意一个适合样本数据的机器学习模型对该样本进行训练,得到训练好的基学习器;然后再次抽取样本,训练一个基学习器;重复你想要的次数,得到多个基学习器;接着让每个基学习器对目标进行预测,得到一个预测结果,最后以均等投票方式,采用少数服从多数原则确定最后的预测结果。bagging模型每次对样本数据的采样是有放回的,每次采样的数据可能会部分包含前面采样的数据。

      bagging的代表就是随机森林(randomforest ,RF)。RF默认采样cart作为基学习器,而且他在bagging模型的基础上再进一步,每次训练基学习器时,除对样本随机采样外,对样本的特征也进行随机采样。随机森林的泛化能力比较强。

    RF之sklearn实现

    RF模型:

    from sklearn.ensemble import RandomForestClassifier
    from sklearn.ensemble import RandomForestRegressor
    RandomForestClassifier(n_estimators=100 ,
                           criterion='gini' ,
                           oob_score=False ,
                           max_features='auto' ,
                           max_depth=None ,
                           max_leaf_nodes=None ,
                           min_samples_split=2 ,
                           min_impurity_split=1e-07 ,
                           min_samples_leaf=1 ,
                           class_weight=None ,
                           n_job=1)

    参数:

      n_estimators:基学习器的最大迭代次数,基学习器的个数。阈值设置太小时模型容易欠拟合,设置过大时又容易过拟合,需要根据实际情况选择一个合适的数值,默认值为100

      criterion:cart决策树进行特征划分时采用的评价标准。该参数对于分类模型和回归模型不一样。分类可选择gini、entropy,默认为gini;回归可选mse(均方误差)和mae(绝对误差),默认为mse,该参数一般选择默认即可

      oob_score:是否采用袋外样本来评估模型的好坏。由于RF模型采样时可能会重复采样,训练样本的部分数据可能一次都没有被抽到,因此这部分数据可以用来作为验证集辅助评估模型的好坏。推荐使用True 。对于提升模型的泛化能力有一定作用

      max_features:划分时考虑的最大特征数,可以选择None 、log2 、sqrt 、auto,默认为None ,划分时考虑最大特征数,选择log2表示划分时考虑log2M个特征(M为特征总数),选择sqrt和auto,则表示划分时最多考虑sqrt(M)个特征

      class_weight:指定各类别的权重,默认为None,当样本很不均衡时使用balanced

      max_depth:决策树的最大深度,默认不输入,表示决策树在建立子树的时候不会限制子树的深度。当模型样本量多、特征多的时候需要做限制,一般取值在10-100之间。

      max_leaf_nodes:最大叶子节点数,默认为None,当特征较多时加以限制,防止过拟合。

      min_samples_split:内部节点在划分时所需要的最小样本数。如果某节点的样本数小于设置的min_samples_split的值,则不会继续分叉子树,默认为2

      min_impurity_split:节点划分的最小不纯度。该值用来限制决策树的分叉,如果节点的不纯度(信息增益、基尼系数、标准差)小于这个阈值,该节点不再分叉子节点,直接作为叶节点

      n_jobs:略..............

    属性:

      feature_importances_:给出各个特征的重要程度,值越大表示对应的特征越重要

      estimators_:存放各个训练好的基学习器情况,为一个列表

      n_features_:模型训练好时使用的特征数目

      n_outputs_:模型训练好后输出的数目

      oob_score_:模型训练好后使用训练集袋外样本验证得到的分数

      oob_prediction:训练好的模型对训练集袋外样本预测的结果

    方法:

      apply(X):获取样本X中各个样本在集成模型的各基学习器(为一颗cart分类树)中叶子节点位置信息

      fit(X_train ,y_train):进行模型训练

      score(X_test ,y_test):返回模型在测试集上的预测准确率

      predict(X):用训练好的模型来预测待预测数据集X,返回数据为预测集对应的预测结果yˆ

      predict_proba(X):返回一个数组,数组元素依次为预测集X属于各个类别的概率,回归树没有该方法

      predict_log_proba(X):返回一个数组,数组的元素依次是预测集X属于各个类别的对数概率,回归树没有该方法

    小结:

      RF每次都是通过随机抽取训练样本中的一本部分样本和随机选择被抽取样本中的一部分特征进行单个模型训练。

    1、优点:

      1、由于RF各个基学习器之间没有强相关联,因此学习过程可以分开,实现并行化,在处理大样本数据的时候具有很大的速度优势。

      2、由于RF每次训练时,各个基学习器只是抽取样本的部分特征进行训练,因此对于样本特征维度很高的情况,RF可以高效的进行训练。

      3、由于RF的每个基学习器只是随机抽取部分样本和部分特征进行学习,因此模型的泛化能力较强。

      4、由于RF采用的是cart决策树,而cart决策树对缺失值不敏感,所以RF对部分特征缺失不敏感。

      5、RF训练模型之后可以输出各个特征对预测结果的重要性,因此可以辅助做特征选择。

    2、缺点:

      RF模型的基学习器采用了决策树模型,而决策树模型对噪声比较敏感,所以RF模型在某些噪声较大的样本集上容易陷入过拟合。

     

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/fm-yangon/p/14133221.html
Copyright © 2011-2022 走看看