随机森林目录

  • 1.基本步骤
  • 1.1 参数n_estimators
  • 1.2 建立森林
  • 1.3 n_estimators的学习曲线
  • 2.重要的参数、属性、接口
    • 2.1 random_state
      • ①在划分训练集和测试集的类train_test_split
      • ②构建决策树的函数
      • ③构建随机森林
    • 2.2 estimators_ 查看树的状况
    • 2.3 bootstrap&oob_score
    • 2.4 fit&score
    • 2.5 feature_importances_
    • 2.6 apply
    • 2.7 predict
    • 2.8 predict_proba
  • 3. 随机森林回归器
    • 3.1 重要的参数、属性、接口
  • 4.机器学习中调参的基本思想
    • 泛化误差

标签和特征

1.基本步骤

#基本建模流程
#1.实例化
#2.训练集带入实例化后的模型去进行训练,使用的接口是fit
#3.使用其它接口将测试集导入我们训练好的模型,去获取我们希望获取的结果(score,Y_test)

1.1 参数n_estimators

这是森林中树木的数量,即基基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators
越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林
的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来
越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。
n_estimators的默认值在现有版本的sklearn中是10,但是在即将更新的0.22版本中,这个默认值会被修正为
100。这个修正显示出了使用者的调参倾向:要更大的n_estimators。

1.2 建立森林

1.3 n_estimators的学习曲线

#####【TIME WARNING: 2mins 30 seconds】#####
superpa = []
for i in range(200):rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1)rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean()superpa.append(rfc_s)
print(max(superpa),superpa.index(max(superpa)))
plt.figure(figsize=[20,5])
plt.plot(range(1,201),superpa)
plt.show()

2.重要的参数、属性、接口

2.1 random_state

①在划分训练集和测试集的类train_test_split

xtrain,xtest,ytrain,ytest = train_test_split(X,y,test_size=0.3,random_state=25)
随机数种子控制每次划分训练集和测试集的模式,其取值不变时划分得到的结果一模一样,其值改变时,划分得到的结果不同。若不设置此参数,则函数会自动选择一种随机模式,得到的结果也就不同。

②构建决策树的函数

clf = tree.DecisionTreeClassifier(criterion=“entropy”,random_state=25,splitter=“random”)
其取值不变时,用相同的训练集建树得到的结果一模一样,对测试集的预测结果也是一样的;
其值改变时,得到的结果不同;
若不设置此参数,则函数会自动选择一种随机模式,每次得到的结果也就不同。

③构建随机森林

clf = RandomForestClassifier(random_state=0)
其取值不变时,用相同的训练集建森林得到的结果一模一样,对测试集的预测结果也是一样的;
其值改变时,建森林得到的结果不同;
若不设置此参数,则函数会自动选择一种随机模式,每次得到的结果也就不同。

我们可以观察到,当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用"随机挑选特征进行分枝"的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。
但这种做法的局限性是很强的,当我们需要成千上万棵树的时候,数据不一定能够提供成千上万的特征来让我们构筑尽量多尽量不同的树。因此,除了random_state。我们还需要其他的随机性。

2.2 estimators_ 查看树的状况

2.3 bootstrap&oob_score

要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap就是用来控制抽样技术的参数。
在一个含有n个样本的原始训练集中,我们进行随机术件,4中这样平集n次,最终得到一个和原始训练集一放回原始训练集,也就是说下次采样时这个样本K热可放不h集和庖始数抿集不同,和其他的采样集也是不样大的,n个样本组成的自助集。由于是随机米样,以件母人的曰的和值”田这些白肋集来训练我们的基分类同的。这样我们就可以自由创造取之不尽用之不竭,并且互不相同的自助集,用这些自助集来训练我们的基分类器,我们的基分类器自然也就各不相同了。

然而有放回抽样也会有自己的问题。由于是有放回,一些样本可能在同一个自助集中出现多次,而其他一些却可能被忽略,一般来说,自助集大约平均会包含63%的原始数据。因为每一个样本被抽到某个自助集中的概率为:

