#载入包
library(randomForest)
library(caret)
#读取数据.数据链接:https://github.com/Kuntal-G/Machine-Learning/blob/master/R-machine-learning/data/banknote-authentication.cs
bn<-read.csv("C:\\Users\\Administrator\\desktop\\banknote.csv")
#将相应变量转换为因子
bn$class<-factor(bn$class)
#选择数据的一个子集来建模。在建立每一棵树的时候,随机森林会保留一部分数据用作交叉验证。
在此保留一部分样本仅是为了举例说明用模型来预测整个过程。
set.seed(1000)
sub.idx<-createDataPartition(bn$class,p=0.7,list=FALSE)
#创建随机森林.randomForest函数建立的模型不会保留树的信息,因此无法用这个模型预测未来的样本,
如要强制保留创建的的森林,可以使用keep.forest=TRUE.
mod<-randomForest(x=bn[sub.idx,1:4],y=bn[sub.idx,5],ntree=500,keep.forest=TRUE)
#用上述保留的数据样本做预测
pred<-predict(mod,bn[-sub.idx,])
#建立误差矩阵
table(bn[-sub.idx,"class"],pred,dnn=c("Actual","Predicted"))
Predicted
Actual 0 1
0 227 1
1 0 183
#载入包
library(randomForest)
library(caret)
#载入数据
bn<-read.xlsx("C:\\Users\\Administrator\\desktop\\BostonHousing.xls","Sheet1")
#为数据分块
set.seed(1000)
t.idx<-createDataPartition(bn$MEDV,p=0.7,list=FALSE)
#建立随机模型
#importance:代表了是否计算预测变量的重要性评分
#mod显示了训练分块和验证分块上的均方根误差,同时也显示了模型可以解释的输出变量和输入变量的便于的比例
mod<-randomForest(x=bn[t.idx,1:13],y=bn[t.idx,14],ntree=1000,xtest=bn[-t.idx,1:13],ytest=bn[-t.idx,14],importance=TRUE,keep.forest=TRUE)
mod
Call:
randomForest(x = bn[t.idx, 1:13], y = bn[t.idx, 14], xtest = bn[-t.idx,
1:13], ytest = bn[-t.idx, 14], ntree = 1000, importance = TRUE,
keep.forest = TRUE)
Type of random forest: regression
Number of trees: 1000
No. of variables tried at each split: 4
Mean of squared residuals: 12.61349
% Var explained: 86
Test set MSE: 6.88
% Var explained: 90.33
#检查变量的重要性
mod$importance
%IncMSE IncNodePurity
CRIM 9.7004357 2142.8688
ZN........ 0.5884207 159.1557
INDUS.. 5.9659285 1817.4772
CHAS 0.6435802 206.3128
NOX..... 8.8677847 1886.4954
RM... 36.8799200 8688.2991
AGE... 3.9366723 784.5546
DIS.. 6.7402336 1929.1328
RAD.. 1.7961579 300.6177
TAX.. 4.5298767 1078.0559
PTRATIO.. 7.2256233 2161.0569
B. 1.9050382 625.3586
LSTAT.. 65.2340060 9522.4124
#比较训练分块的预测值和真实值
plot(bn[t.idx,14],predict(mod,newdata=bn[t.idx,],xlab="Actual",ylab="Predicted"))
#在训练分块上比较袋外(Out of Bag,OOB)数据预测值和真实值
#mos$predicted绘制OOB预测值对真实值的图像
plot(bn[t.idx,14],mod$predicted,xlab="Actual",ylab="Predicted")
#在训练分块上比较预测值和真实值
#mod$predicted绘制模型的预测性能表现
plot(bn[-t.idx,14],mod$test$predicted,xlab="Actual",ylab="Predicted")
回归中的图像: