多分类逻辑回归预测概率解读及全类别概率获取问询
多分类逻辑回归概率输出问题解答
关于概率值的含义
先直接给你明确答案:
- 问题1:不是,0.35并不是样本属于类别1的概率。
- 问题2:这个0.35就是第一个样本属于类别3的概率——因为你的
Predicted列显示该样本被预测为类别3,看起来你这里的Probablity列提取的是每个样本对应预测类别的概率值。
背后的逻辑是这样的:在Scikit-learn的多分类LogisticRegression模型中,predict_proba()方法会返回一个完整的概率矩阵,每一行对应一个样本,每一列对应一个类别的概率。列的顺序是由模型的classes_属性决定的,比如你可以打印clf.classes_(假设你的模型变量是clf),会得到所有类别按升序排列的结果,比如array([1,2,3]),这时候矩阵的第一列是类别1的概率,第二列是类别2,第三列是类别3。而你现在表格里的Probablity列,应该是从这个完整矩阵里提取了每个样本预测类别对应的那个概率值。
如何生成包含所有类别概率的结果格式
要得到你想要的P_1、P_2、P_3列的格式,只需要利用模型的predict_proba()方法获取完整概率矩阵,再和原数据合并即可,具体代码示例如下:
import pandas as pd # 假设你已经有测试特征数据X_test,真实标签y_test,训练好的模型clf # 获取预测类别 y_pred = clf.predict(X_test) # 获取完整的概率矩阵(每行对应一个样本,每列对应一个类别的概率) full_probs = clf.predict_proba(X_test) # 将原特征数据转为DataFrame result_df = pd.DataFrame(X_test, columns=['A', 'B', 'C', 'D', 'E']) # 添加真实标签和预测类别列 result_df['T'] = y_test result_df['Predicted'] = y_pred # 根据模型的类别顺序,添加每个类别的概率列 class_order = clf.classes_ for idx, cls in enumerate(class_order): result_df[f'P_{cls}'] = full_probs[:, idx] # 查看最终结果 print(result_df)
运行这段代码后,你就能得到和你示例中完全一致的格式,每一行都会包含样本的特征、真实标签、预测类别,以及属于每个类别的概率值。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