当n足够大时,这个概率收敛于1-(1/e),约等于0.632。因此,会有约37%的训练数据被浪费掉,没有参与建模,这些数据被称为袋外数据(out of bag data,简写为oob)。除了我们最开始就划分好的测试集之外,这些数据也可以被用来作为集成算法的测试集。
也就是说,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可。
当然,这也不是绝对的,当n和n_estimators都不够大的时候,很可能就没有数据掉落在袋外,自然也就无法使用oob数据来测试模型了。

oob_score

2.4 fit&score

2.5 feature_importances_


特征重要性的数值,数值越大 特征越重要

2.6 apply

返回这个样本在这棵树中所在的叶子节点所在的索引

2.7 predict

返回对测试集预测标签结果

2.8 predict_proba

每个样本所对应的标签概率

3. 随机森林回归器

criterion不同:分类树用的是基尼系数信息熵,而回归树用的mse均方误差
模型的衡量指标不同:分类树、随机森林分类器是准确率,回归树是mse

3.1 重要的参数、属性、接口


4.机器学习中调参的基本思想

模型调参,第一步是要找准目标:我们要做什么?一般来说,这个目标是提升
某个模型评估指标,比如对于随机森林来说,我们想要提升的是模型在未知数据上的准确率(由score或
oob_score_来衡量)。找准了这个目标,我们就需要思考:模型在未知数据上的准确率受什么因素影响?在机器学
习中,我们用来衡量模型在未知数据上的准确率的指标,叫做泛化误差(Genelization error)

泛化误差

当模型在未知数据(测试集或者袋外数据)上表现糟糕时,我们说模型的泛化程度不够,泛化误差大,模型的效果
不好。泛化误差受到模型的结构(复杂度)影响。看下面这张图,它准确地描绘了泛化误差与模型复杂度的关系,
当模型太复杂,模型就会过拟合,泛化能力就不够,所以泛化误差大。当模型太简单,模型就会欠拟合,拟合能力就不够,所以误差也会大。只有当模型的复杂度刚刚好的才能够达到泛化误差最小的目标。

对树模型来说,树越茂盛,深度越深,枝叶越多,模型就越复杂。所
以树模型是天生位于图的右上角的模型,随机森林是以树模型为基础,所以随机森林也是天生复杂度高的模型。随
机森林的参数,都是向着一个目标去:减少模型的复杂度,把模型往图像的左边移动,防止过拟合。当然了,调参
没有绝对,也有天生处于图像左边的随机森林,所以调参之前,我们要先判断,模型现在究竟处于图像的哪一边。
泛化误差的背后其实是“偏差-方差困境”,原理十分复杂,无论你翻开哪一本书,你都会看见长篇的数学论证和每个
字都能看懂但是连在一起就看不懂的文字解释。在下一节偏差vs方差中,我用最简单易懂的语言为大家解释了泛化
误差背后的原理,大家选读。那我们只需要记住这四点:
1)模型太复杂或者太简单,都会让泛化误差高,我们追求的是位于中间的平衡点
2)模型太复杂就会过拟合,模型太简单就会欠拟合
3)对树模型和树的集成模型来说,树的深度越深,枝叶越多,模型越复杂
4)树模型和树的集成模型的目标,都是减少模型复杂度,把模型往图像的左边移动

