点击这里访问我使用的训练和测试数据。我是SVM的新手。我尝试在R中使用svm包来训练我的数据,我的数据包含40个属性和39个标签。所有属性都是双精度类型(大多数是0或1,因为我对分类属性进行了虚拟编码),类标签原本是不同的字符串,后来我将其转换为因子,现在是整数类型。
model=svm(Category~.,data=train1,scale=FALSE)p1=predict(model,test1,"prob")
这是我在使用SVM训练模型后得到的结果。
Call:svm(formula = Category ~ ., data = train1, scale = FALSE)Parameters: SVM-Type: C-classification SVM-Kernel: radial cost: 1 gamma: 0.02564103 Number of Support Vectors: 2230
我使用了预测函数
Error in predict.svm(model, test1, "prob") : NAs in foreign function call (arg 1)In addition: Warning message:In predict.svm(model, test1, "prob") : NAs introduced by coercion
我不明白为什么会出现这个错误,我检查了训练数据的所有属性,它们都没有NA值。请帮助我解决这个问题。谢谢
回答:
我假设你使用的是e1071
包(你没有指定使用哪个包,据我所知没有名为svm
的包)。
错误信息令人困惑,但问题是你将”prob”作为第三个参数传递,而函数期望一个布尔值。试试这样做:
require(e1071)model=svm(Category~.,data=train1, scale=FALSE, probability=TRUE)p1=predict(model,test1, probability = TRUE)head(attr(p1, "probabilities"))
这是我得到的输出样本。
WARRANTS OTHER OFFENSES LARCENY/THEFT VEHICLE THEFT VANDALISM NON-CRIMINAL ROBBERY ASSAULT WEAPON LAWS BURGLARY1 0.04809877 0.1749634 0.2649921 0.02899535 0.03548131 0.1276913 0.02498949 0.08322866 0.01097913 0.03800846 SUSPICIOUS OCC DRUNKENNESS FORGERY/COUNTERFEITING DRUG/NARCOTIC STOLEN PROPERTY SECONDARY CODES TRESPASS MISSING PERSON1 0.03255891 0.003790755 0.006249521 0.01944938 0.004843043 0.01305858 0.009727582 0.01840337 FRAUD KIDNAPPING RUNAWAY DRIVING UNDER THE INFLUENCE SEX OFFENSES FORCIBLE PROSTITUTION DISORDERLY CONDUCT ARSON1 0.01884472 0.006089563 0.001378799 0.003289503 0.01071418 0.004562048 0.003107619 0.002124643 FAMILY OFFENSES LIQUOR LAWS BRIBERY EMBEZZLEMENT SUICIDE1 0.0004787845 0.001669914 0.0007471968 0.0007465053 0.0007374036
希望这对你有帮助。