Ошибка Pyspark: «Поле rawPrediction не существует» при использовании перекрестной проверки - PullRequest
0 голосов
/ 23 ноября 2018

Я пытался использовать CrossValidator в моих тренировочных данных, но я всегда получаю сообщение об ошибке:

"An error occurred while calling o80267.evaluate.
: java.lang.IllegalArgumentException: Field "rawPrediction" does not exist.
Available fields: label, features, CrossValidator_6a7bb791f63f_rand, features_scaled, prediction"

Это код:

df = spark.createDataFrame(input_data, ["label", "features"])

train_data, test_data = df.randomSplit([.8,.2],seed=1234)
train_data.show()

standardScaler = StandardScaler(inputCol="features", outputCol="features_scaled")
lr = LinearRegression(maxIter=10)

pipeline = Pipeline(stages=[standardScaler, lr])

paramGrid = ParamGridBuilder()\
    .addGrid(lr.regParam, [0.3, 0.1, 0.01])\
    .addGrid(lr.fitIntercept, [False, True])\
    .addGrid(lr.elasticNetParam, [0.0, 0.5, 0.8, 1.0])\
    .build()


crossval = CrossValidator(estimator=pipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=BinaryClassificationEvaluator(),
                          numFolds=2)


cvModel = crossval.fit(train_data)

Когдапри использовании train_data.show() (в третьей строке) вывод будет следующим:

    +-----+--------------------+
    |label|            features|
    +-----+--------------------+
    |4.526|[129.0,322.0,126....|
    |3.585|[1106.0,2401.0,11...|
    |3.521|[190.0,496.0,177....|
    |3.413|[235.0,558.0,219....|
    |3.422|[280.0,565.0,259....|
    |2.697|[213.0,413.0,193....|
    |2.992|[489.0,1094.0,514...|
    |2.414|[687.0,1157.0,647...|
    |2.267|[665.0,1206.0,595...|
    |2.611|[707.0,1551.0,714...|
    |2.815|[434.0,910.0,402....|
    |2.418|[752.0,1504.0,734...|
    |2.135|[474.0,1098.0,468...|
    |1.913|[191.0,345.0,174....|
    |1.592|[626.0,1212.0,620...|
    |  1.4|[283.0,697.0,264....|
    |1.525|[347.0,793.0,331....|
    |1.555|[293.0,648.0,303....|
    |1.587|[455.0,990.0,419....|
    |1.629|[298.0,690.0,275....|
    +-----+--------------------+

Я искал rawPrediction вверх, но, по крайней мере, насколько я понимаю, этот столбец добавляется только после преобразованияданные испытаний DF.Итак, что я сделал не так и почему я получаю эту ошибку?Я неправильно назвал некоторые столбцы?Я также переименовал scaled_features в features, но это, очевидно, не помогло.

1 Ответ

0 голосов
/ 23 ноября 2018

Вы ошибочно используете BinaryClassificationEvaluator в задаче регрессии, и поскольку rawPrediction используется только для моделей классификации, но не для моделей регрессии, ваш оценщик ищет столбец rawPrediction, не находит его и возвращаетошибка.

Измените свой перекрестный валидатор следующим образом:

from pyspark.ml.evaluation import RegressionEvaluator

crossval = CrossValidator(estimator=pipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=RegressionEvaluator(),
                          numFolds=2)

и все будет в порядке.

h / t на @ user6910411 для (теперь удаленного) комментария...

...