PySpark逻辑回归调用areaUnderROC和pr触发AttributeError问题咨询
报错原因
- 低级变量错误:代码中直接调用
model_summary.areaUnderROC,但你从未定义过model_summary变量,正确的调用路径应为model.summary - 核心逻辑错误:你的训练任务属于多分类任务:作为标签的HSCode列包含2个以上的分类值,而
areaUnderROC、pr属性仅在二分类逻辑回归的训练结果摘要中存在,多分类场景下的LogisticRegressionTrainingSummary对象本身就不包含这两个属性。
解决方案
场景1:实际需求为二分类任务
先将作为标签的HSCode列处理为仅包含0、1两个值的二值列,再重新训练模型,即可正常调用对应属性:
# 补充定义summary变量 model_summary = model.summary # 读取AUC print("ROC曲线下面积:", model_summary.areaUnderROC) # 读取PR曲线数据 model_summary.pr.show()
场景2:实际需求为多分类任务
多分类场景下不能直接调用二分类专属属性,需使用对应评估器计算所需指标:
from pyspark.ml.evaluation import MulticlassClassificationEvaluator, BinaryClassificationEvaluator # 生成模型预测结果 pred_df = model.transform(data) # 计算多分类通用指标:准确率、F1、精确率、召回率等 multi_evaluator = MulticlassClassificationEvaluator( predictionCol="prediction", labelCol="label", metricName="f1" # 可替换为accuracy、weightedPrecision、weightedRecall等 ) f1 = multi_evaluator.evaluate(pred_df) print("多分类F1值:", f1) # 如需计算多分类AUC,可采用OVR(一对多)策略计算 auc_evaluator = BinaryClassificationEvaluator( labelCol="label", rawPredictionCol="rawPrediction", metricName="areaUnderROC" ) ovr_auc = auc_evaluator.evaluate(pred_df) print("OVR策略多分类AUC值:", ovr_auc)
内容的提问来源于stack exchange,提问作者Azman Mahyuddin
相关产品推荐
相关产品推荐

