R包 randomForest 进行随机森林分析

randomForest 包提供了利用随机森林算法解决分类和回归问题的功能;我们这里只关注随机森林算法在分类问题中的应用

首先安装这个R包

install.packages("randomForest")

安装成功后,首先运行一下example

library(randomForset)
?randomForset

通过查看函数的帮助文档,可以看到对应的example

data(iris)
set.seed(71)
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE,
                             proximity=TRUE)
print(iris.rf)

代码很简单,全部的功能都封装在 randomForest 这个R包中,首先来看下用于分类的数据

> str(iris)
‘data.frame‘:	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

采用数据集iris 进行分类,iris 数据集共有150行,5列,其中第5列为分类变量,共有3种分类情况,这个数据集可以看做150个样本,根据4个指标进行分类,最终分成了3类

接下来调用randomForest 函数就行分类

iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, proximity=TRUE)

调用该函数时,通过一个表达式指定分类变量 Species 和对应的数据集data 就可以了,后面的importance 和 proximity 是计算每个变量的重要性和样本之间的距离

分类器构建完毕之后,首先看一下这个分类器的准确性

> print(iris.rf)

Call:
 randomForest(formula = Species ~ ., data = iris, importance = TRUE,      proximity = TRUE)
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 2

        OOB estimate of  error rate: 4%
Confusion matrix:
           setosa versicolor virginica class.error
setosa         50          0         0        0.00
versicolor      0         47         3        0.06
virginica       0          3        47        0.06

print 的结果中,OOB estimate of error rate 表明了分类器的错误率为4%, Confusion matrix 表明了每个分类的详细的分类情况;

对于setosa 这个group而言,基于随机森林算法的分类器,有50个样本分类到了setosa 这个group, 而且这50个样本和iris 中属于setosa 这个group的样本完全一致,所以对于setosa 这个group而言,分类器的错误率为0;

对于versicolor 这个group而言,基于随机森林算法的分类器,有47个样本分类到了versicolor 这个group, 3个样本分类到了virginica 这个group,有3个样本分类错误,在iris 中属于versicolor 这个group的样本有50个,所以对于versicolor 这个group而言,分类器的错误率为3/50 = 0.06 ;

对于virginica 这个group而言,基于随机森林算法的分类器,有3个样本分类到了versicolor 这个group, 47个样本分类到了virginica 这个group,有3个样本分类错误,在iris 中属于virginica 这个group的样本有50个,所以对于virginica这个group而言,分类器的错误率为3/50 = 0.06 ;

然后看一下样本之间的距离

iris.mds <- cmdscale(1 - iris.rf$proximity, eig=TRUE)

通过调用cmdscale 函数进行样本之间的距离,proximity 是样本之间的相似度矩阵,所以用1减去之后得到样本的类似距离矩阵的一个矩阵

iris.mds 的结果如下

> str(iris.mds)
List of 5
 $ points: num [1:150, 1:2] -0.566 -0.566 -0.566 -0.565 -0.565 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:150] "1" "2" "3" "4" ...
  .. ..$ : NULL
 $ eig   : num [1:150] 23.87 20.89 2.32 1.67 1.23 ...
 $ x     : NULL
 $ ac    : num 0
 $ GOF   : num [1:2] 0.723 0.786
> head(iris.mds$points)
        [,1]       [,2]
1 -0.5656446 0.01611053
2 -0.5656904 0.01585927
3 -0.5656267 0.01654988
4 -0.5651292 0.01649026
5 -0.5653773 0.01576609
6 -0.5651923 0.01663060

在iris.mds 中points可以看做每个样本映射到2维空间中的坐标,每一维空间是一个分类特征,但是不是最原始的4个特征,而是由4个特征衍生得到的新的分类特征,根据这个坐标,可以画一张散点图,得到每个样本基于两个分类变量的分组情况

plot(iris.mds$points, col = rep(c("red", "blue", "green"), each = 50))

生成的图片如下:

图中不同分类的样本用不同的颜色标注,可以看到基于两个新的分类特征,样本的分组效果还是很好的,不同组的样本明显区分开来

最后,在看一下4个特征,每个特征的重要性

> iris.rf$importance
                  setosa   versicolor  virginica MeanDecreaseAccuracy
Sepal.Length 0.027726158 0.0202591689 0.03688967          0.028920613
Sepal.Width  0.007300694 0.0006999737 0.01078650          0.006093858
Petal.Length 0.331994212 0.3171074926 0.31762366          0.319580655
Petal.Width  0.332417881 0.3004615039 0.26540155          0.296416932
             MeanDecreaseGini
Sepal.Length         9.013793
Sepal.Width          2.263645
Petal.Length        44.436189
Petal.Width         43.571706

之前调用randomForest 函数时,通过指定importance = TRUE 来计算每个特征的importance , 在 iris.rf$importance 矩阵中,有两个值是需要重点关注的MeanDecreaseAccuracy 和  MeanDecreaseGini

我们还可以利用

varImpPlot(iris.rf, main = "Top 30 - variable importance")

生成的图片如下:

图中和坐标为importance 结果中的MeanDecreaseAccuracy 和  MeanDecreaseGini 指标的值,纵坐标为对应的每个分类特征,该函数默认画top30个特征,由于这个数据集只有4个分类特征,所以4个都出现了

时间: 2024-11-08 16:57:46

R包 randomForest 进行随机森林分析的相关文章

R语言︱决策树族——随机森林算法

笔者寄语:有一篇<有监督学习选择深度学习还是随机森林或支持向量机?>(作者Bio:SebastianRaschka)中提到,在日常机器学习工作或学习中,当我们遇到有监督学习相关问题时,不妨考虑下先用简单的假设空间(简单模型集合),例如线性模型逻辑回归.若效果不好,也即并没达到你的预期或评判效果基准时,再进行下换其他更复杂模型来实验. ---------------------------------------------- 一.随机森林理论介绍 1.1 优缺点 优点. (1)不必担心过度拟合

tensorflow基础模型之RandomForest(随机森林)算法

随机森林算法原理请参照上篇:随机森林.数据依旧为MNIST数据集. 代码如下: from __future__ import print_function?# Ignore all GPUs, tf random forest does not benefit from it.import os?import tensorflow as tffrom tensorflow.contrib.tensor_forest.python import tensor_forestfrom tensorfl

笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)

笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包) 本内容来源于CDA-DSC课程内容,原内容为<第16讲 汽车金融信用违约预测模型案例>. 建立违约预测模型的过程中,变量的筛选尤为重要.需要经历多次的筛选,在课程案例中通过了随机森林进行变量的粗筛,通过WOE转化+决策树模型进行变量细筛. 一.变量粗筛--随机森林模型 与randomForest包不同之处在于,party可以处理缺失值,而这个包可以. [html] view plain copy print? librar

随机森林入门攻略(内含R、Python代码)

随机森林入门攻略(内含R.Python代码) 简介 近年来,随机森林模型在界内的关注度与受欢迎程度有着显著的提升,这多半归功于它可以快速地被应用到几乎任何的数据科学问题中去,从而使人们能够高效快捷地获得第一组基准测试结果.在各种各样的问题中,随机森林一次又一次地展示出令人难以置信的强大,而与此同时它又是如此的方便实用. 需要大家注意的是,在上文中特别提到的是第一组测试结果,而非所有的结果,这是因为随机森林方法固然也有自己的局限性.在这篇文章中,我们将向你介绍运用随机森林构建预测模型时最令人感兴趣

第九篇:随机森林(Random Forest)

前言 随机森林非常像<机器学习实践>里面提到过的那个AdaBoost算法,但区别在于它没有迭代,还有就是森林里的树长度不限制. 因为它是没有迭代过程的,不像AdaBoost那样需要迭代,不断更新每个样本以及子分类器的权重.因此模型相对简单点,不容易出现过拟合. 下面先来讲讲它的具体框架流程. 框架流程 随机森林可以理解为Cart树森林,它是由多个Cart树分类器构成的集成学习模式.其中每个Cart树可以理解为一个议员,它从样本集里面随机有放回的抽取一部分进行训练,这样,多个树分类器就构成了一个

【转载】Python 实现的随机森林http://lidandan1314.diandian.com/

Python 实现的随机森林 随机森林是一个高度灵活的机器学习方法,拥有广泛的应用前景,从市场营销到医疗保健保险. 既可以用来做市场营销模拟的建模,统计客户来源,保留和流失.也可用来预测疾病的风险和病患者的易感性. 随机森林是一个可做能够回归和分类. 它具备处理大数据的特性,而且它有助于估计或变量是非常重要的基础数据建模. 这是一篇关于使用Python来实现随机森林文章. 什么是随机森林? 随机森林是几乎任何预测问题(甚至非直线部分)的固有选择.它是一个相对较新的机器学习的策略(在90 年代产生

ML—随机森林&#183;1

Introduction to Random forest(Simplified) With increase in computational power, we can now choose algorithms which perform very intensive calculations. One such algorithm is “Random Forest”, which we will discuss in this article. While the algorithm

随机森林,决策树(Random Forest)

http://www.cnblogs.com/maybe2030/p/4585705.html 阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 袋外错误率(oob error) 6 随机森林工作原理解释的一个简单例子 7 随机森林的Python实现 8 参考内容 回到顶部 1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做

R语言︱机器学习模型评估方案(以随机森林算法为例)

R语言︱机器学习模型评估方案(以随机森林算法为例) 笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评价模型的方式. 常见的应用在监督学习算法中的是计算平均绝对误差(MAE).平均平方差(MSE).标准平均方差(NMSE)和均值等,这些指标计算简单.容易理解:而稍微复杂的情况下,更多地考虑的是一些高大上的指标,信息熵.复杂度和基尼值等等. 本篇可以用于情感挖