2015-05-21 1 views
3

Я пытаюсь запустить этот код для соревнования Kaggle около Titanic для упражнений. Его беззаботный и начинающий случай. Я использую пакет neuralnet внутри R в этом пакете.Как использовать пакет Rs neuralnet в конкурсе Kaggle о Titanic

Это поезд данных с сайта:

train <- read.csv("train.csv") 
m <- model.matrix( ~ Survived + Pclass + Sex + Age + SibSp, data =train) 
head(m) 

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

library(neuralnet) 

r <- neuralnet(Survived ~ Pclass + Sexmale + Age + SibSp, 
data=m, hidden=10, threshold=0.01,rep=100) 

Сеть обучена. Я загружаю тестовые данные и готовлю их к тестированию.

test=read.csv("test.csv") 

m2 <- model.matrix( ~ Pclass + Sex + Age + SibSp, data = test) 

Заключительный тест для предсказания:

res= compute(r, m2) 

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

res= compute(r, m2) 

Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments 

Что я здесь делаю неправильно?

Весь код:

train <- read.csv("train.csv") 
m <- model.matrix( ~ Survived + Pclass + Sex + Age + SibSp, data =train) 
head(m) 

library(neuralnet) 

r <- neuralnet(Survived ~ Pclass + Sexmale + Age + SibSp, 
data=m, hidden=10, threshold=0.01,rep=100) 

test=read.csv("test.csv") 

m2 <- model.matrix( ~ Pclass + Sex + Age + SibSp, data = test) 

res= compute(r, m2) 
+0

Можете ли вы предоставить все в одном коде? Например, используйте комментарии по комментариям, если они вам понадобятся. Теперь, немного сложно следить за вашим ocde. –

+1

@Masi Добавил все в один код. – user3785898

ответ

3

Попробуйте использовать это, чтобы предсказать, вместо:

res = compute(r, m2[,c("Pclass", "Sexmale", "Age", "SibSp")]) 

Это работает для меня, и вы должны получить некоторый вывод.

Что, как представляется, СЛУЧИЛОСЬ: model.matrix создает дополнительные столбцы ((Intercept)), который не является частью данных, которая использовалась для построения нейронной сети, как таковой в функции compute она не знает, что с ним делать. Таким образом, решение состоит в том, чтобы явно выбрать столбцы, необходимые для использования в вычислительной функции. Это связано с тем, что neuralnet пытается сделать какое-то матричное умножение, но матрица имеет неправильный размер.


На сколько нейронов или оптимизации гипер-параметров, вы могли бы использовать перекрестную проверку и все эти другие методы. Если использовать другой пакет (nnet), то вы можете использовать пакет caret для определения оптимальных параметров для вас.Это будет выглядеть следующим образом:

library(caret) 
nnet.model <- train(Survived ~ Pclass + Sex + Age + SibSp, 
        data=train, method="nnet") 
plot(nnet.model) 
res2 = predict(nnet.model, newdata=test) 

с сюжетом гиперпараметров быть этим:

enter image description here


Вы можете измерить производительность с помощью confusionMatrix в caret пакете:

library(neuralnet) 
library(caret) 
library(dplyr) 
train <- read.csv("train.csv") 
m <- model.matrix( ~ Survived + Pclass + Sex + Age + SibSp, data =train) 

r <- neuralnet(Survived ~ Pclass + Sexmale + Age + SibSp, 
       data=m, rep=20) 

res = neuralnet::compute(r, m[,c("Pclass", "Sexmale", "Age", "SibSp")]) 
pred_train = round(res$net.result) 

# filter only with the ones with a survival prediction, not all records 
# were predicted for some reason; 
pred_rowid <- as.numeric(row.names(pred_train)) 
train_survived <- train %>% filter(row_number(Survived) %in% pred_rowid) %>% select(Survived) 
confusionMatrix(as.factor(train_survived$Survived), as.factor(pred_train)) 

Выход:

Confusion Matrix and Statistics 

      Reference 
Prediction 0 1 
     0 308 128 
     1 164 114 

       Accuracy : 0.5910364    
       95% CI : (0.5539594, 0.6273581) 
    No Information Rate : 0.6610644    
    P-Value [Acc > NIR] : 0.99995895    

        Kappa : 0.119293    
Mcnemar's Test P-Value : 0.04053844    

      Sensitivity : 0.6525424    
      Specificity : 0.4710744    
     Pos Pred Value : 0.7064220    
     Neg Pred Value : 0.4100719    
      Prevalence : 0.6610644    
     Detection Rate : 0.4313725    
    Detection Prevalence : 0.6106443    
     Balanced Accuracy : 0.5618084    

     'Positive' Class : 0  
+0

Спасибо! У меня есть другой вопрос об использовании нейронной сети. Как вы интерпретируете результаты? Как я могу убедиться, что прогноз был точным? – user3785898

+0

см. Мое редактирование, вы можете использовать пакет caret с функцией confusionMatrix для измерения производительности. – chappers

+0

Огромное спасибо! Но, я должен спросить, как вы узнали все это? Любой совет? Рекомендации по бронированию? – user3785898

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