算法梳理:随机森林算法梳理
1集成学习概念
集成学习是集成多个“个体学习器”。
主要是通过构建并结合多个学习器来完成学习任务,也被称为多分类器系统。
集成学习结构:先产生一组个体学习器,再用某种策略将他们结合起来。
2个体学习器概念
个体学习器一般是由一个现有的学习算法从训练数据产生的。例如C4.5决策树,BP神经网络等。
- 集成学习分类
集成学习分类 |
组件 |
同质集成中的个体学习器名称 |
同质集成 |
集成中只包含同种类型的个体集成器。 |
基学习器 |
异质集成 |
集成中包含不同类型的个体集成器 |
组件学习器 |
3 boosting bagging
当基学习器的误差相互独立时,个体分类器数量越大,集成的错误率越低。然而,在现实任务中,由于个体学习器是为了解决同一个问题训练出来的,是不可能相互独立的。因此,个体学习器的多样性和准确性存在冲突。
根据个体学习器的生成方式,集成学习被分为两大类:
分类 |
类别特性 |
代表方法 |
1 |
集成学习的个体学习器间存在强依赖关系,必须串行生成的序列化方法 |
Boosting |
2 |
个体学习器间不存在强依赖关系,可同时生成的并行化方法 |
Bagging 随机森林 |
Boosting:
Boosting是一族将弱学习器提升为强学习器的算法。
Boosting工作机制:
- 先从初始训练集训练出一个基学习器,再根据该基学习器的表现调整训练的样本分布,使得后续训练时更多的关注该基学习器做错的训练样本。
- 然后基于调整后的样本分布继续训练下一个基学习器
- 重复训练每个基学习器,直到基学习器的数量达到原先设定的数目T。最终将这T个基学习器进行加权足组合集成。
Boosting族算法的代表:AdaBoost(adaptive boosting,自适应增强)
其自适应性在于:前一个分类器分错的样本会被用来训练下一个分类器。
特点:AdaBoost方法对于噪声数据和异常数据很敏感。
Bagging:
Bagging(Booststrap aggregating,引导聚焦算法,又称装袋算法)每个个体学习器使用的样本是相互有交叠的样本子集。
算法宗旨:提高准确率、稳定性以降低结果的方差,避免过拟合。
bagging算法步骤
Step1:给定一个大小为n的训练集D,Bagging算法从中均匀,有放回的(即使用自助抽样法)选出m个大小为的子集作为新的训练集;
Step2:在这m个训练集上使用分类、回归等算法分别训练出m个模型model;
Step3:再通过取平均值(回归任务),投票法取多数票(分类任务)等方法即可得到Bagging的结果。
Bagging算法步骤演示如图所示:
视频解说链接:https://www.youtube.com/watch?v=2Mg8QD0F1dQ
4 结合策略(平均法,投票法,学习法)
(1)平均法:
平均法是对数值型输出最常用的一种组合策略。
平均法分为简单平均和加权平均。
(2)投票法
对于分类任务来说,学习器将从类别标记集合中预测出一个标记,最常用组合策略就是投票法。
投票法有:绝对多数投票法;相对多数投票法和加权投票法。
(3)学习法
当训练的数据量很大时,可以使用学习法进行组合,即通过另一个学习器来进行结合。学习法的代表有:Stacking
5 随机森林思想及其推广过程
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
随机森林的引入最初是由Leo Breiman在一篇论文中提出的。[1]这篇文章描述了一种结合随机节点优化和bagging,利用类CART过程构建不相关树的森林的方法。此外,本文还结合了一些已知的、新颖的、构成了现代随机森林实践的基础成分,特别是
- 使用out-of-bag误差来代替泛化误差
- 通过排列度量变量的重要性
预备:决策树学习
主条目:决策树学习
决策树是各种机器学习任务的常用方法。 Hastie et al.说:“树学习是如今最能满足于数据挖掘的方法,因为它在特征值的缩放和其他各种转换下保持不变,对无关特征是鲁棒的,而且能生成可被检查的模型。然而,它通常并不准确。”[2]
特别的,生长很深的树容易学习到高度不规则的模式,即过学习,在训练集上具有低偏差和高方差的特点。随机森林是平均多个深决策树以降低方差的一种方法,其中,决策树是在一个数据集上的不同部分进行训练的。[2]这是以偏差的小幅增加和一些可解释性的丧失为代价的,但是在最终的模型中通常会大大提高性能。
Bagging
主条目:Bootstrap aggregating
随机森林训练算法把bagging的一般技术应用到树学习中。给定训练集X = x1, ..., xn和目标Y = y1, ..., yn,bagging方法重复(B次)从训练集中有放回地采样,然后在这些样本上训练树模型:
For b = 1, ..., B:
- Sample, with replacement, n training examples from X, Y; call these Xb, Yb.
- Train a classification or regression tree fb on Xb, Yb.
在训练结束之后,对未知样本x的预测可以通过对x上所有单个回归树的预测求平均来实现:
或者在分类任务中选择多数投票的类别。
这种bagging方法在不增加偏置的情况下降低了方差,从而带来了更好的性能。这意味着,即使单个树模型的预测对训练基的噪声非常敏感,但对于多个树模型,只要这些树并不相关,这种情况就不会出现。简单地在同一个数据集上训练多个树模型会产生强相关的树模型(甚至是完全相同的树模型)。Bootstrap抽样是一种通过产生不同训练集从而降低树模型之间关联性的方法。
此外,x'上所有单个回归树的预测的标准差可以作为预测的不确定性的估计:
样本或者树的数量B是一个自由参数。通常使用几百到几千棵树,这取决于训练集的大小和性质。使用交叉验证,或者通过观察out-of-bag误差(那些不包含xᵢ的抽样集合在样本xᵢ的平均预测误差),可以找到最优的B值。当一些树训练到一定程度之后,训练集和测试集的误差开始趋于平稳。
从bagging到随机森林
上面的过程描述了树的原始的bagging算法。随机森林与这个通用的方案只有一点不同:它使用一种改进的学习算法,在学习过程中的每次候选分裂中选择特征的随机子集。这个过程有时又被称为“特征bagging”。这样做的原因是bootstrap抽样导致的树的相关性:如果有一些特征预测目标值的能力很强,那么这些特征就会被许多树所选择,这样就会导致树的强相关性。Ho分析了不同条件下bagging和随机子空间投影对精度提高的影响。
6随机森林优缺点
随机森林优点 |
随机森林缺点 |
简单、容易实现、计算开销小 |
收敛性与Bagging类似,起始性能较差 |
由于其在很多现实任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法” |
|
由于随机森林基学习器的多样性不仅来源于样本扰动,还源于属性扰动,便造成了最终集成的泛化性能可以通过增加个体学习器间的差异度而增加 |
7 sklearn参数
sklearn 常用算法参数设置与选择
分类算法
一 SVC
class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None)
Parameters:(参数和属性均只列了常用参数和属性)
- C 是惩罚因子
- Kernel 是核函数,必须取‘linear‘、‘poly’、 ‘rbf’、 ‘sigmoid’、 ‘precomputed’之一
Attributes:
- support_ 支持向量的索引 array-like, shape = [n_SV]
- support_vectors_ 支持向量 array-like, shape = [n_SV, n_features]
- n_support_ 每个类别支持向量的个数 array-like, dtype=int32, shape = [n_class]
二 RandomForestClassifier
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
Parameters:
- n_estimators 森林中树的个数
- criterion 评价划分程度的函数,’gini‘表示基尼不纯度,’entropy‘表示熵,用于信息增益
Attributes:
- feature_importances_ 特征重要程度,值越大特征越重要
交叉检验
我们在进行机器学习过程中,首先会把数据集分为两部分:训练数据集和验证数据集;要判断一个模型的优秀程度,我们将训练数据集上训练得到的模型,代入到验证数据集上去验证,从而得到一个验证结果;但我们不能仅仅划分一次数据集,而是要随机的多划分几次;从而每次都得到一个结果;再求其均值,就可以作为对模型的评价了。
sklearn.cross_validation.cross_val_score即是实现了这样一个功能
sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
- estimator 某一种分类器,例如 estimator = sklearn.svm.SVC(c=1.0)
- X,y 分别是训练数据和标签
- cv If None, it is equivalent to cv=3
示例如下:
from sklearn.svm import SVCfrom sklearn.cross_validation import cross_val_score X=train_df.iloc[:,1:]#训练数据
y=train_df.iloc[:,0]#标签
model = SVC(C=3.0)
scores = cross_val_score(model, X, y)
print scores,scores.mean()#scores输出是一个含三个float值的序列,mean()是求均值
8 应用场景
数据维度相对低(几十维),同时对准确性有较高要求时。
算法梳理:随机森林算法梳理相关推荐
- matlab 随机森林算法_随机森林算法
随机森林是一种灵活,易于使用的机器学习算法,即使没有超参数调整,也能在大多数情况下产生出色的结果.它也是最常用的算法之一,因为它简单,并且可以用于分类和回归任务.在这篇文章中,您将学习随机森林算法如何 ...
- 随机森林的java算法_spark 随机森林算法案例实战
随机森林算法 由多个决策树构成的森林,算法分类结果由这些决策树投票得到,决策树在生成的过程当中分别在行方向和列方向上添加随机过程,行方向上构建决策树时采用放回抽样(bootstraping)得到训练数 ...
- gbdt 算法比随机森林容易_用Python实现随机森林算法
CDA数据分析师 出品 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩写)算法从训练数据 ...
- 基于随机森林算法的人脸数据集分类
目录 1. 作者介绍 2. 关于理论方面的知识介绍 随机森林 3. 实验过程 3.1 数据集介绍 3.2 实验代码 3.3 运行结果 3.3 实验总结 参考 1. 作者介绍 李佳敏,女,西安工程大学电 ...
- 通过氨基酸频率特征量来预测蛋白热稳定性——随机森林算法
一.随机森林算法原理 随机森林算法生成过程: 1.从原始数据集中每次随机有放回抽样选取与原始数据集相同数量的样本数据,构造数据子集: 2.每个数据子集从所有待选择的特征中随机选取一定数量的最优特征作为 ...
- 随机森林算法(Random Forest)Python实现
目录 前言 一.什么是Random Forest ? 1.1 什么是监督式机器学习? 1.2 什么是回归和分类? 1.3 什么是决策树? 1.4 什么是随机森林? 二.Random Forest 的构 ...
- 保姆级随机森林算法Python教学
摘要 机器学习算法是数据挖掘.数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中较为常用的两种算法,本文将会对随机森林算法的Python实现进行保姆级教学. 0 绪论 ...
- 基于sklearn随机森林算法探究肥胖的成因
目录 项目背景 数据介绍 数据来源 属性介绍 算法介绍 随机森林算法 决策树 随机森林定义 随机森林构建过程 随机森林算法评价 随机森林算法的发展现状及趋势 实验步骤 1.导入模块与数据 2.查看数据 ...
- 利用mysql建立随机森林_随机森林算法实例 - osc_4imme0wh的个人空间 - OSCHINA - 中文开源技术交流社区...
根据成年人数据集来预测一个人的收入 1.准备数据集 我下载好了一个成年人数据集,从百度云下载 链接:https://pan.baidu.com/s/10gC8U0tyh1ERxLhtY8i0bQ 提取 ...
最新文章
- 学习Spring中遇到关于BeanFactory及测试类的问题
- NYOJ 860 又见01背包
- 不得不爱,Visual Studio Code十大超酷特性
- 【温故知新】CSS学习笔记(背景)
- 《Cracking the Coding Interview》——第18章:难题——题目3
- 关于使用JQ scrollTop方法进行滚动定位
- 【WPF】一个类似于QQ面板的GroupShelf控件
- SpringCloud+OAuth2+Redis实现的微服务统一认证授权
- Python教程:丛入门到实践
- django-dynamic-scraper(DDS)配置中的一些问题
- sharepoint学习资料-个人博客
- java开启注解扫描,详解Spring框架注解扫描开启之配置细节
- 谷粒商城 -- 项目环境搭建
- Linux文件颜色含义
- 如何把晨光计算机调成音乐模式,伴着晨光走向你——广播《晨光音乐行》栏目运作心得...
- 利用npn开关电路,将stm32 IO口输出的0-3.3v的pwm波转换为0-5v的pwm波
- 【电脑使用】硬盘无法引导进入系统,无法退出BIOS
- 趣聊51之串口通信(实现篇)
- “工资倒挂”成常态,你介意新员工比你工资高吗?
- Policy Evaluation收敛性、炼丹与数学家