随机森林——分类、回归

随机森林分类

#载入包
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")

    外数据(Out of Band, OOB) 传输层协议 使用 带外数据来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道.linux系统的 套接字机制支持低层协议发送和接受带外数据.但是TCP协议没有真正意义上的带外数据.为了发送重要协议,TCP提供了一种称为紧急模式(urgent mode)的机制.TCP协议在 数据段中设置URG位,表示进入紧急模式.接收方可以对紧急模式采取特殊的处理.很容易看出来,这种方式数据不容易被阻塞,可以通过在我们的服务器端程序里面捕捉SIGURG信号来及时接受数据或者使用带OOB标志的recv函数来接受.

回归中的图像:

随机森林——分类、回归_第1张图片随机森林——分类、回归_第2张图片随机森林——分类、回归_第3张图片


你可能感兴趣的:(#,随机森林,分类,回归,R语言,#,数据分析)