每个终端节点的每棵树的模型预测

时间:2018-11-28 21:28:45

标签: r random-forest predict naivebayes

我构建了RandomForest,其中包含10棵树。 为火车中每个终端节点的10棵树中的每棵树建立一个NaiveBayes模型。 例如,对于RF的第一棵树,我有23个不同的终端节点。 train_nodes[,1]是示例中的第一棵树。

> unique (train_nodes[,1]) ### All the terminal nodes of train_tree no. 1 of RF
 [1] 36 32 47 35 41 53 22  9 44 49 58 12  8 55 56 21 17 24 40 48  6 30 20 38 46 59 42 23 50 51

现在我在每个测试行上找到终端节点的预测。 我得到:

> head (test_nodes)
   1  2  3  4  5  6  7  8  9 10
1  9 17 32 35 20 35 41 40  9 48
2  9 14  8  8 16 16 14 13  4  9
3 24 17 21 35 20 35 33 48  9 48
4  9 14  8  8 16 16 14 13  4  9
5  9 30  8  8 16 16 14 20  4  9
6 42 38  6 12 50 13 36 44 51 13

这意味着第一行具有第一棵树的终端节点9。 我想将NaiveBayes模型用于第一棵树

我想对RF树的节点进行预测,并对每个终端节点(每棵树)进行预测,以便每行运行相关的NB模型(NB_TRAIN_model并添加到test$RF_NB[1..10] 相关的NB模型进行预测。

例如,对于测试的第一行,我将为终端节点9运行与第一棵树相关的NB模型。

require (data.table)
require (e1071)
require (randomForest)
dat1 <- fread('https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data',stringsAsFactors=T)

## split data to train and test
set.seed(123)
dat1 <- subset(dat1, !is.na(V1))
smp_size<-100
train_ind <- sample(seq_len(nrow(dat1)), size = smp_size)
train <- dat1[train_ind, ]
test <- dat1[-train_ind, ]

rf <- randomForest(V1 ~ ., data = train, ntree = 10, keep.inbag = TRUE)

rf_train<-predict(rf,train[,V2:V9], nodes=TRUE)
train_nodes<-attr(rf_train,"nodes")

rf_test<-predict(rf,test[,V2:V9], nodes=TRUE)
test_nodes<-attr(rf_test,"nodes")


### Holds the naiveBayes models per terminal node per tree 
NB_TRAIN_model<-list()

for (i in 1:(rf$ntree))
{
  NB_TRAIN_model[i]<-lapply(split(train, train_nodes[,i]), function(x) naiveBayes(V1 ~ V2+V3+V4+V5+V6+V7+V8+V9, data = x))

}

0 个答案:

没有答案