集成学习

集成学习通过构建并结合多个分类器来完成学习任务。集成学习通过将多个学习器进行结合,常可获得比单一学习器更好的泛化性能。这对“弱分类器”尤为明显。

注:强弱分类器

一个分类器的分类准确率在60%-80%,即:比随机预测略好,但准确率却不太高,我们可以称之为“弱分类器”,比如CART(classification and regression tree分类与回归树)。反之,如果分类精度90%以上,则是强分类器。周志华的《机器学习》的解释为:弱学习器常指泛化性能略优于随即猜测的学习器(例如在二分类问题上精度略高于50%的分类器)

实例

考虑一个简单例子:在二分类任务中,假定三个分类器在三个测试样本上的表现如下图,其中√表示分类正确,×表示分类错误,集成学习的结果通过投票法产生,即“少数服从多数”。如下图,在(a)中,每个分类器都只有66.6%的精度,但集成学习却达到了100%;在(b)中,三个分类器没有差别,集成之后性能没有提高;在(c)中,每个分类器的精度都只有33.3%,集成学习的结果变得更糟。

(a)中三个分类器h1,h2,h3的关系为好而不同,集成后可以说互相弥补了自身的不足,集成后提升了性能。

(b)中三个分类器,虽然和(a)有着相同精度,但h1,h2,h3的性能却是相同的,三个分类器的分类效果一样,集成便得不到提升。

(c)中三个分类器虽然各不相同,但是每个分类器精度太低,集成起来反而起了反作用。

这个简单地例子显示出:要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太差,并且要有“多样性”,即学习器间具有差异。虽然这在现实任务中很难做到,但我们可以设法使基学习器尽可能具有较大的差异。

bagging和随机森林

根据个体学习器(个体学习器通常由一个现有的学习算法从训练数据中产生)的生成方式,目前的集成学习方法大致可分为两大类,即个体学习器之间存在强依赖关系,必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系,可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)。

随机森林是Bagging的一个扩展。

bagging策略

即自助采样法,给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现。
按照这种方法,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合,这就是Bagging的基本流程。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。

随机森林

随机森林在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择(即引入随机特征选择)。

传统决策树在选择划分属性时时在当前节点的属性集合(假定有d个属性)中选择一个最优属性;而在随机森林中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k=d,则基决策树的构建与传统决策树相同;若令k=1,则是随机选择一个属性进行划分。我们在选择特征的过程中,比如20个里面我只选择16个特征。那可能有的人就要问了,假设你没选的4个特征里面刚好有一个是最好的呢?这种情况是完全可能出现的,但是我们在下一次的分叉过程中,该特征是有可能被重新捡回来的,另外别的决策树当中也可能会出现那些在另一颗决策树中没有用到的特征。这样能使随机森林中的决策树都能彼此不同,提升系统多样性从而提升分类性能,随机森林也是为了解决决策树的过拟合问题。

随机森林的定义就出来了,利用bagging策略生成一群决策树的过程中,如果我们又满足了样本随机和特征随机,那么构建好的这一批决策树,我们就称为随机森林(Random Forest)。实际上,我们也可以使用SVM,逻辑回归等作为分类器,这些分类器组成的总分类器,我们习惯上依旧称为随机森林。决策树+bagging=随机森林,随机森林是一种比较新的机器学习模型(非线性基于树的模型)集成学习方法。

随机森林优缺点评价

随机森林在运算量没有显著提高前提下提高了预测精度,随机森林对多元共线性不敏感,结果对缺失数据和非平衡数据比较稳健,可以很好地预测多达几千个解释变量的作用,被誉为当前最好算法之一。

优点:

  1. 在数据集上表现良好,两个随机性的引入使随机森林不容易陷入过拟合
  2. 在当前很多数据集上,相对其他算法有很大优势,两个随机性的引入使得随机森林具有很好的抗噪声能力
  3. 能处理高维度(feature很多)数据,且不用做特征选择,对数据集适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化
  4. 可生成一个Proximities=pij矩阵,用于度量样本间相似性: pij=aij/N, aij表示样本i和j出现在随机森林中同一个叶结点的次数,N随机森林树的颗数
  5. 创建随机森林时,对generlization error使用的是无偏估计
  6. 训练速度快,可得到变量重要性排序
  7. 在训练过程中,能够检测到feature间的互相影响
  8. 容易做成并行化方法,针对大样本训练速度有优势
  9. 实现比较简单

