2016-07-23 5 views
0

Я просматриваю код e1071 для SVM для данных Kaggle Titanic. Последнее, что я знал, эта часть его работала, но теперь я получаю довольно странную ошибку. Когда я пытаюсь построить свой файл data.frame, поэтому я могу представить kaggle, кажется, что мой прогноз - это размер моего набора тренировок вместо набора тестов.Мои строки не совпадают в моем коде сценария SVM для Kaggle

Проблема

Error in data.frame(PassengerId = test$passengerid, Survived = prediction) : arguments imply differing number of rows: 418, 714

Очевидно, они оба должны быть 418, и я не понимаю, что происходит не так?

Детали

Вот мой сценарий:

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) 

Попытки

У меня есть names(train) и names(test), чтобы проверить, что мои имена переменных столбца совпадают. Вы можете найти данные here. Я знаю, что мой код предсказания можно оптимизировать в одну строку, но это не проблема. Я бы оценил вторую пару глаз по этому вопросу. Я думаю об использовании библиотеки kernlab, но мне было интересно, есть ли синтаксическая проблема с сахаром, которую я пренебрегал здесь. Спасибо за ваши предложения и подсказки.

+1

В тексте сообщения не было ошибок. Пройдите стандартные шаги по устранению неисправностей. Удалите объекты и снова запустите 'rm (предсказание, поезд, тест, bestModel)'. Запустите его снова. Перед созданием фрейма данных проверьте 'nrow (test)' и 'length (prediction)' –

+0

bestModel создаст размер строки> размер строки для обучения. Вопрос в том, почему? Проблема заключается в 'bestModel ~ svm()'. Нет синтаксических ошибок, но все равно не работает. Это странно. – hlyates

+0

Использовать 'прогнозирование [na.omit (имена (предсказание))]'. Я постараюсь выяснить, почему это необходимо. –

ответ

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 
+0

Не могли бы вы точно повторить мою проблему? Код является открытым исходным кодом, и все, что вам нужно сделать, - запустить скрипт. Я заметил, что в моем случае в именах нет , а скорее диапазон ID для набора тренировок, а не набора прогнозов. Это ошибка? – hlyates

+0

Это, как говорится, большое вам спасибо за помощь. Я действительно вижу так же, как вы делаете в этом экземпляре, но это не похоже на причину с данными .csv. :( – hlyates

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

  • Нет связанных вопросов^_^