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

如何在Python多分类场景下获取模型预测结果的概率及解决Random Forest分类器相关报错

嘿,我来帮你搞定这个问题,咱们一步步拆解:

核心需求:获取单个预测结果的百分比概率

首先你用predict_proba的方式完全错了——它要接收的是特征数据(和predict的输入格式完全一致),而不是predict输出的类别结果。下面是实现你需求的正确代码:

# 你的单样本特征输入
sample_features = [[22,8,50,9,20,47,50,38,0,0,0]]

# 1. 获取模型预测的疾病类别
predicted_disease = pickle_model.predict(sample_features)[0]  # 取[0]是因为输入是单样本,返回的是数组

# 2. 获取所有疾病类别的预测概率
all_probs = pickle_model.predict_proba(sample_features)[0]  # 同样取[0]对应单样本的概率数组

# 3. 把类别和概率对应起来,转成百分比
class_names = pickle_model.classes_  # 模型训练时的所有类别名称
disease_prob_map = dict(zip(class_names, all_probs))
predicted_prob_percent = disease_prob_map[predicted_disease] * 100

# 输出你想要的格式
print(f"{predicted_disease}疾病的预测概率为{predicted_prob_percent:.1f}%")

这样就能直接得到类似Allergy疾病的预测概率为90%的输出了。

解决你遇到的两个报错问题

咱们来逐个看你代码里的错误原因:

错误1:accuracy_score的样本数不一致

你定义的actual是特征数组(np.array((22,8,50,9,20,47,50,38,0,0,0)),长度11),而p是模型输出的疾病类别标签(长度1)——这俩完全不是同一类数据!

accuracy_score需要的是真实的疾病类别标签和预测的疾病类别标签,比如如果这个样本的真实疾病是Allergy,你应该把actual定义为np.array(["Allergy"]),而不是特征值。

错误2:混淆矩阵的多分类目标错误

同样的问题:你传给confusion_matrix的actual是特征数组(不是真实类别),predict是预测类别,sklearn根本搞不清这俩的目标类型,所以报错“multiclass and unknown targets”。

另外补充一点:tn, fp, fn, tp = ...ravel()只适用于二分类问题,你的疾病预测是多分类(多个疾病类别),这种拆分方式完全不适用,别再这么用啦。

完整的模型评估示例(如果需要)

如果你要做模型整体评估,假设你有测试集的特征和真实类别,正确的代码应该是这样:

from sklearn.metrics import accuracy_score

# 假设你有测试集数据(特征+真实疾病标签)
X_test = [
    [22,8,50,9,20,47,50,38,0,0,0],
    [18, 6, 45, 7, 15, 40, 45, 35, 1, 0, 0]  # 另一个样本的特征
]
y_test = ["Allergy", "Cold"]  # 对应样本的真实疾病

# 获取所有测试样本的预测结果和概率
y_pred = pickle_model.predict(X_test)
y_pred_probs = pickle_model.predict_proba(X_test)

# 计算模型准确率(这时候y_test和y_pred都是类别标签,维度一致)
print(f"模型整体准确率:{accuracy_score(y_test, y_pred):.2f}")

# 逐个输出每个样本的预测详情
for idx, (true_disease, pred_disease, probs) in enumerate(zip(y_test, y_pred, y_pred_probs)):
    # 找到预测类别的概率并转百分比
    pred_prob = probs[list(class_names).index(pred_disease)] * 100
    print(f"\n样本{idx+1}:")
    print(f"真实疾病:{true_disease}")
    print(f"预测疾病:{pred_disease},预测概率:{pred_prob:.1f}%")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:52:51