CatBoostClassifier多分类中获取和为1的依赖型概率的问题求助
解决CatBoost OneVsAll模式下概率总和不为1的问题
- 原因:当你用
loss_function: 'MultiClassOneVsAll'训练模型时,get_proba返回的是每个类别单独做二分类(One-vs-Rest)得到的概率,这些概率是相互独立的二分类结果,所以总和自然不会等于1。 - 解决方法:对每个样本的概率列表做归一化处理——把每个概率值除以该样本所有概率的总和,处理后所有类别的概率加起来就等于1了。
给你个Python代码示例:
import pandas as pd import numpy as np # 假设probs是get_proba返回的概率数组,形状为(样本数, 类别数) probs = model.get_proba(X_test) # 执行归一化,得到总和为1的依赖型概率 normalized_probs = probs / probs.sum(axis=1, keepdims=True) # 转成DataFrame并导出到Excel df = pd.DataFrame(normalized_probs, columns=[f"class_{i}" for i in range(probs.shape[1])]) df.to_excel("normalized_probs.xlsx", index=False)
- 额外提示:如果不想手动处理,也可以直接把损失函数改成
'MultiClass'(CatBoost默认的多分类模式),这种模式下get_proba会直接返回归一化后的联合概率,不用再做额外操作。
内容的提问来源于stack exchange,提问作者Master_Sniffer
相关产品推荐
相关产品推荐

