2016-12-02 43 views
0

当我尝试Apache Spark SVM的多类分类问题时,出现以下错误。有人可以解释我是否有办法做到SVM多元分类使用Apache星火MLlib我可以使用apache spark支持向量机做多类分类吗?

Exception in thread "main" org.apache.spark.SparkException: Input validation failed. 
    at org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:251) 
    at org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:229) 
    at org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:219) 
    at org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:255) 
    at org.apache.spark.mllib.classification.SVMWithSGD.train(SVM.scala) 
    at SVMClass.main(SVMClass.java:31) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

回答

2

不是每个ML算法可以处理开箱即用的多类问题。如果是这样的话,你总是可以使用one vs. rest策略。 Wiki文章解释了哪些算法对多类别具有“自然”扩展。

如果您检查Spark docs,您会注意到SVM在二进制下被提及。 SVM算法需要扩展来处理多个类,显然MLlib中可能没有实现(从文档判断)。你可以通过提到的OvR策略来解决这个问题,但是你的表现不会很好。多层感知器是一个有趣的选择,因为它也可以提供属于给定类别的概率。

相关问题