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

如何验证GradientBoostingClassifier类别概率预测的准确性

验证GradientBoostingClassifier概率预测准确性的实用方法

刚好之前处理过类似的场景,当你用predict_proba()拿到模型输出的类别概率后,可以通过以下几种方法来验证这些概率的准确性和可靠性,我结合你的代码片段整理了具体实现:

1. 校准曲线(可靠性图)

这个方法能直观展示预测概率和实际类别频率的匹配程度——比如模型预测概率为0.7的样本,实际有多少比例真的属于目标类别。如果曲线越接近对角线,说明概率校准得越好。

from sklearn.calibration import calibration_curve
import matplotlib.pyplot as plt
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd

# 补全你的数据处理逻辑(基于你提供的片段)
D1 = pd.read_csv("your_dataset.csv")  # 替换为你的数据集路径
P = np.array(D1.drop(['Class'], axis=1))
q = np.array(D1['Class'])
P_train, P_test, q_train, q_test = train_test_split(P, q, test_size=0.2, random_state=42)

# 初始化并训练模型
gb_clf = GradientBoostingClassifier(criterion='friedman_mse', learning_rate=0.08, loss='deviance')
gb_clf.fit(P_train, q_train)

# 获取测试集正类的预测概率(二分类场景)
y_proba = gb_clf.predict_proba(P_test)[:, 1]

# 计算校准曲线数据
fraction_of_positives, mean_predicted_value = calibration_curve(q_test, y_proba, n_bins=10)

# 绘制校准图
plt.figure(figsize=(8, 6))
plt.plot(mean_predicted_value, fraction_of_positives, "s-", label='GradientBoosting Model')
plt.plot([0, 1], [0, 1], "k:", label="Perfectly Calibrated")
plt.xlabel("Mean Predicted Probability")
plt.ylabel("Fraction of Positive Samples")
plt.title('Calibration Plot (Reliability Curve)')
plt.legend()
plt.grid(True)
plt.show()

2. Brier得分

这是一个量化概率预测误差的指标,计算的是预测概率与实际标签的均方误差,取值范围在0到1之间,得分越低说明概率预测越准确。

from sklearn.metrics import brier_score_loss

# 计算Brier得分(二分类场景)
brier_score = brier_score_loss(q_test, y_proba)
print(f"Brier Score: {brier_score:.4f}")

3. 对数损失(Log Loss)

对数损失会重点惩罚预测错误且置信度极高的情况,同样是值越小越好,适合评估概率预测的质量。

from sklearn.metrics import log_loss

log_loss_score = log_loss(q_test, y_proba)
print(f"Log Loss: {log_loss_score:.4f}")

4. 预测概率分布直方图

通过查看不同真实标签对应的预测概率分布,能直观判断模型的概率区分能力——比如正类样本的预测概率是否集中在高值区间,负类样本集中在低值区间。

import seaborn as sns

# 合并真实标签和预测概率为DataFrame
df_proba = pd.DataFrame({
    'True Label': q_test,
    'Predicted Probability': y_proba
})

# 绘制分布直方图
plt.figure(figsize=(8, 6))
sns.histplot(data=df_proba, x='Predicted Probability', hue='True Label', kde=True, bins=15)
plt.xlabel('Predicted Probability')
plt.title('Distribution of Predicted Probabilities by True Label')
plt.show()

5. 调整概率阈值后的分类报告

虽然分类报告是评估分类结果的,但通过调整概率阈值(比如从默认的0.5改成0.6),观察精确率、召回率的变化是否符合预期,能间接验证概率预测的可靠性。

from sklearn.metrics import classification_report

# 默认阈值0.5的分类结果
y_pred_default = gb_clf.predict(P_test)
print("=== Classification Report (Threshold = 0.5) ===")
print(classification_report(q_test, y_pred_default))

# 自定义阈值0.6的分类结果
y_pred_custom = (y_proba >= 0.6).astype(int)
print("\n=== Classification Report (Threshold = 0.6) ===")
print(classification_report(q_test, y_pred_custom))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:49