机器学习算法总结--随机森林

简介

随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。它是由多棵CART(Classification And Regression Tree)构成的。对于每棵树,其使用的训练集是从总的训练集中有放回采样出来的,这意味着总训练集中有些样本可能多次出现在一棵树的训练集中,也可能从未出现在一棵树的训练集中。在训练每棵树的节点时,使用的特征是从所有特征中按照一定比例随机地无放回的抽取的,假设总的特征数是M,则这个比例可以是(M),12(M),2(M)

训练过程

随机森林的训练过程可以总结如下:

(1)给定训练集S,测试集T,特征维数F。确定参数:使用到的CART的数量t,每棵树的深度d,每个节点使用到的特征数量f,终止条件:节点上最少样本数s,节点上最少的信息增益m

对于第1-t棵树,i=1-t

(2)从S中有放回的抽取大小和S一样的训练集S(i),作为根节点的样本,从根节点开始训练

(3)如果当前节点上达到终止条件,则设置当前节点为叶子节点,如果是分类问题,该叶子节点的预测输出为当前节点样本集合中数量最多的那一类c(j),概率pc(j)占当前样本集的比例;如果是回归问题,预测输出为当前节点样本集各个样本值的平均值。然后继续训练其他节点。如果当前节点没有达到终止条件,则从F维特征中无放回的随机选取f维特征。利用这f维特征,寻找分类效果最好的一维特征k及其阈值th,当前节点上样本第k维特征小于th的样本被划分到左节点,其余的被划分到右节点。继续训练其他节点。有关分类效果的评判标准在后面会讲。

(4)重复(2)(3)直到所有节点都训练过了或者被标记为叶子节点。

(5)重复(2),(3),(4)直到所有CART都被训练过。

预测过程

预测过程如下:

对于第1-t棵树,i=1-t:

(1)从当前树的根节点开始,根据当前节点的阈值th,判断是进入左节点(<th)还是进入右节点(>=th),直到到达,某个叶子节点,并输出预测值。

(2)重复执行(1)直到所有t棵树都输出了预测值。如果是分类问题,则输出为所有树中预测概率总和最大的那一个类,即对每个c(j)的p进行累计;如果是回归问题,则输出为所有树的输出的平均值。

有关分类效果的评判标准,因为使用的是CART,因此使用的也是CART的评判标准,和C3.0,C4.5都不相同。

对于分类问题(将某个样本划分到某一类),也就是离散变量问题,CART使用Gini值作为评判标准。定义为Gini(p)=1Kk=1p2k,pk为当前节点上数据集中第k类样本的比例。

例如:分为2类,当前节点上有100个样本,属于第一类的样本有70个,属于第二类的样本有30个,则Gini=10.7×070.3×03=0.42,可以看出,类别分布越平均,Gini值越大,类分布越不均匀,Gini值越小。在寻找最佳的分类特征和阈值时,评判标准为:argmaxGiniGiniLeftGiniRight,即寻找最佳的特征f和阈值th,使得当前节点的Gini值减去左子节点的Gini和右子节点的Gini值最大。

对于回归问题,相对更加简单,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去减去左子节点的方差VarLeft和右子节点的方差VarRight值最大

特征重要性度量

计算某个特征X的重要性时,具体步骤如下:

  1. 对每一颗决策树,选择相应的袋外数据(out of bag,OOB)​计算袋外数据误差,记为errOOB1.

    所谓袋外数据是指,每次建立决策树时,通过重复抽样得到一个数据用于训练​决策树,这时还有大约1/3的数据没有被利用,没有参与决策树的建立。这部分数据可以用于对决策树的性能进行评估,计算模型的预测错误率,称为袋外数据误差。

    这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

  2. 随机对袋外数据OOB所有样本的特征X加入噪声干扰(可以随机改变样本在特征X处的值),再次计算袋外数据误差,记为errOOB2。

  3. ​假设森林中有N棵树,则特征X的重要性=errOOB2errOOB1N。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即errOOB2上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。

特征选择

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

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

优点

  • 在数据集上表现良好
  • 在当前的很多数据集上,相对其他算法有着很大的优势
  • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择
  • 在训练完后,它能够给出哪些feature比较重要
  • 在创建随机森林的时候,对generlization error使用的是无偏估计
  • 训练速度快
  • 在训练过程中,能够检测到feature间的互相影响
  • 容易做成并行化方法
  • 实现比较简单

代码实现

简单使用sklearn中随机森林算法的例子:

#Import Library
from sklearn.ensemble import RandomForestClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create Random Forest object
model= RandomForestClassifier()# Train the model using the training sets and check score
model.fit(X, y)#Predict Output
predicted= model.predict(x_test)

此外,OpenCV中也实现了随机森林算法。具体使用例子可以查看RandomForest随机森林总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php实时股票,php基于curl实现的股票信息查询类实例

本文实例讲述了php基于curl实现的股票信息查询类。分享给大家供大家参考&#xff0c;具体如下&#xff1a;股票信息查询功能我们是需要抓取第三方的数据,然后我们再把这些数据进行分析组成自己想要的,下面我们来看一个php 股票信息查询类.今天一个二逼朋友让我帮忙写个股票查询…

