Присвоение названий списка матрице моделей - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть b, который представляет собой список фреймов данных:

> b[[1]]
$`6`
   V1   V2    V3    V4     V5    V6   V7    V8 V9
1:  M 0.49 0.465 0.125 0.5225 0.235 0.13 0.141  7

$`8`
   V1    V2    V3   V4    V5     V6     V7    V8 V9
1:  I 0.235 0.160 0.04 0.048 0.0185 0.0180 0.015  5
2:  I 0.185 0.135 0.04 0.027 0.0105 0.0055 0.009  5
3:  M 0.175 0.125 0.04 0.024 0.0095 0.0060 0.005  4
....
> class (b)
[1] "list"
> class (b[[1]]$`6`)
[1] "data.table" "data.frame"

Я хотел бы создать для каждого фрейма данных в b a NaiveBayes модель:

NB_TRAIN_model[[k,i]]<- naiveBayes(V1 ~ ., data =  b[[i]][[k]])

Например, b[[6,1]] <- <- naiveBayes(V1 ~ ., data = b[[i]]$' 6 ') Так что каждый столбец - это дерево №.и каждая строка - это имя терминального узла.Где i - номер дерева (1..rf$ntree), а k - имя кадра данных в b[[i]] (это имя конечного узла).

require(party)
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")


### each `b[i]` holds the rows for each terminal node for tree number `i`
b<-list()

max_no_terminalnodes<- length (split(train, train_nodes[,1]) )
for (i in 1:(rf$ntree))
{
  b[[i]]<-split(train, train_nodes[,i])
  if ( max_no_terminalnodes < length (split(train, train_nodes[,i]) ) ) {
    max_no_terminalnodes <- length (split(train, train_nodes[,i]) ) }
}

### Holds the naiveBayes models per terminal node per tree 
NB_TRAIN_model<-matrix(list(), nrow=max_no_terminalnodes, ncol=rf$ntree)
k=0
for (i in 1:(rf$ntree))
{ 
  for (j in as.numeric (names( b[[i]]))){
    k=k+1
  NB_TRAIN_model[[k,i]]<- naiveBayes(V1 ~ ., data =  b[[i]][[k]] )
  }
  k=0
}

Как видно из моего кодаЯ теряю настоящее имя b.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...