Ошибка типа при перекрестной проверке искры с помощью BinaryClassificationEvaluator - PullRequest
0 голосов
/ 28 апреля 2019

Я использую проверку перекрестного искрообразования для настройки параметров явной модели ALS. Для вычисления AUC используется BinaryClassificationEvaluator с metricName = 'areaUnderROC'. Но это пошло ошибка. Мой код выглядит следующим образом:

alsExplicit = ALS(  
        implicitPrefs=is_implicit,
        numItemBlocks=100,
        numUserBlocks=100,
        userCol='device_id',
        itemCol='item_id',
        ratingCol='rating',
    )
paramMapExplicit = ParamGridBuilder() \
        .addGrid(alsExplicit.rank, [30, 40]) \
        .addGrid(alsExplicit.maxIter, [10, 15]) \
        .addGrid(alsExplicit.regParam, [0.01, 0.1]) \
        .build()
evaluator_AUC = BinaryClassificationEvaluator(
        labelCol='rating',
        rawPredictionCol='prediction',
        metricName='areaUnderROC'
    )
cvExplicit = CrossValidator(estimator=alsExplicit, estimatorParamMaps=paramMapExplicit, evaluator=evaluator_AUC, numFolds=5) 
cvModelExplicit = cvExplicit.fit(train_data) # This lines goes Error

Ошибка:

pyspark.sql.utils.IllegalArgumentException: u'requirement failed: Column prediction must be of type equal to one of the following types: [DoubleType, org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7] but was actually of type FloatType.'

Когда я меняю оценщик на RegressionEvaluator, он работает хорошо, как показано ниже:

evaluator_RMSE = RegressionEvaluator(
        metricName='rmse',
        labelCol='rating',
        predictionCol='prediction'
    )

И, если я обучаю одну модель с фиксированными параметрами, преобразую тестовые данные с моделью, а затем вычисляю AUC с помощью BinaryClassificationEvaluator, то тоже самое пошло не так.

model = als.fit(train_data)
pred = model.transform(test_data)
auc = evaluator_AUC.evaluate(pred)

Затем я попытался изменить тип вручную:

pred = pred.withColumn('prediction', pred['prediction'].cast(DoubleType()))
auc = evaluator_AUC.evaluate(pred)

Этот способ работает.

Однако при использовании перекрестной проверки я не могу изменить тип данных. Что мне делать?

...