首页 文章

在我的Kaggle的SVM脚本代码中,我的行不匹配

提问于
浏览
0

我正在审查我的 e1071 代码,用于进行Kaggle Titanic数据的SVM . 最后我知道,这一部分是有效的,但现在我得到了一个相当奇怪的错误 . 当我尝试构建我的data.frame所以我可以提交给kaggle时,似乎我的预测是我的训练集的大小而不是测试集 .

Problem

data.frame中的错误(PassengerId = test $ passengerid,Survived = prediction):参数意味着行数不同:418,714

显然,他们都应该是418,我不明白出了什么问题?

Details

这是我的脚本:

setwd("Path\\To\Data")
train <- read.csv("train.csv")
test <- read.csv("test.csv")

library("e1071")
bestModel = svm(Survived ~ Pclass + Sex + Age + Sex * Pclass, data = train, kernel = "linear", cost = 1)

prediction <- predict(bestModel, newData=test, type="response")
prediction[prediction >= 0.5] <- 1
prediction[prediction != 1] <- 0
prediction[is.na(prediction)] <- 0

这是给我错误的一行:

predictionSubmit <- data.frame(PassengerId = test$passengerid, Survived = prediction)

Attempts

我使用了 names(train)names(test) 来验证我的列变量名是否相同 . 你可以找到数据here . 我知道我的预测代码可以优化为一行,但这不是问题 . 我很欣赏这个问题的第二双眼睛 . 我正在考虑使用 kernlab 库,但想知道是否存在我在这里忽略的合成糖问题 . 感谢您的建议和线索 .

1 回答

  • 1
    #10 items in training set
    y <- sample(0:1, 10, T)
    x <- rnorm(10)
    bestModel <- svm(y~x,kernel = "linear", cost = 1)
    
    #Six in test set
    prediction <- predict(bestModel, newdata=rnorm(6), type="response")
    
    #Output has 10 values (unexpected)
    prediction
    #           1          2          3          4          5          6       <NA>       <NA> 
    #  0.05163974 0.58048905 0.49524846 0.13524885 0.12592718 0.06082822 0.55393256 1.08488424 
    #        <NA>       <NA> 
    #  0.94836026 0.47679646 
    
    #For correct output, remove names with <NA>
    prediction[na.omit(names(prediction))]
    #         1          2          3          4          5          6 
    #0.05163974 0.58048905 0.49524846 0.13524885 0.12592718 0.06082822
    

相关问题