2015-08-15 130 views
4

我已經訓練了一個svm模型。我想測試它,但是我在predict()函數中遇到了一個錯誤。爲了簡單起見,我在這裏將測試和訓練數據分成非隨機70/30分割。svm預測中的錯誤

library(e1071) 

train <- mydata[1:9731, ] 
test <- mydata[(9731+1):13901, ] 

mysvm <- svm(formula = outcome ~ BW + GA, data = train, type = "C-classification", kernel = "linear", gamma = 1, cost = 2)  
predict(mysvm, newdata=test) 

的錯誤信息是從預測()是:

Error in names(ret2) <- rowns : 
    'names' attribute [4170] must be the same length as the vector [4106] 

數據的頭部看起來像......

> head(mydata) 
    BW outcome GA 
1 2.00 Survived 34 
2 2.81 Survived 41 
3 1.85 Survived 35 
4 2.23 Survived 32 
5 1.21 Survived 34 
6 2.91 Survived 37 

This user有同樣的錯誤消息。問題在於他/他沒有使用數據框。這不是我的問題。

> class(test) 
[1] "data.frame" 
> class(train) 
[1] "data.frame" 

我不知道爲什麼這個錯誤發生或者是什麼意思。回溯()和調試(預測)也沒有幫助。

+1

你可以顯示你的原始數據的頭(duput())嗎? (mydata) – erasmortg

回答

6

由於您尚未提供數據,因此很難提供解決方案。但是,我猜測您的測試數據中有64行,其中或BW的值爲NA。如果您使用任何NA移除行,我認爲您的預測將運行:

predict(mysvm, newdata = test[!rowSums(is.na(test)), ]) 

這當然意味着您不會對這些行進行任何預測。你如何處理這個問題取決於你(例如,你可以對缺失值或任何適合你的特定用例的情況進行推測)。

+0

謝謝!您正確識別了問題。 – Nirvan

-1

我使用:

模型< - SVM(Y = 標籤,X = 數據,...)

PRED < - 預測(模式,數據

和一切都很好。