2016-07-23 3 views
0

Kaggle Titanic 데이터에 대한 SVM 코드 e1071을 검토 중입니다. 내가 아는 마지막 순간,이 부분이 작동했지만, 지금은 다소 이상한 오류가 발생합니다. kaggle에 제출할 수 있도록 data.frame을 만들려고 할 때 내 예측은 테스트 세트 대신 내 교육 세트의 크기 인 것 같습니다.내 행이 Kaggle의 SVM 스크립팅 코드에서 일치하지 않습니다.

문제 분명히

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

, 그들은 모두 418해야하며, 내가 잘못 무슨 일이 일어나고 있는지 이해가 안 돼요?

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

시도 내가 가진

이 나에게 오류를 제공 라인이

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 

:

세부 여기

내 스크립트입니다 names(train)names(test)을 사용하여 내 열 변수 이름이 같은지 확인하십시오. 데이터 here을 찾을 수 있습니다. 예측 코드를 한 줄로 최적화 할 수 있다는 것을 알고 있지만 여기에는 문제가 없습니다. 나는이 문제에 대해 두 번째 눈빛을 감상 할 것이다. 내가 kernlab 라이브러리를 사용하려고 생각하고 있지만, 여기에 소홀히하고있는 syntatical sugar 문제가 있는지 궁금해하고있었습니다. 당신의 제안과 단서를 가져 주셔서 감사합니다.

+1

구문에 오류가없는 것으로 보입니다. 표준 문제 해결 단계를 수행하십시오. 객체를 제거하고'rm (prediction, train, test, bestModel)'을 다시 시작하십시오. 다시 실행하십시오. 데이터 프레임을 만들기 전에,'nrow (test)'와'length (prediction)'을 확인하십시오. –

+0

bestModel은 훈련을위한 행 크기> 행 크기를 생성합니다. 질문은, 왜? 문제는'bestModel ~ svm()'에 있습니다. 구문 오류는 없지만 여전히 작동하지 않습니다. 이상해. – hlyates

+0

'prediction [na.omit (names (prediction))]'을 사용하십시오. 왜 이것이 필요한지 알아 내려고 노력할 것입니다. –

답변

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