2015-04-22 44 views
5

Đây là một mẫu nhỏ của data.frame tôiR - đồng bộ với mạng thần kinh?

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 

Tôi đã yếu tố tất cả mọi thứ

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

sau đó tôi đã cố gắng để ensemble nó bằng cách sử neuralnet

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

Lỗi trong tế bào thần kinh [[i]]% *% trọng số [[i]]: yêu cầu số các đối số ma trận/vectơ

sau đó tôi đã cố gắng để đưa vào một ma trận

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

Lỗi trong contrasts<- (*tmp*, value = contr.funs [1 + isOF [nn]]):
tương phản có thể được áp dụng chỉ với các yếu tố có từ 2 cấp trở lên

Tôi nghĩ đó phải là điều cần làm với một tính năng "decistreePrediction" chỉ có 1 cấp độ nhưng nó chỉ tìm thấy một cấp trong số 2 kết quả có thể xảy ra (bob hoặc không phải bob) vì vậy tôi không biết phải đi đâu từ đó.

+0

Có thể bạn vô tình đổi tên 'allClassifiers $ dectreePrediction' thành tất cả giống nhau (re: [câu hỏi trước của bạn] (http://stackoverflow.com/questions/29711067/r-how-to -change-name-of-factor-levels))? Ngoài ra, tôi không nghĩ rằng nó làm cho tinh thần để làm cho '$ logressionPrediction' một yếu tố, trừ khi bạn bin nó đầu tiên. – alexforrence

+0

alexforrence cảm ơn bạn đã trả lời tôi không hiểu câu hỏi, tôi cập nhật với mã cây quyết định của tôi để xem nếu nó sử dụng bất kỳ, nếu bất cứ điều gì khác là hữu ích tôi có thể hiển thị rằng quá. –

Trả lời

3

Chức năng neuralnet yêu cầu 'biến' là numeric hoặc complex giá trị vì nó đang nhân ma trận yêu cầu đối số numeric hoặc complex. Điều này rất rõ ràng trong lỗi được trả về:

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

Điều này cũng được phản ánh với ví dụ nhỏ sau đây.

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 

Để minh họa nhanh với chức năng thực tế, tôi sẽ sử dụng số liệu infert được sử dụng làm bản trình diễn trong gói.

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) 

Bạn có thể để lại correctClass như một factor bởi vì nó sẽ được chuyển đổi sang một biến số giả anyway nhưng nó có thể là tốt nhất cũng để chuyển đổi nó sang biểu diễn nhị phân tương ứng.

gợi ý của tôi với bạn là:

  1. Chuyển đổi các yếu tố của bạn để cơ quan đại diện nhị phân tương ứng (ví dụ: 0 và 1 của)
  2. Để lại logressionPrediction như
  3. biến Bỏ qua số đó chỉ có 1 giá trị. Bao gồm các biến như vậy là hoàn toàn thừa như không có học tập có thể được thực hiện với họ.
Các vấn đề liên quan