2015-04-22 2 views
5

Это небольшой образец моего data.frameR - ансамбль с нейронной сетью?

naiveBayesPrediction knnPred5 knnPred10 dectreePrediction logressionPrediction correctClass 
1    non-bob  2   2   non-bob 0.687969711847463   1 
2    non-bob  2   2   non-bob  0.85851872253358   1 
3    non-bob  1   1   non-bob 0.500470892627383   1 
4    non-bob  1   1   non-bob  0.77762739066215   1 
5    non-bob  1   2   non-bob 0.556431439357365   1 
6    non-bob  1   2   non-bob 0.604868385598237   1 
7    non-bob  2   2   non-bob 0.554624186182919   1 

Я факторизуется все,

'data.frame': 505 obs. of 6 variables: 
    $ naiveBayesPrediction: Factor w/ 2 levels "bob","non-bob": 2 2 2 2 2 2 2 2 2 2 ... 
    $ knnPred5   : Factor w/ 2 levels "1","2": 2 2 1 1 1 1 2 1 2 1 ... 
    $ knnPred10   : Factor w/ 2 levels "1","2": 2 2 1 1 2 2 2 1 2 2 ... 
    $ dectreePrediction : Factor w/ 1 level "non-bob": 1 1 1 1 1 1 1 1 1 1 ... 
    $ logressionPrediction: Factor w/ 505 levels "0.205412826873861",..: 251 415 48 354 92 145 90 123 28 491 ... 
    $ correctClass  : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ... 

Затем я попытался ансамблю его с помощью neuralnet

ensembleModel <- neuralnet(correctClass ~ naiveBayesPrediction + knnPred5 + knnPred10 + dectreePrediction + logressionPrediction, data=allClassifiers[ensembleTrainSample,]) 

Ошибка в нейронах [[i]]% *% веса [[i]]: требуется числовой/комплексный аргументы матрицы/вектора

Затем я попытался поместить в матрицу

m <- model.matrix(correctClass ~ naiveBayesPrediction + knnPred5 + knnPred10 + dectreePrediction + logressionPrediction, data = allClassifiers) 

Ошибка в contrasts<- (*tmp*, значение = contr.funs [1 + ISOF [пп]]):
контрасты могут быть применены только для коэффициентов с 2 или более уровнями

Я думаю, что это должно быть связано с тем, что одна функция «decistreePrediction» имеет только 1 уровень, но она только находит один уровень из 2 возможных результатов (bob или non-bob), поэтому я понятия не имею, куда идти оттуда.

+0

Возможно ли, что вы случайно переименовали свои 'allClassifiers $ dectreePrediction' в одно и то же (re: [ваш предыдущий вопрос] (http://stackoverflow.com/questions/29711067/r-how-to -Изменение-имя-фактор-уровней))? Кроме того, я не думаю, что имеет смысл сделать '$ logressionPrediction' фактором, если только вы его не сперва. – alexforrence

+0

alexforrence Спасибо за ваш ответ. Я не понимаю вопроса, я обновил свой код дерева решений, чтобы узнать, может ли его использовать, если что-то еще полезно, я тоже могу это показать. –

ответ

3

neuralnet функция требует, чтобы «переменных», чтобы быть numeric или complex значения, потому что это делает матричное умножение, которое требует numeric или complex аргументов. Это очень ясно при возврате ошибки:

Error in neurons[[i]] %*% weights[[i]] : 
    requires numeric/complex matrix/vector arguments 

Это также отражено в следующем тривиальном примере.

mat <- matrix(sample(c(1,0), 9, replace=TRUE), 3) 
fmat <- mat 
mode(fmat) <- "character" 

# no error 
mat %*% mat 

# error 
fmat %*% fmat 
Error in fmat %*% fmat : requires numeric/complex matrix/vector arguments 

В быстрой демонстрации с фактической функции я буду использовать infert набор данных, который используется в качестве демо в пакете.

library(neuralnet) 
data(infert) 

# error 
net.infert <- neuralnet(case~as.factor(parity)+induced+spontaneous, infert) 
Error in neurons[[i]] %*% weights[[i]] : 
    requires numeric/complex matrix/vector arguments 

# no error 
net.infert <- neuralnet(case~parity+induced+spontaneous, infert) 

Вы можете оставить correctClass как factor, потому что он будет преобразован в фиктивную числовой переменной в любом случае, но это может быть лучше и преобразовать его в соответствующем двоичном представлении.

Мои предложений к вам:

  1. Преобразования коэффициентов к соответствующим двоичным представлениям (т.е. 0 и 1.)
  2. Оставьте logressionPrediction как числовые
  3. опускают переменные, которые имеют значение 1. Включение таких переменных совершенно излишне, поскольку с ними не может быть достигнуто никакого обучения.
Смежные вопросы