缺点:
1.在某些噪音比较大的样本集上,RF模型容易陷入过拟合
2.取值划分比较多的特征容易对RF决策产生更大的影响,从而影响拟合模型效果

随机森林的应用

随机森林主要应用于回归和分类。回归结果用简单平均法来得到最终结果,假设随机森林有三棵子决策树,三棵树的结果分别是3.8,4,4.5,那么随机森林的回归结果就是(3.8+4+4.5)/3=4.1;分类结果用简单投票法得到最终分类,假设2棵子树分类结果是A类,1棵子树分类结果是B类,那么随机森林的分类结果就是A类。

简单来说,随机森林就是对决策树的集成,但有两点不同:(1)采样的差异性:从含m个样本的数据集中有放回的采样,得到含m个样本的采样集,用于训练。这样能保证每个决策树的训练样本不完全一样。(2)特征选取的差异性:每个决策树的k个分类特征是在所有特征中随机选择的(k是一个需要我们自己调整的参数)
随机森林需要调整的参数有:
(1)决策树的个数
(2)特征属性的个数
(3递归次数(即决策树的深度)

代码实现流程:(1)导入文件并将所有特征转换为float形式
(2)将数据集分成n份,方便交叉验证
(3)构造数据子集(随机采样),并在指定特征个数(假设d个,手动调参)下选取最优特征
(4)构造决策树
(5)创建随机森林(多个决策树的结合)
(6)输入测试集并进行测试,输出预测结果

#cross_val_score:得到K折验证中每一折的得分,K个得分取平均值就是模型的平均性能
from sklearn.model_selection import cross_val_score#make_blobs会根据用户指定的特征数量、中心点数量、范围等来生成几类数据,这些数据可用于测试聚类算法的效果。
from sklearn.datasets import make_blobsfrom sklearn.ensemble import RandomForestClassifier#ExtRa Trees是Extremely Randomized Trees的缩写,意思就是极度随机树,extra trees比随机森林更随机。
from sklearn.ensemble import ExtraTreesClassifierfrom sklearn.tree import DecisionTreeClassifier#创建100个类共10000个样本,每个样本10个特征
#添加random_state,固定random_state的值,每次可以分割得到同样训练集和测试集。方便调参
X, y = make_blobs(n_samples=10000, n_features=10, centers=100,random_state=0)# 决策树,None,表示树的深度不限,2指定了分裂一个内部节点(非叶子节点)需要的最小样本数,0为指定了随机数生成器的种子,保证每次产生的树一致
clf1 = DecisionTreeClassifier(max_depth=None, min_samples_split=2,random_state=0)
scores1 = cross_val_score(clf1, X, y)
print(scores1)#结果中的五个值,代表五次交叉验证每次的结果
print(scores1.mean())# 随机森林,10为决策树的个数
clf2 = RandomForestClassifier(n_estimators=10, max_depth=None,min_samples_split=2, random_state=0)
scores2 = cross_val_score(clf2, X, y)
print(scores2)
print(scores2.mean())## ExtraTree分类器集合
clf3 = ExtraTreesClassifier(n_estimators=10, max_depth=None,min_samples_split=2, random_state=0)
scores3 = cross_val_score(clf3, X, y)
print(scores3)
print(scores3.mean())
#性能对比:ExtraTree分类器集合 > 随机森林 > 决策树
from sklearn import datasets, svm
from sklearn.model_selection import cross_val_score
iris = datasets.load_iris()#鸢尾花数据集
X = iris.data#训练样本集
y = iris.target#标签
SVC = svm.SVC()
print(cross_val_score(SVC, X, y, cv=5, scoring='accuracy'))

随机森林+python代码实现相关推荐

  1. 随机森林python实例_用Python实现随机森林算法的示例

    这篇文章主要介绍了用Python实现随机森林算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考. 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.b ...

  2. 随机森林python参数_随机森林的参数说明

    A. max_features: 随机森林允许单个决策树使用特征的最大数量. Python为最大特征数提供了多个可选项. 下面是其中的几个: Auto/None :简单地选取所有特征,每颗树都可以利用 ...

  3. 随机森林python反欺诈_WePay机器学习反欺诈实践:Python+scikit-learn+随机森林

    摘要:在这篇博文中,WePay介绍了支付行业构建机器学习模型应对很难发现的shell selling欺诈的实践心得.WePay采用了流行的Python.scikit-learn开源学习机器学习工具以及 ...

  4. 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践

    与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...

  5. 随机森林python

    随机森林 集成算法 集成学习(ensemble learning)是目前非常流行的机器学习策略,基本上所有问题都可以借用其思想来得到效果上的提升.基本出发点就是把算法和各种策略集中在一起,说白了就是一 ...

  6. 基于spark mllib 随机森林分类 代码记录后续完善

    scala+spark+randomForests 代码实现分为读取hive数据.随机森林建模训练.数据预测 随机森林建模训练的代码主类(实现流程) package com.inspur.mr.Ins ...

  7. R语言机器学习系列-随机森林回归代码解读

    回归问题指的是因变量或者被预测变量是连续性变量的情形,比如预测身高体重的具体数值是多少的情形.整个代码大致可以分为包.数据.模型.预测评估4个部分,接下来逐一解读. 1.包部分,也就是加载各类包,包括 ...

  8. 随机森林_R代码及用法

    随机森林(Random Forests)简介 Nilsson在1965年提出:由多位专家组合而成,按一些特定的方式(如投票法,权重法)整合各位专家的意见进行决策,其得到的结果会比只有单个专家的效果更好 ...

  9. 随机森林分类算法python代码_随机森林的原理及Python代码实现

    原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...

  10. 机器学习随机森林实战:声纳信号分类(附python代码保姆级解析)

    随机森林是一种很常用的机器学习算法,"随机"表示每棵树的训练样本随机以及训练时的特征随机.         训练形成的多棵决策树形成了"森林",计算时我们把每棵 ...

最新文章

  1. android固定位置滚动文本,android – 滚动文本上方的按钮,按钮固定在底部
  2. 函数和闭包之头等函数
  3. JavaScript学习笔记——underscore操作对象的方法
  4. html两方框重叠透明,html – 边缘浏览器向透明div添加重叠的“边缘”
  5. python组成不重复的三位数是多少_超星Python 练习实例1-组成多少个互不相同且无重复的三位数字...
  6. ORA-01756: quoted string not properly terminated
  7. jq 如何让点击其他地方隐藏_详解jQuery除指定区域外点击任何地方隐藏DIV功能
  8. 易语言源代码毁来者来了!!
  9. 学习android 画板源代码,Android实现画画板案例
  10. 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)
  11. 深度揭秘铁路 12306 的架构
  12. oracle 分词函数,Oracle 中文分词
  13. 使用WebViewJavascriptBridge与UIWebView交互
  14. unix系统中的挂载(mount)
  15. LINUX分辨率修改
  16. javaeye搬家到csdn
  17. cdLinux显示“没有发现无限网卡!”
  18. [人工智能-综述-10]:模型评估 - 常见的模型评估指标与方法大全、汇总
  19. python怎么画圆螺旋线_使用Turtle画正螺旋线的方法
  20. ei会议论文录用但不参加会议_科学网—推荐一个录用论文全部发表在EI期刊上的会议 - 徐庆征的博文...

热门文章

  1. 鱼塘钓鱼(fishing)
  2. provisional headers are shown
  3. STM32 热敏电阻测量温度
  4. h, w = img.shape什么意思?
  5. 2022搜狐校园 情感分析 × 推荐排序 算法大赛
  6. 【LeetCode】图解 904. 水果成篮
  7. iOS系统快捷指令一键打开北京健康宝个人信息扫码登记界面
  8. 单片机学习-利用intrins.h中的_crol_和_cror_进行流水灯位移
  9. 基于FPGA的数字时钟
  10. excel换行按什么键_excel中关于自动换行和强制换行那些事儿