精华内容
下载资源
问答
  • 机器学习笔记-随机森林调参
    2022-01-24 14:58:13

    1、 scikit-learn随机森林类库概述

      在scikit-learn中,随机森林用于分类的函数接口是RandomForestClassifier,回归类是RandomForestRegressor。当然随机森林的变种有孤立森林和极限森林,这两种算法的主体框架和随机森林很像,所以在介绍调参时只关注随机森林即可。
      随机森林是集成模型,所以在调参的过程中需要考虑两部分,第一是框架参数,第二是CART决策树参数。
    随机森林的调参官方文档参考随机森林调参官方文档

    2、框架参数

    1、n_estimators
      这个参数是随机森林中的树的个数,随机森林原理篇中详细介绍了随机森林本质是由一个个小的基学习器组成的,而且还说到,学习器的个数越多,学习的效果将会越好,但是会加大运行时间。在随机森林中这个参数的默认值是100。
    2、oob_score
      这个参数即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。至于如何理解这个参数呢?其实在随机森林的采样方法中介绍过,对于一个随机森林来说,每一次采样的数据集其实只有63.2%被采集到了,剩下的27.8%是未被采集到的数据,我们称这些数据为袋外样本。
    当这个参数设置为True时,我们可以在模型训练结束后调用属性oob_score_来查看当前训练的模型在包外数据上的预测精度。

    3、决策树参数

      和前面Adaboost的决策树调参类似,在随机森林的决策树参数中,调节的过程其实和针对单个决策树调节的思路是一样的,所以参考决策树调参就可以了决策树调参思路

    更多相关内容
  • 随机森林实现及调参一、R语言方法一、手动调参方法二、网格调参二、python 注:本博客数据仍采用决策树调参的泰坦尼克号数据,前奏(数据预处理)请参考☞ 决策树R&Python调参对比☜ 一、R语言 方法一、手动调参 PS.仅...
  • 随机森林调参

    2021-02-28 16:34:44
  • 随机森林调参 - python

    2021-03-04 11:33:48
    文章目录1、一般的模型调参原则2、随机森林的随机性体现在哪几个方面?2.1 数据集的随机选取2.2 待选特征的随机选取3、为什么使用随机森林?4、随机森林的构建过程5、随机森林优缺点总结5.1 优点5.2 缺点6、特征重要...


    1、一般的模型调参原则

    1、调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调。但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合。过拟合是指模型过于复杂,欠拟合是指模型过于简单。

    2、查找资料:调参时应该知道每一个参数的默认值是多少,其增大或者减小会使模型更加复杂还是更加简单。

    3、调参可以使用两种方法:1、学习曲线 2、网格搜索

      学习曲线只能对参数一个一个进行调整,可以观察参数的增大或者减小具体对模型产生怎样的影响;网格搜索可以同时对多个参数进行调整,也可以对单个参数进行调整。
      我们可以查找资料???找出模型的各个参数对于模型的影响大小的顺序,先对影响较大的参数进行调整,再对影响较小的参数进行调整。——由粗到精
      调参时应该确定模型处于方差-偏差曲线的左侧还是右侧,即模型是过拟合还是欠拟合。

    在这里插入图片描述
    4、学习曲线
      有一些参数,我们不知道它对于模型有着怎样的影响,也不知道参数的合适范围,这时我们可以用学习曲线的方法进行调参。先按照step取较大值进行调,然后在可能最优的范围内缩小步长,进一步确定最佳参数。

    5、网格搜索
      网格搜索既可以一次对多个参数进行调参,也可以一次只调一个参数。但是在一次调多个参数时太费时间,且在调出的参数不是十分好的时候,我们因为不知道其调参的原理因此不知道该如何调整。

    2、随机森林的随机性体现在哪几个方面?

    2.1 数据集的随机选取

      从原始的数据集中采取有放回的抽样(bagging),构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。

    2.2 待选特征的随机选取

      与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。

    3、为什么使用随机森林?

    1. 随机森林既可以用于分类问题,也可以用于回归问题
    2. 过拟合是个关键的问题,可能会让模型的结果变得糟糕,但是对于随机森林来说,如果随机森林的树足够多,那么分类器就不会过拟合模型
    3. 随机森林分类器可以处理缺失值
    4. 随机森林分类器可以用分类值建模

    4、随机森林的构建过程

    1. 从原始训练集中使用Bootstraping方法随机有放回采样取出m个样本,共进行n_tree次采样。生成n_tree个训练集。
    2. 对n_tree个训练集,我们分别训练n_tree个决策树模型。
    3. 对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数,选择最好的特征进行分裂。
    4. 每棵树都已知这样分裂下去,知道该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝。
    5. 将生成的多颗决策树组成随机森林。对于分类问题,按照多棵树分类器投票决定最终分类结果;对于回归问题,由多颗树预测值的均值决定最终预测结果。

      注意:OOB(out-of-bag ):每棵决策树的生成都需要自助采样,这时就有1/3的数据未被选中,这部分数据就称为袋外数据。
    在这里插入图片描述

    5、随机森林优缺点总结

    5.1 优点

    1. 由于采用了集成算法,本身精度比大多数单个算法要好,所以准确性高。
    2. 在测试集上表现良好,由于两个随机性的引入,使得随机森林不容易陷入过拟合(样本随机,特征随机)。
    3. 在工业上,由于两个随机性的引入,使得随机森林具有一定的抗噪声能力,对比其他算法具有一定优势。
    4. 由于树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型。
    5. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
    6. 训练速度快,可以运用在大规模数据集上。
    7. 可以处理缺省值(单独作为一类),不用额外处理。
    8. 由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量。
    9. 在训练过程中,能够检测到feature间的互相影响,且可以得出feature的重要性,具有一定参考意义。
    10. 由于每棵树可以独立、同时生成,容易做成并行化方法。
    11. 由于实现简单、精度高、抗过拟合能力强,当面对非线性数据时,适于作为基准模型。

    5.2 缺点

    1. 当随机森林中的决策树个数很多时,训练时需要的空间和时间会比较大。
    2. 随机森林中还有许多不好解释的地方,有点算是黑盒模型。
    3. 在某些噪音比较大的样本集上,RF的模型容易陷入过拟合。

    6、特征重要性评估

      现实情况下,一个数据集中往往有成百上千个特征,如何在其中选择比结果影响最大的那几个特征,以此来缩减建立模型时特征数是我们比较关心的问题。这样的方法其实很多,比如主成分分析,lasso等等。不过这里我们学习的是用随机森林来进行特征筛选。

      用随机森林进行特征重要性评估的思想就是看每个特征在随机森林中的每棵树上做了多大的贡献,然后取平均值,最后比一比特征之间的贡献大小。

      贡献大小通常使用基尼指数(Gini index)或者袋外数据(OOB)错误率作为评估指标来衡量。这里我们再学习一下基尼指数来评价的方法。

      我们将变量重要性评分(variable importance measures)用VIM来表示,将Gini指数用GI来表示,假设m个特征X1,X2,X3,…Xc,现在要计算出每个特征Xj的Gini指数评分:

    在这里插入图片描述
      即第j个特征在RF所有决策树中节点分裂不纯度的平均改变量。

      Gini指数的计算公式为:

    在这里插入图片描述
      其中,K表示有K个类别。Pmk表示节点m中类列k所占的比例。
      直观的说,就是随便从节点m中随机抽取两个样本,其类别标记不一致的概率。

      特征Xj在节点m的重要性,即节点m分支前后的Gini指数变化量为:

    在这里插入图片描述
      其中,GIl和GIr分别表示分枝后两个新节点的Gini指数。

      如果,特征Xj在决策树i中出现的节点在集合M中,那么Xj在第i颗树的重要性为:

    在这里插入图片描述
      假设RF中共有n颗树,那么

    在这里插入图片描述
      最后,把所有求得的重要性评分做一个归一化处理即可。

    在这里插入图片描述

    6.1 特征选择

    6.1.1 特征选择的步骤

      在特征重要性的基础上,特征选择的步骤如下:

    1. 计算每个特征的重要性,并按降序排序。
    2. 确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集。
    3. 用新的特征集重复上述过程,直到剩下m个特征(m为提前设定的值)。
    4. 根据上述代码中得到的各个特征集合特征集对应的袋外误差率,选择袋外误差率最低的特征集。

    6.1.2 特征重要性的估计方法

      特征重要性的估计通常有两种方法:一是使用uniform或者gaussian抽取随机值替换原特征;一是通过permutation的方式将原来的所有N个样本的第i个特征值重新打乱分布,第二种方法更加科学,保证了特征替代值与原特征的分布是近似的。这种方法叫做permutation test ,即在计算第i个特征的重要性的时候,将N 个特征的第i个特征重新洗牌,然后比较D和表现的差异性,如果差异很大,则表明第i个特征是重要的。

    6.2 利用随机森林进行特征选择

    6.2.1 利用随机森林进行特征选择

    import numpy as np
    import pandas as pd
    from sklearn.ensemble import RandomForestClassifier
     
    url1 = pd.read_csv(r'wine.txt',header=None)
    url1.columns =  ['Class label', 'Alcohol', 'Malic acid', 'Ash',
                  'Alcalinity of ash', 'Magnesium', 'Total phenols',
                  'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins',
                  'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline']
    
    # 查看几个标签
    # Class_label = np.unique(url1['Class label'])
    # print(Class_label)
    # 查看数据信息
    # info_url = url1.info()
    # print(info_url)
     
    # 除去标签之外,共有13个特征,数据集的大小为178,
    # 下面将数据集分为训练集和测试集
    from sklearn.model_selection import train_test_split
    print(type(url1))
    
    x,y = url1.iloc[:,1:].values,url1.iloc[:,0].values
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0)
    feat_labels = url1.columns[1:]
    # n_estimators:森林中树的数量
    # n_jobs  整数 可选(默认=1) 适合和预测并行运行的作业数,如果为-1,则将作业数设置为核心数
    forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)
    forest.fit(x_train, y_train)
     
    # 下面对训练好的随机森林,完成重要性评估
    # feature_importances_  可以调取关于特征重要程度
    importances = forest.feature_importances_
    print("重要性:",importances)
    x_columns = url1.columns[1:]
    
    indices = np.argsort(importances)[::-1]
    for f in range(x_train.shape[1]):
    # 对于最后需要逆序排序,我认为是做了类似决策树回溯的取值,从叶子收敛
    # 到根,根部重要程度高于叶子。
        print("%2d) %-*s %f" % (f + 1, 30, x_columns[indices[f]], importances[indices[f]]))
      
    # 筛选变量(选择重要性比较高的变量)
    threshold = 0.15
    x_selected = x_train[:,importances > threshold]
     
    # 可视化
    import matplotlib.pyplot as plt
    plt.figure(figsize=(10,6))
    plt.title("数据集中各个特征的重要程度",fontsize = 18)
    plt.ylabel("import level",fontsize = 15,rotation=90)
    plt.rcParams['font.sans-serif'] = ["SimHei"]
    plt.rcParams['axes.unicode_minus'] = False
    for i in range(x_columns.shape[0]):
        plt.bar(i,importances[indices[i]],color='orange',align='center')
        plt.xticks(np.arange(x_columns.shape[0]),x_columns,rotation=90,fontsize=15)
    plt.show()
    

    输出结果:

    RangeIndex: 178 entries, 0 to 177
    Data columns (total 14 columns):
    Class label                     178 non-null int64
    Alcohol                         178 non-null float64
    Malic acid                      178 non-null float64
    Ash                             178 non-null float64
    Alcalinity of ash               178 non-null float64
    Magnesium                       178 non-null int64
    Total phenols                   178 non-null float64
    Flavanoids                      178 non-null float64
    Nonflavanoid phenols            178 non-null float64
    Proanthocyanins                 178 non-null float64
    Color intensity                 178 non-null float64
    Hue                             178 non-null float64
    OD280/OD315 of diluted wines    178 non-null float64
    Proline                         178 non-null int64
    dtypes: float64(11), int64(3)
    memory usage: 19.5 KB
     
     
    重要性: [0.10658906 0.02539968 0.01391619 0.03203319 0.02207807 0.0607176
     0.15094795 0.01464516 0.02235112 0.18248262 0.07824279 0.1319868
     0.15860977]
     
     1) Color intensity                0.182483
     2) Proline                        0.158610
     3) Flavanoids                     0.150948
     4) OD280/OD315 of diluted wines   0.131987
     5) Alcohol                        0.106589
     6) Hue                            0.078243
     7) Total phenols                  0.060718
     8) Alcalinity of ash              0.032033
     9) Malic acid                     0.025400
    10) Proanthocyanins                0.022351
    11) Magnesium                      0.022078
    12) Nonflavanoid phenols           0.014645
    13) Ash                            0.013916
    

    在这里插入图片描述

    7、scikit-learn随机森林类库概述

      sklearn.ensemble模块包含了两种基于随机决策树的平均算法:RandomForest算法和Extra-Trees算法。这两种算法都采用了很流行的树设计思想:perturb-and-combine思想。这种方法会在分类器的构建时,通过引入随机化,创建一组各不一样(diverse)的分类器。这种ensemble方法的预测会给出各个分类器预测的平均。

      在sklearn.ensemble库中,我们可以找到Random Forest分类和回归的实现:RandomForestClassifier和RandomForestRegression 有了这些模型后,我们的做法是立马上手操作,因为学习中提供的示例都很简单,但是实际中遇到很多问题,下面概述一下:

    1. 命名模型调教的很好了,可是效果离我们的想象总有些偏差?——模型训练的第一步就是要定要目标,往错误的方向走太多也是后退。
    2. 凭直觉调了某个参数,可是居然没有任何作用,有时甚至起到反作用?——定好目标后,接下来就是要确定哪些参数是影响目标的,其对目标是正影响还是负影响,影响的大小。
    3. 感觉训练结束遥遥无期,sklearn只是一个在小数据上的玩具?——虽然sklearn并不是基于分布式计算环境而设计的,但是我们还是可以通过某些策略提高训练的效率
    4. 模型开始训练了,但是训练到哪一步了呢?——饱暖思淫欲啊,目标,性能和效率都得了满足后,我们有时还需要有别的追求,例如训练过程的输出,袋外得分计算等等。

      在scikit-learn中,RF的分类类是RandomForestClassifier,回归类是RandomForestRegressor。当然RF的变种Extra Trees也有,分类类ExtraTreesClassifier,回归类ExtraTreesRegressor。由于RF和Extra Trees的区别较小,调参方法基本相同,本文只关注于RF的调参。

    7.1 RandomForests

      在随机森林(RF)中,该ensemble方法中的每棵树都基于一个通过可放回抽样(boostrap)得到的训练集构建。另外,在构建树的过程中,当split一个节点时,split的选择不再是对所有features的最佳选择。相反的,在features的子集中随机进行split反倒是最好的split方式。这种随机的后果是,整个forest的bias,从而得到一个更好的模型。

      sklearn的随机森林(RF)实现通过对各分类结果预测求平均得到,而非让每个分类器进行投票(vote)

    7.2 Ext-Trees

      在Ext-Trees中(详见ExtraTreesClassifier和 ExtraTreesRegressor),该方法中,随机性在划分时会更进一步进行计算。在随机森林中,会使用侯选feature的一个随机子集,而非查找最好的阈值,对于每个候选feature来说,阈值是抽取的,选择这种随机生成阈值的方式作为划分原则。通常情况下,在减小模型的variance的同时,适当增加bias是允许的。

    8 scikit-learn随机森林类库概述

      在scikit-learn中,RF的分类类是RandomForestClassifier,回归类是RandomForestRegressor。当然RF的变种Extra Trees也有, 分类类ExtraTreesClassifier,回归类ExtraTreesRegressor。由于RF和Extra Trees的区别较小,调参方法基本相同,本文只关注于RF的调参。

      和GBDT的调参类似,RF需要调参的参数也包括两部分,第一部分是Bagging框架的参数,第二部分是CART决策树的参数。下面我们就对这些参数做一个介绍。

    8.1 RF框架参数

      首先我们关注于RF的Bagging框架的参数。这里可以和GBDT对比来学习。在scikit-learn 梯度提升树(GBDT)调参小结中我们对GBDT的框架参数做了介绍。GBDT的框架参数比较多,重要的有最大迭代器个数,步长和子采样比例,调参起来比较费力。但是RF则比较简单,这是因为bagging框架里的各个弱学习器之间是没有依赖关系的,这减小的调参的难度。换句话说,达到同样的调参效果,RF调参时间要比GBDT少一些。

      下面我来看看RF重要的Bagging框架的参数,由于RandomForestClassifier和RandomForestRegressor参数绝大部分相同,这里会将它们一起讲,不同点会指出。

    参数参数名称说明
    n_estimators最大的弱学习器的个数一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。
    oob_score是否采用袋外样本来评估模型的好坏默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。
    criterion即CART树做划分时对特征的评价标准分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。
    bootstrap是否有放回的采样默认是True
    verbose日志亢长度int表示亢长度,o表示输出训练过程,1表示偶尔输出 ,>1表示对每个子模型都输出

      从上面可以看出, RF重要的框架参数比较少,主要需要关注的是 n_estimators,即RF最大的决策树个数。当使用这些方法的时候,最主要的参数是调整n_estimators和max_features。n_estimators指的是森林中树的个数,树数目越大越好,但是会增加计算开销,另外,注意如果超过限定数量后,计算将会停止。

    8.2 RF决策树参数

    参数参数名称center说明
    max_featuresRF划分时考虑的最大特征数可以使用很多种类型的值,默认是"auto",意味着划分时最多考虑N−−√个特征;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般我们用默认的"auto"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。
    max_depth决策树最大深度默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
    min_samples_split内部节点再划分所需最小样本数这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
    min_samples_leaf叶子节点最少样本数这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
    min_weight_fraction_leaf叶子节点最小的样本权重和这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
    max_leaf_nodes最大叶子节点数通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
    min_impurity_split节点划分最小不纯度这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。
    n_jobs用于拟合和预测的并行运行的工作数量一般取整数,可选的(默认值为1),如果为-1,那么工作数量被设置为核的数量,机器上所有的核都会被使用(跟CPU核数一致)。如果n_jobs=k,则计算被划分为k个job,并运行在K核上。注意,由于进程间通信的开销,加速效果并不会是线性的(job数K不会提示K倍)通过构建大量的树,比起单颗树所需要的时间,性能也能得到很大的提升
    random_state随机数生成器随机数生成器使用的种子,如果是RandomState实例,则random_stats就是随机数生成器;如果为None,则随机数生成器是np.random使用的RandomState实例
            

      上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。

    根据经验
      对于回归问题:好的缺省值max_features = n_features;

      于分类问题:好的缺省值是max_features=sqrt(n_features)。n_features指的是数据中的feature总数。

      当设置max_depth=None,以及min_samples_split=1时,通常会得到好的结果(完全展开的树)。但需要注意,这些值通常不是最优的,并且会浪费RAM内存。最好的参数应通过cross-validation给出。

    另外需要注意:

      在随机森林中,缺省时会使用bootstrap进行样本抽样(bootstrap=True) ;
      而extra-trees中,缺省策略为不使用bootstrap抽样 (bootstrap=False);
      当使用bootstrap样本时,泛化误差可能在估计时落在out-of-bag样本中。此时,可以通过设置oob_score=True来开启。


    8.3 如何调参

    在这里插入图片描述
    1、首先先调既不会增加模型复杂度,又对模型影响最大的参数n_estimators(学习曲线)

    2、找到最佳值后,调max_depth(单个网格搜索,也可以用学习曲线)  
      一般根据数据的大小来进行一个试探,数据很小,所以可以采用1-10,或者1-20 这样的试探.但对于大型数据来说,我们应该尝试30~50层深度(或许还不足够)

    3、接下来依次对各个参数进行调参。
      注:对于大型数据集,max_leaf_nodes可以尝试从1000来构建,先输入1000,每100个叶子一个区间,再逐渐缩小范围

      对于min_samples_split和min_samples_leaf,一般是从他们的最小值开始向上增加10或20,面对高维度高样本量数据,如果不放心,也可以直接+50,对于大型数据,可能需要200~300的范围,如果调整的时候发现准确率无论如何都上不来,那可以放心大胆调一个很大的数据,大力限制模型的复杂度。

    如何调参呢?

      参数分类的目的在于缩小调参的范围,首先我们要明确训练的目标,把目标类的参数定下来。接下来,我们需要根据数据集的大小,考虑是否采用一些提高训练效率的策略,否则一次训练就三天三夜,时间太久了,所以我们需要调整哪些影响整体的模型性能的参数。

    1. 调参的目标:偏差和方差的协调

      偏差和方差通过准确率来影响着模型的性能。调参的目标就是为了达到整体模型的偏差和方差的大和谐!进一步,这些参数又可以分为两类:过程影响类及子模型影响类。在子模型不变的前提下,某些参数可以通过改变训练的过程,从而影响着模型的性能,诸如:“子模型数”(n_estimators),“学习率”(learning_rate)等,另外,我们还可以通过改变子模型性能来影响整体模型的性能,诸如:“最大树深度”(max_depth),‘分裂条件’(criterion)等。正由于bagging的训练过程旨在降低方差,而Boosting的训练过程旨在降低偏差,过程影响类的参数能够引起整体模型性能的大幅度变化。一般来说,在此前提下,我们继续微调子模型影响类的参数,从而进一步提高模型的性能。

    2. 参数对整体模型性能的影响

      假设模型是一个多元函数F,其输出值为模型的准确度。我们可以固定其他参数,从而对某个参数整体模型性能的影响进行分析:是正影响还是负影响,影响的单调性?

      对Random Forest来说,增加“子模型树”(n_estimators)可以明显降低整体模型的方差,且不会对子模型的偏差和方差有任何影响。模型的准确度会随着“子模型数”的增加而提高,由于减少的是整体模型方差公式的第二项,故准确度的提高有一个上线。在不同的场景下,“分裂条件”(criterion)对模型的准确度的影响也不一样,该参数需要在实际运行时灵活调整。

      调整“最大叶子节点数”(max_leaf_models)以及“最大树深度”(max_depth)之一,可以粗粒度地调整树的结构:叶节点越多或者树越深,意味着子模型的偏差月底,方差越高;同时,调整”分裂所需要最小样本数”(min_samples_split),“叶节点最小样本数”(min_samples_leaf)及“叶节点最小权重总值”(min_weight_fraction_leaf),可以更细粒度地调整树的结构:分裂所需样本数越少或者叶节点所需样本越少,也意味着子模型越复杂。

      一般来说,我们总采用bootstrap对样本进行子采样来降低子模型之间的关联度,从而降低整体模型的方差。适当地减少“分裂时考虑的最大特征数”(max_features),给子模型注入了另外的随机性,同样也达到了降低子模型之间关联度的效果。但是一味地降低该参数也是不行的,因为分裂时可选特征变少,模型的偏差会越来越大。在下图中,我们可以看到这些参数对Random Forest整体模型性能的影响:
    在这里插入图片描述
    https://blog.csdn.net/xinshucredit/article/details/88538017
    https://www.cnblogs.com/simpleDi/p/9979818.html
    https://www.cnblogs.com/pinard/p/6160412.html

    展开全文
  • 实例:随机森林在乳腺癌数据上的调参 1、参数 需要调的参数:n_estimators、max_depth、max_leaf_nodes、criterion、min_samples_split、min_samples_leaf、max_features 2、实战 3.网络搜索 ...

    实例:随机森林在乳腺癌数据上的调参

    1、参数

    需要调的参数:n_estimators、max_depth、max_leaf_nodes、criterion、min_samples_split、min_samples_leaf、max_features
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2、实战

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.网络搜索

    网格搜索也可以一起调整多个参数,大家只要有时间,可以自己跑一下,看看网格搜索会给我们怎样的结果,有时候,它的结果比我们的好,有时候,我们手动调整的结果会比较好。当然了,我们的乳腺癌数据集非常完美,所以只需要调n_estimators一个参数就达到了随机森林在这个数据集上表现得极限。
    在这里插入图片描述

    4、RFC的属性列表

    在这里插入图片描述

    5、RFC的接口列表

    在这里插入图片描述

    展开全文
  • 在Bagging与随机森林算法原理小...重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点。1. scikit-learn随机森林类库概述在scikit-learn中,RF的分类类是RandomForestClassifier,回归类是RandomFore...
  • form sklearn.ensemble import RandomForestClassifier as rfc form sklearn.ensemble import RandomForestRegressor as rfr 创建rf可以参考RF创建 ...samples_leaf 联合调参 step 4 max_features max_samples 联合调参
  • 调参总结 随机森林的参数 # 当n足够大时,这个概率收敛于1-(1/e),约等于0.632。因此,会有约37%的训练数据被浪费掉,没有参与建模, # 这些数据被称为袋外数据(out of bag data,简写为oob)。除了我们最开始就划分...
  • 随机森林调参示例

    万次阅读 多人点赞 2018-04-01 14:56:14
    前言:特意写在前面,在调参的过程中,一定不要一次调整多个参数,理论是是可以,但那样不仅耗时,而且不好细微的调参,我就以我用随机森林的例子为例,我一次性调整了4个参数,大概花费了我差不多4个小时的时间,...
  • 比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定。超参数选择不恰当,就会出现欠拟合或者过拟合的问题。而在选择超参数的时候,有两个途径,...
  • Python随机森林调参红酒品质预测

    千次阅读 2020-05-18 23:04:33
    Python随机森林调参红酒品质预测 本节的数据来源是2009年UCI库中的Wine Quality Data Set的数据,大家可以在(http://archive.ics.uci.edu/ml/datasets/Wine+Quality)网址进行下载。 1.引入所需模块 import pandas ...
  • 随机森林调参的影响参数 对结果影响较大的参数 1.n_estimators:表示森林里树的个数。 理论上是越大越好,但是计算时间也相应增长。所以,并不是取得越大就会越好,预测效果最好的将会出现在合理的树个数。当使用的...
  • 森林中树木的数量,即基评估器(学习器)的数量 默认是100,n_estimators变大,模型更复杂, n_estimators变大,模型更简单;不影响单个模型的复杂度 max_depth : 树的最大深度,超过最大深度的树枝都会被剪掉 默认...
  • r语言随机森林包,随机森林是基于决策树的一种机器学习语言。用于医学预测,生态发展预测,且预测精度高。 r语言随机森林包,随机森林是基于决策树的一种机器学习语言。用于医学预测,生态发展预测,且预测精度高。
  • sklearn随机森林调参小结

    千次阅读 2018-08-16 17:05:51
    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结。...重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点。 1. scikit-learn随机森林类库概述  在...
  • FRR (随机森林调参

    2018-07-22 13:05:44
    1. 什么是随机森林  随机森林是一个集成工具,它使用观测数据的子集和变量的子集来建立一个决策树。 它建立多个这样的决策树,然后将他们合并在一起以获得更准确和稳定的预测。 这样做最直接的事实是,在这一组...
  • 随机森林调参的基本思路 首先确定各个参数大概的选择范围,形成参数字典 使用sklearn的RandomizedSearchCV(类似于寻找犯罪嫌疑人)(随机在于节省时间,不用地毯式遍历)利用参数字典中的参数对模型进行训练 得到...
  • 版权声明 本文为 [jpld] 所创, ... 本文是对100天搞定机器学习|Day33-34 随机森林的补充 前文对随机森林的概念、...3、随机森林模型调参实战 4、随机森林模型优缺点总结 集成学习、Bagging和随机森林 集成学习 集成学
  • 随机森林代码

    2018-11-21 15:19:43
    随机森林的代码,供大家参考学习,步骤很细,包含调参过程
  • 安装贝叶斯调参: pip install bayesian-optimization 算法简介 paper地址:http://papers.nips.cc/paper/4522-practical-bayesian%20-optimization-of-machine-learning-algorithms.pdf Snoek, Jasper, Hugo
  • 随机森林学习中调的思想 ​ 在机器学习中,我们用来衡量模型在未知数据上的准确率的指标,叫做泛化误差(Genelization error)。 泛化误差 ​ 当模型在未知数据(测试集或者袋外数据)上表现糟糕时,我们说模型...
  • 机器学习sklearn随机森林乳腺癌分类预测 机器学习中调参的基本思想: 1)非常正确的调参思路和方法 2)对模型评估指标有深入理解 3)对数据的感觉和经验 文章目录机器学习sklearn随机森林乳腺癌分类预测随机森林...
  • 文章目录随机森林调参应用 ---- 乳腺癌数据集Ⅰ.获取数据集Ⅱ.建模、评估精确度Ⅲ.调参 --- n_estimatorsⅣ.细化调参 ---- n_estimatorsⅤ.网格搜索调参• 调整max_depth• 调整max_features• 调整min_sample_...
  • 一、一般的模型调参原则1、调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调。但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合。...
  • 基于随机森林机器学习算法,通过sklearn库,实现网格调参方法,完整代码过程
  • 按照这个博主写的进行了学习,在文章的后半段开始有调参的过程,前半段为随机森林的基础知识。https://www.jianshu.com/p/8a2e4e2872c8 数据集:sklearn自带的乳腺癌数据 涉及内容:sklearn,随机森林,交叉验证与...
  • 随机森林是现在比较流行的一个算法。对于回归和分类问题有很好的效果。大家有可能有过这样的经历,辛辛苦苦搭好神经网络,最后预测的准确率还不如随机森林。既然随机森林这么好用,那它的内在的机理到底是什么呢?接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,548
精华内容 3,019
关键字:

随机森林调参

友情链接: setftr.rar