2014-12-11 2 views
1

Im делает случайные прогнозы леса с использованием R. Набор данных Aggregate_sample.csv.Как разрешить выпуск «НС в разрешенных присвоениях» в R

Company Index,Is Customer,videos,videos 
watched,tutorials,workshops,casestudies,productpages,other,totalActivities,youngTitleCount, 
oldTitleCount,Median between two Activities,Max between 2 activities, 
Time since100thactivity 
STPT,0,0,3,0,0,0,0,19,22,0,22,120,64074480,0 
STPR,0,0,1,0,1,1,0,61,64,0,64,120,56004420,0 
PLNRTKNLJS,0,0,0,0,0,0,0,25,25,25,0,810,4349940,0 
ASSSNNSP,0,0,0,0,0,3,0,17,20,0,20,60,2220,0 
STPP,1,164,32,25,36,26,0,2525,2808,498,2310,60,2938260,76789992 
AJKMPTNKSL,0,0,0,0,0,0,0,1,1,0,1,0,0,0 
FNKL,0,0,0,1,0,0,0,21,22,0,22,300,2415900,0 
FNKK,0,0,1,0,0,0,0,1,2,2,0,60,60,0 
FNKN,1,2,0,1,0,0,0,22,25,0,25,480,150840,0 

Ниже мой R сценарий

# Install and load required packages for decision trees and forests 
library(rpart) 
install.packages('randomForest') 
library(randomForest) 

Aggregate <- read.csv("~/Documents/Machine Lerning/preprocessed data/Aggregate_sample.csv") 

# splitdf function 
splitdf <- function(dataframe, seed=NULL) { 
if (!is.null(seed)) set.seed(seed) 
index <- 1:nrow(dataframe) 
trainindex <- sample(index, trunc(length(index)*0.7)) 
trainset <- dataframe[trainindex, ] 
testset <- dataframe[-trainindex, ] 
list(trainset=trainset,testset=testset) 
} 

splits <- splitdf(Aggregate, seed=808) 

#it returns a list - two data frames called trainset and testset 
str(splits) 

lapply(splits,nrow) 

#view the first few columns in each data frame 
lapply(splits,head) 

training <- splits$trainset 
testing <- splits$testset 

#fit the randomforest model 
model <- randomForest(as.factor(Aggregate$Is.Customer) ~ Aggregate$seniorTitleCount + 
Aggregate$juniorTitleCount + Aggregate$totalActivities + Aggregate$Max.between.2.activities 
+ Aggregate$Time.since.100th.activity + Aggregate$downloads , data=training, 
importance=TRUE, ntree=2000) 

#print(mode) 
# what are the important variables 
varImpPlot(model) 

Но я постоянно получаю следующее сообщение об ошибке и не может proceed.It, кажется, что-то не так с моей колонке IsCustomer, но это просто колонка с «0» и «1» (у меня нет никаких NA в моем наборе данных).

я прочитал следующий вопрос, который, кажется, связан с моим вопросом, но не смог найти ответа от него. Assigning within a lapply "NAs are not allowed in subscripted assignments"

Заранее спасибо.

+0

Тот факт, что у вас есть '' агрегатный $ в формуле, а также определяете '' данных = параметр кажется подозрительным. Но если вам действительно нужна помощь, вам нужно предоставить минимальный [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), который включает образцы данных ввода, поэтому мы точно говорим, почему это происходит. – MrFlick

+0

могут быть в данных НС. Попробуйте функцию 'na.roughfix' в самом случайном пакете леса – Koundy

+0

Спасибо за ответ. @MrFlick i обновлен с дополнительной информацией. koundy. В моем CSV нет никаких NA. – plr

ответ

1

Похоже, что вы хотите нарисовать свои данные только в формате data.frame training, поэтому вам не следует ссылаться на Aggregate в вашей формуле. Используя имена переменных на самом деле в ваших тестовых данных, это, похоже, работает очень хорошо.

randomForest(as.factor(Is.Customer) ~ oldTitleCount + 
    youngTitleCount + totalActivities + Max.between.2.activities + 
    Time.since100thactivity + videos , 
data=training, 
importance=TRUE, ntree=2000) 

который возвращает

Call: 
randomForest(formula = as.factor(Is.Customer) ~ oldTitleCount +  youngTitleCount + totalActivities + Max.between.2.activities +  Time.since100thactivity + videos, data = training, importance = TRUE,  ntree = 2000) 
       Type of random forest: classification 
        Number of trees: 2000 
No. of variables tried at each split: 2 

     OOB estimate of error rate: 16.67% 
Confusion matrix: 
    0 1 class.error 
0 4 0   0.0 
1 1 1   0.5 
+0

Спасибо. Оно работает..!! Я только что начал R позавчера. Теперь я чувствую себя довольно глупым :). Еще раз спасибо. – plr