随机森林(R语言)

随机森林可处理大量输入变量,并且可以得到变量重要性排序,在实际中,有广泛应用。本文简要展示R语言实现随机森林的示例代码,并通过F值判断模型效果。

随机森林

随机森林是一种常用的集成学习算法,基分类器为决策树。每棵树随机选择观测与变量进行分类器构建,最终结果通过投票得到。一般每棵树选择logN个特征(N为特征数),如果每棵树都选择全部特征,则此时的随机森林可以看成是bagging算法。R语言中,可通过randomForest包中的randomForest()函数完成随机森林算法。

R语言实现

  • 导入包与数据,并根据3:7将数据分为测试集和训练集。

target.url <- 'https://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data'

data <- read.csv(target.url,header = F)

set.seed(17)

index <- which( (1:nrow(data))%%3 == 0 )

train <- data[-index,]

test <- data[index,]

library(randomForest)

  • 进行随机森林训练。randomForest()函数中的两个重要参数为ntree和mtry,其中ntree为包含的基分类器个数,默认为500;mtry为每个决策树包含的变量个数,默认为logN,数据量不大时可以循环选择最优参数值。

err<-as.numeric()

for(i in 1:(length(names(train)))-1){

mtry_test <- randomForest(V61~., data=train, mtry=i)

err<- append( err, mean( mtry_test$err.rate ) )

}

print(err)

mtry<-which.min(err)

ntree_fit<-randomForest(V61~., data=train, mtry=mtry, ntree=1000)

plot(ntree_fit)

发现mtry取7时err最小,ntree取900时误差稳定。

  • 得到最终分类器,并观察模型效果和变量重要性。

rf<-randomForest(V61~., data=train, mtry=mtry, ntree=900, importance=T )

rf

模型误差为20.14%。然后可以通过精确度和基尼系数,判断变量重要性。

importance(rf)

varImpPlot(rf)

对测试集进行预测,并计算F值,用来判断模型效果。

pred1<-predict(rf,newdata=test)

Freq1<-table(pred1,test$V61)

tp<-as.data.frame(Freq1)[4,3]

tn<-as.data.frame(Freq1)[1,3]

fn<-as.data.frame(Freq1)[2,3]

fp<-as.data.frame(Freq1)[3,3]

p<-tp/(tp+fp)

r<-tp/(tp+fn)

f<-2/(1/p+1/r)

最终发现,F值为0.87。

原文发布于微信公众号 - 机器学习养成记(chenchenwings)

原文发表时间:2018-10-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

手把手教你用 TensorFlow 实现卷积神经网络(附代码)

在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下。首先介绍原理部分。 通过一个图像分类问题介绍卷积神经网络是如何工作的。下面是卷积神经...

36860
来自专栏iOSDevLog

估计器接口小结摘自:《Python 机器学习基础教程》 第3章 无监督学习与预处理(三)

scikit-learn 中的所有算法——无论是预处理、监督学习还是无监督学习算法——都被实现为类。这些类在 scikit-learn 中叫作估计器(estim...

15920
来自专栏杨熹的专栏

神经网络 之 线性单元

本文结构: 什么是线性单元 有什么用 代码实现 ---- 1. 什么是线性单元 线性单元和感知器的区别就是在激活函数: ? 感知器的 f 是阶越函数: ? 线性...

34040
来自专栏Python爬虫实战

感知机初探

感知机模型的假设空间:定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classifie...

9410
来自专栏null的专栏

机器学习算法实现解析——libFM之libFM的模型处理部分

本节主要介绍的是libFM源码分析的第三部分——libFM的模型处理。 3.1、libFM中FM模型的定义 libFM模型的定义过程中主要包括模型中参数的设置及...

56390
来自专栏张俊红

决策树-CART算法

总第80篇 01|前言: 本篇接着上一篇决策树详解,CART是英文“classification and regression tree”的缩写,翻译过来是分...

39250
来自专栏用户2442861的专栏

聚类算法原理及python实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

26440
来自专栏Petrichor的专栏

深度学习: greedy layer-wise pre-training (逐层贪婪预训练)

每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。

30530
来自专栏null的专栏

简单易学的机器学习算法——K-Means++算法

一、K-Means算法存在的问题 由于K-Means算法的简单且易于实现,因此K-Means算法得到了很多的应用,但是从K-Means算法的过程中发现,K-Me...

38250
来自专栏机器学习算法与Python学习

Python:numpy的总结(1)

1、multiply 例子: x1=[1,2,3];x2=[4,5,6] print multiply(x1,x2) 输出: [ 4 10 18] multi...

37240

扫码关注云+社区

领取腾讯云代金券