Spark ML 错误:编号不正确。使用线性 SVC 时检测到的类
Posted
技术标签:
【中文标题】Spark ML 错误:编号不正确。使用线性 SVC 时检测到的类【英文标题】:Spark ML Error: Incorrect no. of classes detected while using Linear SVC 【发布时间】:2019-02-09 17:27:19 【问题描述】:我正在研究一个二元分类问题并使用 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|
+-----+
所以,我使用下面的代码来使用 Linear 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'
【问题讨论】:
您能运行trainingData.select('label').distinct().show()
并发布结果吗?
好的,你的 Spark 版本是多少?
sc.version
2.3.0.2.6.5.0-292
【参考方案1】:
我也有同样的问题。
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 个类
但在我的情况下,使用带有 setHandleInvalid("skip") 选项的 StringIndexer,它可以工作。 在 StringIndexer “keep”选项的情况下,LeanerSVM 可能存在一些错误。
【讨论】:
【参考方案2】:您可以尝试使用OnehotEncoder
将标签值转换为分类数据,并将handleInvalid
参数设置为“keep”
【讨论】:
labelIndexer = StringIndexer(inputCol="spam", outputCol="label").setHandleInvalid("keep")
。我认为这里与转换无关,因为在将数据拆分为训练和测试之前已经完成了转换!以上是关于Spark ML 错误:编号不正确。使用线性 SVC 时检测到的类的主要内容,如果未能解决你的问题,请参考以下文章
PySpark ML:LinearSVC 的 OnevsRest 策略
我通过使用它的 pyspark.ml.regression.LinearRegression 在 spark 中创建一个模型