При создании конвейера для построения модели LogisticRegression
, если гиперпараметру "Семейство" присвоено значение в виде "биномиального", процесс сборки конвейера для построения модели завершается с ошибкой:
IllegalArgumentException: 'requirement failed: Binomial family only supports 1 or 2 outcome classes but found 3.'
Сбой, даже если в зависимой переменной или метке col только 2 значения классов. Это было проверено путем отдельного запуска индексаторов и проверки отдельных значений в столбце индексированных меток. При отдельном запуске индексаторов для данных обучения столбец меток содержит только два класса. Значения в метке цв. 0,0 и 1,0
train_data.select('label').distinct().show()
+----------------------------+
|label|
+----------------------------+
| N|
| X|
+----------------------------+
featureIndexer = StringIndexer(inputCol=label, outputCol='label_stringIndexer_indexed').setHandleInvalid("keep")
train_data=featureIndexer.fit(train_data).transform(train_data)
train_data.select('label_stringIndexer_indexed').distinct().show()
+--------------------------------------------------+
|label_stringIndexer_indexed|
+--------------------------------------------------+
| 0.0|
| 1.0|
+--------------------------------------------------+
Когда вышеуказанный индексатор строк используется в конвейере для соответствия модели LogisticRegression
или DecisionTreeClassification
, при печати значения numClasses модели он печатает 3. DecisionTree
подбор модели завершается, тогда как подбор модели LogisticRegression завершается с ошибкой
IllegalArgumentException: 'требование не выполнено: биномиальное семейство поддерживает только 1 или 2 класса результата, но найдено 3.'
Однакотот же индексатор при использовании без опции «keep», значение numClasses печатается как 2, и оба DecisionTree и LogisticRegression
Model работают нормально. Было бы здорово, если бы кто-то мог предложить возможные причины такого поведения. Поведение замечено в версии 2.3.4 и ниже. Не уверен, имеет ли место то же самое в более высоких версиях spark.