【问题标题】:How to use Rs neuralnet package in a Kaggle competition about Titanic如何在关于泰坦尼克号的 Kaggle 比赛中使用 Rs 神经网络包
【发布时间】:2015-08-03 20:22:19
【问题描述】:

我正在尝试为关于Titanic 的 Kaggle 竞赛运行此代码以进行锻炼。它是免费的,是初学者的案例。我在这个包中使用 R 中的神经网络包。

这是来自网站的火车数据:

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)

【问题讨论】:

  • 您能在一个代码中提供所有内容吗?例如,如果需要,请通过注释标记使用 cmets。现在,跟随你的习惯并不难。
  • @Masi 在一个代码中添加了所有内容。

标签: r machine-learning neural-network kaggle


【解决方案1】:

尝试使用它来预测:

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)

超参数图如下:


您可以使用caret 包中的confusionMatrix 来衡量性能:

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    

【讨论】:

  • 谢谢!我还有一个关于使用神经网络的问题。你如何解释结果?如何查看预测是否准确?
  • 看我的编辑,你可以使用带有confusionMatrix函数的caret包来衡量性能。
  • 非常感谢!但是,我不得不问,你是怎么学会这一切的?有什么建议吗?书籍推荐?
  • 我是一名统计学家。我真的没有任何建议,因为互联网可能有你能想象的一切。对不起,我真的没有任何有用的建议;对我自己来说,它试图从最基本的构建块开始理解一切,并以此方式积累你的知识。
猜你喜欢
  • 2022-01-03
  • 2017-03-12
  • 2016-06-19
  • 2020-10-25
  • 2018-11-24
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多