Kate English
Kate English

Reputation: 55

SVM Prediction is dropping values

I'm running the SVM model on a dataset, which runs through fine on the train/fitted model. However when I run it for the prediction/test data, it seems to be dropping rows for some reason, when I try to add 'pred_SVM' back into the dataset, the lengths are different. Below is my code

#SVM MODEL
 SVM_swim <- svm(racetime_mins ~ event_date+ event_month +year 
 +event_id + 
              gender + place + distance+ New_Condition+
              raceNo_Updated +  
              handicap_mins +points+
              Wind_Speed_knots+ 
              Air_Temp_Celsius +Water_Temp_Celsius +Wave_Height_m,
          data = SVMTrain, kernel='linear')
summary(SVM_swim)

#Predict Race_Time Using Test Data
pred_SVM <- predict(SVM_swim, SVMTest, type ="response")
View(pred_SVM)
#Add predicted Race_Times back into the test dataset.
SVMTest$Pred_RaceTimes<- pred_SVM
View(SVMTest) #Returns 13214 rows
View(pred_SVM) #Returns 12830

Error in $<-.data.frame(*tmp*, Pred_RaceTime, value = c(2 = 27.1766438249356, : replacement has 12830 rows, data has 13214

Upvotes: 0

Views: 360

Answers (1)

maydin
maydin

Reputation: 3755

As it is mentioned in the command, you need to get rid of the NA values in your dataset. SVM is handling it for you so that, the pred_SVM output is calculated without the NA values.

To test if there exist NA in your data, just run : sum(is.na(SVMTest))

I am pretty sure that you will see a number greater than zero.

Before starting to build your SVM algorithm, get rid of all NA values by,

dataset <- dataset[complete.cases(dataset), ]

Then after separating your data into Train and Test sets you can run ,

SVM_swim <- svm(.....,data = SVMTrain, kernel='linear')

Upvotes: 0

Related Questions