2015-04-22 13 views
5

Jest to mała próbka mojego data.frameR - zespół z siecią neuronową?

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 

mam uwzględnić wszystkiemu

'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 ... 

Potem próbował zespół smyczkowy go za pomocą neuralnet

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

błąd w neuronach [[i]]% *% wag [[i]]: wymaga liczbowych/złożonych argumentów macierz/wektor

Następnie próbuje umieścić w osnowie

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

Błąd contrasts<- (*tmp*, wartość = contr.funs [1 + isOF [nn]])
kontrast może być stosowany tylko dla czynników z 2 lub więcej poziomów

Myślę, że musi to mieć coś wspólnego z jedną cechą "decistreePrediction", która ma tylko jeden poziom, ale znajduje tylko jeden poziom spośród 2 możliwych wyników (bob lub non-bob), więc nie mam pojęcia, dokąd się udać.

+0

Czy to możliwe, że przez przypadek zmieniłeś nazwę 'allClassifiers $ dectreePrediction' na wszystkie są to samo (re: [twoje poprzednie pytanie] (http://stackoverflow.com/questions/29711067/r-how-to -imię-nazwy-czynników-poziomów))? Ponadto, nie uważam, że ma sens aby '$ logressionPrediction' był czynnikiem, chyba że najpierw go odrzucisz. – alexforrence

+0

alexforrence dzięki za odpowiedź Nie rozumiem pytania, zaktualizowałem swój kod drzewa decyzyjnego, aby sprawdzić, czy jest on przydatny, jeśli cokolwiek innego jest przydatne, mogę to również pokazać. –

Odpowiedz

3

Funkcja neuralnet wymaga się „zmienne” być numeric lub complex wartości, ponieważ robi mnożenia macierzy, która wymaga numeric lub complex argumenty. Jest to bardzo jasne w zwróconym błędzie:

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

Znajduje to również odzwierciedlenie w następującym trywialnym przykładzie.

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 

Jako szybki demonstracji z rzeczywistej funkcji Użyję infert zbiór danych, który jest używany jako demo w opakowaniu.

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) 

Możesz zostawić correctClass jako factor ponieważ zostanie on przekształcony w manekina zmiennej numerycznej i tak, ale może to być również najlepiej przekonwertować go do odpowiedniej reprezentacji binarnej.

Moje propozycje dla ciebie to:

  1. Konwersja czynniki do odpowiednich reprezentacji binarnych (czyli 0 i 1'S)
  2. Zostaw logressionPrediction jako numerycznych
  3. Wygasić zmiennych, które mają tylko 1 wartość. Uwzględnienie takich zmiennych jest całkowicie zbędne, ponieważ nie da się z nimi uczyć.