我正在研究二进制分类问题,并使用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'
答案 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可能存在一些错误。