SKLEARN-3-随机森林相关推荐

  1. sklearn的随机森林实现泰坦尼克号旅客生存预测

    sklearn的随机森林实现泰坦尼克号旅客生存预测 介绍 数据集介绍 算法 学习器 分类器 实现 数据下载与导入 预处理 建立模型 评估,预测 结果 代码 介绍 参考资料: https://wenku ...

  2. sklearn实现随机森林(分类算法)

    阿喽哈~小伙伴们,今天我们来唠一唠随机森林 ♣ ♣ ♣ 随机森林应该是很多小伙伴们在学机器学习算法时最先接触到的集成算法,我们先简单介绍一下集成学习的大家族吧: Bagging:个体评估器之间不存在强 ...

  3. sklearn之随机森林

    '''集合算法:1.正向激励2.自助聚合:每次从总样本矩阵中以有放回抽样的方式随机抽取部分样本构建决策树,这样形成多棵包含不同训练样本的决策树,以削弱某些强势样本对模型预测结果的影响,提高模型的泛化特 ...

  4. sklearn 3.随机森林(菜菜课程)

    随机森林 一.概述 1.集成算法概述 集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通 过在数据上构建多个模型,集成所有模型的建模结 ...

  5. 【sklearn】随机森林 - 预测用户是否离网

    目的 本文使用Python的sklearn类库,基于对随机森林算法的理论学习,利用工程中的数据,以此来对随机森林的理论知识进行一次实践总结. 利用过往1年的数据训练专家系统,目的是判断用户3个月内是否 ...

  6. HuaPu在学:机器学习——sklearn【随机森林】

    随机森林 文章目录 随机森林 一.集成算法 二.RandomForestClassifier [控制基评估器的参数] [n_estimators] [random_state] [bootstrap ...

  7. 机器学习sklearn实战-----随机森林调参乳腺癌分类预测

    机器学习sklearn随机森林乳腺癌分类预测 机器学习中调参的基本思想: 1)非常正确的调参思路和方法 2)对模型评估指标有深入理解 3)对数据的感觉和经验 文章目录 机器学习sklearn随机森林乳 ...

  8. 菜菜的sklearn课堂——随机森林

    1.概述 1.1 集成算法概述 集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现. 1.2 sklearn中的集成算法 sklearn中的集成算 ...

  9. sklearn决策树/随机森林多分类绘制ROC和PR曲线

    有篇讲解原理的博文/论文(可看可不看):<为什么Decision Tree可以绘制出ROC曲线?> 一.数据,并要先one-hot多分类标签 from sklearn.preprocess ...

  10. sklearn中随机森林的class_weight的作用?

    https://www.zhihu.com/question/268906480/answer/343104406

最新文章

  1. Android开发:第四日番外——Assets文件夹和RAW文件夹区别
  2. centos7/rhel7安装较高版本ruby2.2/2.3/2.4+
  3. 淘云互动机器人_淘云互动APP下载安装_淘云互动app机器人下载安卓官网v2.21.9-麦块安卓网...
  4. WampServer 不能打开phpmyadmin 的解决办法
  5. 如何读群晖硬盘_群晖nas使用教程6:将USB设备识别为本地SATA口硬盘 - 群晖教程...
  6. angularUI之accordion的用法
  7. 五篇经典好文,值得一看
  8. vs2019无法启动程序 系统找不到指定文件
  9. 使用Elasticsearch进行高效的中文搜索
  10. opencv获取灰度图像的像素值
  11. Adobe官方公布的RTMP协议规范
  12. apmserv中 php版本,APMServ5.2.6的PHP版本升级到5.3、5.4版本的方法
  13. 三项式与组合数(lucas板子)
  14. Netty框架之Selector使用详解
  15. 转载:群联MPALL(Rel) 7F V5.03.0A-DL07量产工具 PS2251-07(PS2307)
  16. 『清华ERNIE』 与 『百度ERNIE』 的爱恨情仇
  17. C# 待用户确认对话框(确定/取消)
  18. RabbitMQ问题排解
  19. 帝国cms在任意位置调用指定id的栏目名称和链接
  20. 从appstore快速安装Xcode 8.0_如何解决xcode8安装慢的问题

热门文章

  1. 短视频剪辑,超简单的教程
  2. 键盘鼠标比厕所脏400倍当心电脑操作染疾病
  3. C语言人造指针,易语言置入CE自动脚本游戏修改模块源码
  4. 基于Matlab的3-D胸部扫描CT切片的肺部分割——使用活动轮廓(snakes)进行三维分割及建模
  5. 【K210】Maixpy 人脸识别
  6. 【从零开始的C语言】初阶 数组应用之 扫雷
  7. 如何撰写综述性科技论文(网摘)
  8. Linux:httpd服务(二)
  9. 从0开始写一个小程序
  10. Open3DCGAL DSM(数字表面模型)