Spark ML错误:不正确。使用线性SVC时检测到的类数

时间:2018-09-04 16:14:39

标签: machine-learning pyspark classification svm apache-spark-ml

我正在研究二进制分类问题,并使用SparkML,我使用随机森林和逻辑回归模型训练和评估了我的数据,现在我想检查SVM对我的数据进行分类的程度。

我的训练数据摘要 :-

+----------+------+
|  spam    | count|
+----------+------+
|        No|197378|
|       Yes|  7652|
+----------+------+

Note:- My dependent variable: 'spam': string (nullable = true)

+-----+------+
|label| count|
+-----+------+
|  0.0|197488|
|  1.0|  7650|
+-----+------+

Note:- label: double (nullable = false)

更新至我的问题:-

trainingData.select('label').distinct().show()
+-----+
|label|
+-----+
|  0.0|
|  1.0|
+-----+

因此,我使用以下代码使用 线性SVC :-

 pyspark.ml.classification import LinearSVC
 lsvc = LinearSVC()
 # Fit the model
 lsvcModel = lsvc.fit(trainingData)

在我的数据框中,标签和因变量只有2个类,但是我收到一条错误消息,指出可以检测到更多类。不太确定是什么导致了此异常。
任何帮助深表感谢!

错误 :-

IllegalArgumentException: u'requirement failed: LinearSVC only supports 
binary classification. 3 classes detected in 
LinearSVC_4240bb949b9fad486ec0__labelCol'

2 个答案:

答案 0 :(得分:0)

您可以尝试使用带有OnehotEncoder参数的handleInvalid将标签值转换为类别数据

答案 1 :(得分:0)

我有同样的问题。

scala> TEST_DF_37849c70_7cd3_4fd6_a9a0_df4de727df25.select("si_37849c70_7cd3_4fd6_a9a0_df4de727df25_logicProp1_lable_left").distinct.show
+-------------------------------------------------------------+
|si_37849c70_7cd3_4fd6_a9a0_df4de727df25_logicProp1_lable_left|
+-------------------------------------------------------------+
|                                                          0.0|
|                                                          1.0|
+-------------------------------------------------------------+

错误:要求失败:LinearSVC仅支持二进制分类。在linearsvc_d18a38204551__labelCol

中检测到3个类别

但是在我的情况下,将StringIndexer与setHandleInvalid(“ skip ”)选项一起使用,就可以了。 如果使用StringIndexer“保持”选项,则LeanerSVM可能存在一些错误。