2013-05-02 2 views
2

У меня есть дерево классификации в R, я пытался перекрестную проверку по:предсказать функцию в пакете Tree

cv.tree1<-cv.tree(tree1) 

Затем я попытался

tree3 = prune.tree(tree1, best=15) 

Тогда я пытаюсь предсказать все мои метки от тока дерево:

predict(tree3, data.train[1,]) 

выход:

  0   1   2   3   4   5   6   7   8 
1 0.0006247397 0.8531862 0.03706789 0.02207414 0.003123698 0.008746356 0.009371095 0.00728863 0.05310287 
      9 
1 0.005414411 

Как я понимаю, что это дает мне вероятность каждой метки, так как у меня есть 10 наклеек здесь 0: 9 Так что я пытаюсь получить максимум из последнего утверждения для предсказания всех меток

predict.list <-matrix(0,nrow=nrow(data.train),ncol=10) 
for (index in c(1:nrow(digits.train))) 
{ 
    predict.list[index]<-predict(tree3, data.train[index,]) 
} 

и я попытался получить максимальную сумму каждой строки в прогнозе.list, но на самом деле это не работает Итак, я попытался увидеть структуру str (прогноз (tree3, data.train [index,])) Я нашел это

num [1, 1:10] 0.00656 0.00583 0.00947 0.07479 0.14813 ... 
    - attr(*, "dimnames")=List of 2 
    ..$ : chr "8184" 
    ..$ : chr [1:10] "0" "1" "2" "3" ... 

Итак, вопрос в том, правильно ли я получаю макс. каждых из них так, по этому пути я получил предсказание, и как я могу получить максимум с соответствующей этикеткой

я могу получить максимум от

max(predict(tree3, digits.train[1,])) 

, но я не могу получить соответствующую метку

ответ

2

Функция predict.tree() имеет аргумент type. Его значение по умолчанию: "vector", которое в случае дерева классификации возвращает вектор, содержащий вероятности класса для каждой из ваших строк наблюдения. Вы можете изменить его на "class", и он вернет класс с наивысшей вероятностью. В вашем случае, используя

< predict.list - предсказать (tree3, data.train, тип = "класс")

возвращает фактор вектор длины nrow(data.train) с каждым значением является уровень фактора который был предсказан для соответствующей строки.

+0

Спасибо, что работает, но я попробовал цикл, чтобы получить все предсказание и сохранить его в файле, но он дает мне больше данных, чем ожидалось. Есть ли у вас идеи, добавляет ли он больше данных? – Yasmin

+0

Вам не нужно зацикливать, чтобы получить все предсказания для набора данных. Если вы не укажете строку, она вернет вектор, содержащий все прогнозы для набора данных. – Marco

Смежные вопросы