为数据帧中的每一行获取predict_proba的最大值

2024-04-19 13:39:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用predict_proba函数时遇到问题。我有一个多类分类问题,并使用随机森林分类器。我想打印数据和相应的预测等级+该等级的预测概率。首先,我可以做一个预测

一个示例的代码

y_pred=pickle_model.predict(df_test)
y_pred_prob = pickle_model.predict_proba(df_test)
ix = y_pred_prob.argmax(1).item()
list = []
list.append(y_pred[iy])
list.append(f'{y_pred_prob[0,ix]:.2%}')

然而,当我给出一个由多于一行的项目组成的测试数据集时,我一直在挣扎。 我已经尝试了以下函数,并将其逐行应用于df。然而,我只能得到一系列的概率。无法计算如何获得每行的最大值。当只有一行时,我使用了下面的argmax

这是多样本测试数据的代码:

def get_predict_proba(row, model):
return model.predict_proba(row.values.reshape(1,-1))

df['predicted_category'] = pickle_model.predict(df)
df['confidence'] = df.apply(lambda row: get_predict_proba(row, pickle_model), axis=1)

这将产生如下输出:

^{tb1}$

预期输出如下所示:

^{tb2}$

我的第二个问题是predict_proba函数在具有多个类的随机林分类器上的可靠性。它真的给出了正确的比率吗?我有一个类间不平衡的数据集。如果没有,是否有更好的选择或解决此问题的方法

谢谢你的帮助


Tags: 数据函数代码testdfmodel分类器概率
2条回答

我已经通过如下编辑get_predict_proba函数解决了这个问题:

def get_predict_proba(row, model):
y_pred_prob=model.predict_proba(row.values.reshape(1,-1))
ix = y_pred_prob.argmax(1).item()
return (f'{y_pred_prob[0,ix]:.2%}')

我仍然需要关于predict_proba的更深入的信息,以及它如何在具有不平衡类的多类分类器上工作。如果有更有效的方法来解决这个问题,我很乐意看到。谢谢

预测值的第一个“预测概率”

predict_proba返回和数组,其中包含您拥有的每个类的概率,如您所说。当然,此数组的最大值或最大值将对应于预测的类。因此,简单的解决方案是返回predict_proba数组的最大值

def get_predict_proba(row, model):
return max(model.predict_proba(row.values.reshape(1,-1)))

第二个问题:不平衡班级中的“预测概率”

作为定义,predict_proba“输入样本的预测类概率计算为森林中树木的平均预测类概率。单个树木的类概率是树叶中同一类样本的分数”

这意味着您正在评估随机森林中每棵树的预测,并由此获得一个概率。如果您的随机林在不平衡类中表现良好,那么这是一个很好的方法

总而言之,我将重点获得一个好的随机林模型,如果它能很好地处理不平衡的类,那么predict_proba将具有代表性。如果随机林不够好,您将不得不使用一些技术来解决不平衡类的问题(例如过采样或欠采样)

相关问题 更多 >