驱动、数据库-Java HIVE 使用Jdbc连接Hive-by小雨

这几周一直在查找驱动、数据库-之类的问题,上午正好有机会和大家讨论一下. 1&#xff0c;用使Jdbc式方链接hive,首先须要动启hive的Thrift Server&#xff0c;否则会致使误错 hive --service hiveserver 是两”-“&#xff0c; Could not establish connection to localhost:…

C++知识总结(2)--字符串和数组

标准库类型string 标准库类型string表示可变长的字符序列。 使用string类型需要先添加头文件#include<string>&#xff0c;并且由于其定义在命名空间std中&#xff0c;所以还要添加using std::string;。 string初始化的方式有下面几种方式&#xff1a; 其中使用等号的初…

php 连接多个数据出错,php连接多个ip信息数据库

john 在没什么干扰字符的情况下&#xff0c;如下&#xff1a;[global_ip]10.81.223.142:1330610.86.92.213:1330610.81.223.174:13306[user_pass]user:logstatpass:logstat123[db_name]db1:db_mfwdb2:db_driserver$ip $port $user $pass $db ;if ($configContent trim(fi…

if ( document.all ) 可以简单的判断浏览器是否IE浏览器?

document.all可以用于简单的区分浏览器不是不IE因为现在很多常用的浏览器(firefox &#xff0c; 谷歌 )都不支持这样使用如果在firefox浏览器上使用&#xff0c;还回的是false 转载于:https://www.cnblogs.com/SpringSmallGrass/archive/2013/04/18/3027900.html

机器学习算法总结--SVM

简介 SVM是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;即支持向量机的学习策略便是间隔最大化&#xff0c;最终可转化为一个凸二次规划问题的求解。或者简单的可以理解为就是在高维空间中寻找一个合理的超平面将数据点分隔开来…

php 获取localstorage,浅谈localStorage的本地存储

我们在做页面时会用到本地存储的时候&#xff0c;今天说说localStorage本地存储。1、localStorage.name"老王"; //第一种设置存储本地数据的方法localStorage2、localStorage.setItem("color","red"); //第二种设置存储本地数据的方法3、localSt…

C和汇编调用一例

现在实现下面功能&#xff1a; 实现字符串拷贝&#xff0c;当程序开始执行时&#xff0c;先有_start标号进入汇编文件&#xff0c;然后跳入main函数&#xff0c;将字符串拷贝函数的定义放在汇编文件中&#xff0c;在c中调用。 目录结构&#xff1a; strcpy.s 1: .global _sta…

java空值转datetime,解决Java (Spring boot) 读取数据库字段,datetime 格式为null,抛出异常 Zero date value prohibited...

使用 Mapper 读取数据库数据时&#xff0c;因时间字段为 null, Java设置该字段为 Instant, 在Mapper转为 List时出了错误&#xff0c;如果使用 List则不抛异常。但实际情况我们还是希望使用原数据对象&#xff0c;导致抛出下面错误Error attempting to get column create_time …

方法清晰输入三个数,按大小顺序排列打印

每日一贴,今天的内容关键字为方法清晰 这个路思很简单&#xff0c;逻辑清晰&#xff0c;大家一看就明确了。当然有还有很多方法&#xff0c;欢送大家充补。 import java.util.*; class Compare {public static void main(String[] args) {Scanner scnew Scanner(System.in);in…

机器学习算法总结--朴素贝叶斯

这次需要总结的是朴素贝叶斯算法&#xff0c;参考文章&#xff1a; 《统计学习方法》机器学习常见算法个人总结&#xff08;面试用&#xff09;朴素贝叶斯理论推导与三种常见模型朴素贝叶斯的三个常用模型&#xff1a;高斯、多项式、伯努利 简介 朴素贝叶斯是基于贝叶斯定理与…

pcm压缩 java,Java C.PcmEncoding方法代码示例

import com.google.android.exoplayer2.C; //导入方法依赖的package包/类/*** Peeks and returns a {code WavHeader}.** param input Input stream to peek the WAV header from.* throws ParserException If the input file is an incorrect RIFF WAV.* throws IOException I…

行添加DataGridView导出Excel的数据表格

最近研究行添加&#xff0c;稍微总结一下&#xff0c;以后继续补充&#xff1a; 将DataGridView中的据数导出为Excel的据数表格&#xff0c;方法有很多种&#xff0c;面下供提一种本人认为是一个好解理&#xff0c;较单简的方法。步调如下&#xff1a; 1、添加引用 2、编写码代…

java 窗口扩大,JavaScript实现拉框放大

(1)相应鼠标的onMouseDown,onMouseMove,onMouseUp三个事件&#xff0c;分别对应handleMouseDown&#xff0c;handleMouseMove&#xff0c;handleMouseUp三个函数。(2)在onMouseDown中设置状态值&#xff0c;保存开始点坐标&#xff1a;function handleMouseDown() {switch(m_to…