Spark ML Ошибка: Неверно нет. классов, обнаруженных при использовании Linear SVC - PullRequest
0 голосов
/ 04 сентября 2018

Я работаю над проблемой двоичной классификации и использую 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 класса, но я получаю сообщение об ошибке, сообщающее, что обнаружено больше классов. Не совсем уверен, что вызывает это исключение.
Любая помощь очень ценится!

Error : -

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

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

У меня такая же проблема.

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 "), это работает. Возможно, в LeanerSVM есть какая-то ошибка в случае опции StringIndexer "keep".

0 голосов
/ 05 сентября 2018

вы можете попытаться преобразовать значение вашей метки в категориальные данные, используя OnehotEncoder с параметром handleInvalid, который будет "keep"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...