2013-11-08 2 views
1

Я использую neuralnet в R, чтобы предсказать 3 класса на основе 17 входов. У меня 3 класса: 1, 0 и 2. У меня есть 2 файла: обучение и тестирование. Обучение имеет 64 случая из 17 входов и 18 столбцов.классификация в r neuralnet

x1    x2    x3   etc... x17     y 
-0.002307  0.034095 -0.002733   0    1 
0.004461  -0.041385  0.137767   -0.294394  0 
-0.25254  -0.094523  0     0.074733  0 
-0.25254  -0.094523  0     0.074733  2 

и больше. Всего 64 ряда для обучения.

Набор тестов точно такой же, как и данные обучения (16 строк), только с разными значениями. код я использую

library(neuralnet) 

nn <- neuralnet(y ~ x1+x2+x3 
        +x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15+x16+x17, 
       data=train,lifesign="full", hidden=15, err.fct="ce", 
       linear.output=FALSE) 
an1 <- compute(nn, Test[1:17]) 

Я могу сделать прогноз для яя подготовки

prediction (nn) 

Что дает мне классы прогнозирования столбцов Y для обучения конкретных множеств, но я не могу сделать то же самое с

prediction (an1): error message 

Error in matrix(covariate[not.duplicated, ], nrow = nrow.notdupl) : 
    'data' must be of a vector type 

Я не совсем уверен, что мне нужно предсказать, или вычислить должно быть достаточно. Но результаты для расчета я получаю:

$net.result 
      [,1] 
[1,] 0.7503498233120 
[2,] 0.9982475522024 
.... 
[14,] 0.0007727434740 
[15,] 0.9999287879015 

Который я не знаю, как его интерпретировать. Мне нужно что-то вроде

2    1   0 
    [1,] 0.964182671 0.022183652 0.013633677 
    [2,] 0.952685528 0.032202528 0.015111944 
    [3,] 0.966094194 0.021206723 0.012699083.. 

с распределением вероятностей для каждого класса.

Я пытался использовать ifelse

At2 <-(ifelse(Train$y==2,"2", ifelse(Train$y==1, "1","0"))) 

, но до сих пор получить тот же 1 колонка для net.result.

Любой может помочь указать, какую строку мне не хватает, чтобы получить то, что я хочу? Также я думаю, ifelse не делает то, что я хочу - предскажите класс Y на основе 17 входов. Это так?

+0

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

+0

Как насчет * вычислить * и * прогноз *? Просто дайте набор данных предсказателей и должен работать ... – Fernando

+0

@ Joran.I был раньше, и теперь я смотрю на пакет nnet и пробую его. Там есть функция прогнозирования. Но до сих пор я не мог получить от этого то, что хочу. – mil

ответ

1

В Документах говорит вычисление() возвращает список результатов, и предсказания() принимает neuralnet оборудована модель ... так я предполагаю, что вы используете это неправильный путь.

+0

compute() возвращает список результатов. Какие результаты? Вы имеете в виду, что, используя вычисление и прогнозирование, я не могу заставить neuralnet делать то, что я хочу сделать вообще, или можно получить его с вычислением и предсказанием, но не так, как я их использую? – mil

2

Я смог получить то, что хочу, используя пакет nnet и, в частности, функцию прогнозирования.

idC <-class.ind(Train$y) 
NN1=nnet(Train, idC[Train], size=15, maxit = 200, softmax=TRUE) 
predict(NN1, data=Test,type = "class") 

большое спасибо за все отзывы! :)

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