Невозможно тренировать модель с XgBoost - PySpark - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь обучить модель XgBoost с помощью Spark DataFrame, который выглядит следующим образом:

+--------------------+-------------------+
|            features|         TARGET_VAL|
+--------------------+-------------------+
|(122,[0,1,9,10,11...|                0.0|
|(122,[0,1,8,9,11,...| 14.577420000000002|
|[4.0,1.0,0.0,0.0,...|           65.44524|
|(122,[0,1,8,9,11,...|                0.0|
|(122,[0,1,8,9,10,...|           18.27017|
|(122,[0,1,8,11,12...|                0.0|
|(122,[0,1,8,10,11...|           75.75954|
|(122,[0,1,10,11,1...|           65.32013|
|[1.0,0.0,1.0,0.0,...|          171.16563|
|(122,[0,1,8,11,12...|                0.0|
|(122,[0,1,8,9,11,...|                0.0|
|(122,[0,1,8,10,11...|            2.27041|
|(122,[0,1,11,12,2...|                0.0|
|[4.0,1.0,0.0,0.0,...|           76.08024|
|(122,[0,1,8,9,11,...|                0.0|
|(122,[0,1,8,10,11...|           15.31895|
|(122,[0,1,8,10,11...|          122.56702|
|(122,[0,1,8,10,11...|-30.268179999999997|
|(122,[0,1,8,10,11...|                0.0|
|(122,[0,1,10,11,4...|          136.80025|
+--------------------+-------------------+

Я использую sparkxgb (XgBoost с PySpark) и обучаю модель следующим образом:

paramMap = {'eta': 0.1, 'subsample': 0.8}

xgbClassifier = XGBoostClassifier(**paramMap) \
    .setFeaturesCol("features") \
    .setLabelCol("TARGET_VAL")

Когда я тренирую модель с:

xgboostModel = xgbClassifier.fit(df)

Я получаю следующую ошибку:

java.lang.IllegalArgumentException: requirement failed: Classifier found max label value = 23470.00821 but requires integers in range [0, ... 2147483647)

Итак, я разыграю TARGET_VALВ столбце int и после этого я получаю следующую ошибку:

java.lang.IllegalArgumentException: requirement failed: Classifier inferred 23471 from label values in column XGBoostClassifier_37d67e9f2233__labelCol, but this exceeded the max numClasses (100) allowed to be inferred from values.  To avoid this error for labels with > 100 classes, specify numClasses explicitly in the metadata; this can be done by applying StringIndexer to the label column.

Я новичок в XgBoost и Machine Learning. Я думаю, что TARGET_VAL - это столбец, который обученная модель будет прогнозировать для тестового набора данных, и он должен быть значением с плавающей запятой. Итак, что я делаю не так? Нужно ли настраивать модель с другими параметрами?

1 Ответ

0 голосов
/ 17 октября 2019

Проблема здесь в том, что, поскольку TARGET_VAL является столбцом с непрерывной переменной, а XGBoostClassifier ожидает столбец с дискретной / категориальной переменной. Есть слишком много классов для классификатора. Как вы видите в ошибке, max numClasses равно 100, и я уверен, что у вас более 100 чисел.

Вы используете алгоритм классификации для задачи регрессии.

Непрерывные и дискретные переменные - Wiki

...