R软件实现随机森林算法(带详细代码操作)
随机森林算法是我们经常要用到的机器学习,本文我们将使用随机森林模型,根据鲍鱼的一系列特征来预测鲍鱼是否“新鲜”。鲍鱼数据来自UCI机器学习存储库(我们将数据分为训练和测试集)。
目录如下:
1、数据准备(输入,数据已处理等)
2、数据分割(把数据分割为测试集和训练集)
3、变量选择
4、模型拟合结果及评估(混淆矩阵,ROC曲线等)
首先,我们将数据加载到R中:
# 加载需要的安装包
library(caret)
library(ranger)
library(tidyverse)
library(e1071)
# 读入数据
abalone_data <- read.table("../data/abalone.data", sep = ",")
# 读入变量名称
colnames(abalone_data) <- c("sex", "length", "diameter", "height",
"whole.weight", "shucked.weight",
"viscera.weight", "shell.weight", "age")
# 对预测变量进行划分
abalone_data <- abalone_data %>%
mutate(old = age > 10) %>%
# remove the "age" variable
select(-age)
# 把数据分割成训练集合测试集
set.seed(23489)
train_index <- sample(1:nrow(abalone_data), 0.9 * nrow(abalone_data))
abalone_train <- abalone_data[train_index, ]
abalone_test <- abalone_data[-train_index, ]
# remove the original dataset
rm(abalone_data)
# view the first 6 rows of the training data
head(abalone_train)
可以看到,输出结果如下:
下一步,拟合随机森林模型
rf_fit <- train(as.factor(old) ~ .,
data = abalone_train,
method = "ranger")
默认情况下,train不带任何参数函数重新运行模型超过25个bootstrap样本和在调谐参数的3个选项(用于调谐参数ranger是mtry;随机选择的预测器在树中的每个切口的数目)。
rf_fit
## Random Forest
##
## 3759 samples
## 8 predictor
## 2 classes: 'FALSE', 'TRUE'
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 3759, 3759, 3759, 3759, 3759, 3759, ...
## Resampling results across tuning parameters:
##
## mtry splitrule Accuracy Kappa
## 2 gini 0.7828887 0.5112202
## 2 extratrees 0.7807373 0.4983028
## 5 gini 0.7750120 0.4958132
## 5 extratrees 0.7806244 0.5077483
## 9 gini 0.7681104 0.4819231
## 9 extratrees 0.7784264 0.5036977
##
## Tuning parameter 'de.size' was held constant at a value of 1
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were mtry = 2, splitrule = gini
## de.size = 1.
使用内置predict函数,在独立的测试集上测试数据同样简单。
# predict the outcome on a test set
abalone_rf_pred <- predict(rf_fit, abalone_test)
# compare predicted outcome and true outcome
confusionMatrix(abalone_rf_pred, as.factor(abalone_test$old))
## Confusion Matrix and Statistics
##
## Reference
## Prediction FALSE TRUE
## FALSE 231 52
## TRUE 42 93
##
## Accuracy : 0.7751
## 95% CI : (0.732, 0.8143)
## No Information Rate : 0.6531
## P-Value [Acc > NIR] : 3.96e-08
##
## Kappa : 0.4955
##
## Mcnemar's Test P-Value : 0.3533
##
## Sensitivity : 0.8462
## Specificity : 0.6414
## Pos Pred Value : 0.8163
## Neg Pred Value : 0.6889
## Prevalence : 0.6531
## Detection Rate : 0.5526
## Detection Prevalence : 0.6770
## Balanced Accuracy : 0.7438
##
## 'Positive' Class : FALSE
##
现在我们已经看到了如何拟合模型以及默认的重采样实现(引导)和参数选择。尽管这很棒,但使用插入符号可以做更多的事情。
预处理(preProcess)
插入符号很容易实现许多预处理步骤。脱字号的几个独立功能针对设置模型时可能出现的特定问题。这些包括
dummyVars:根据具有多个类别的分类变量创建伪变量
nearZeroVar:识别零方差和接近零方差的预测变量(在进行二次采样时可能会引起问题)
findCorrelation:确定相关的预测变量
findLinearCombos:确定预测变量之间的线性相关性
除了这些单独的功能外,还存在preProcess可用于执行更常见任务(例如居中和缩放,插补和变换)的功能。preProcess接收要处理的数据帧和方法,可以是“ BoxCox”,“ YeoJohnson”,“ expoTrans”,“ center”,“ scale”,“ range”,“ knnImpute”,“ bagImpute”,“ medianImpute”中的任何一种”,“ pca”,“ ica”,“ spatialSign”,“ corr”,“ zv”,“ nzv”和“ conditionalX”。
# center, scale and perform a YeoJohnson transformation
# identify and remove variables with near zero variance
# perform pca
abalone_no_nzv_pca <- preProcess(select(abalone_train, - old),
method = c("center", "scale", "nzv", "pca"))
abalone_no_nzv_pcabootstrapped
## Created from 3759 samples and 8 variables
##
## Pre-processing:
## - centered (7)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论