You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PySpark中GBTClassifier绘制ROC曲线的summary属性报错?

解决GBTClassifier绘制ROC曲线时的AttributeError问题

你遇到的AttributeError: 'PipelineModel' object has no attribute 'summary'是因为PipelineModel本身没有summary属性——这个属性是LogisticRegressionModel这类单一分类模型才有的,而你用Pipeline封装了整个预处理和建模流程,返回的是PipelineModel,自然调用不了summary。

要给GBTClassifier绘制ROC曲线,我们需要先通过Pipeline生成预测结果,再用Spark的BinaryClassificationMetrics计算ROC的FPR(假阳性率)和TPR(真阳性率)数据,最后用Matplotlib绘图。下面是修正后的完整流程:

步骤1:保留原有的模型训练代码

你的predictions函数逻辑没问题,继续用它训练PipelineModel:

gbt_model = predictions(train_df = train_df, target_col = 'income')

步骤2:对测试集生成预测结果

用训练好的PipelineModel对测试集进行预测,得到包含概率和标签的结果:

# 生成测试集预测结果,包含probability(概率列)和label(标签列)
predictions_df = gbt_model.transform(test_df)

步骤3:用BinaryClassificationMetrics计算ROC数据

Spark的BinaryClassificationMetrics需要输入(score, label)格式的RDD,其中score是正类的概率值,label是索引后的目标标签:

from pyspark.mllib.evaluation import BinaryClassificationMetrics

# 提取正类概率(probability[1]表示第二个类别,即索引后的正类)和标签,转换为RDD
score_and_label = predictions_df.select("probability", "label").rdd.map(lambda row: (row.probability[1], row.label))

# 初始化指标对象
metrics = BinaryClassificationMetrics(score_and_label)

# 获取ROC曲线的所有点(FPR和TPR)
roc_points = metrics.roc().collect()

步骤4:转换数据并绘制ROC曲线

把ROC数据转换成Pandas DataFrame,方便用Matplotlib绘图:

import pandas as pd
import matplotlib.pyplot as plt

# 转换为Pandas DataFrame
roc_df = pd.DataFrame(roc_points, columns=["FPR", "TPR"])

# 绘制ROC曲线
plt.figure(figsize=(5,5))
plt.plot([0, 1], [0, 1], 'r--', label='Random Guess')
plt.plot(roc_df["FPR"], roc_df["TPR"], label='GBT Classifier')
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.title('ROC Curve for GBT Classifier')
plt.legend()
plt.show()

额外说明

如果需要单独查看GBT模型的细节(比如特征重要性),可以从PipelineModel中提取出训练好的GBT模型:

gbt_trained = gbt_model.stages[-1]
# 打印特征重要性
print(gbt_trained.featureImportances)

内容的提问来源于stack exchange,提问作者Gun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:27:48