我在使用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)
这将产生如下输出:
预期输出如下所示:
我的第二个问题是predict_proba
函数在具有多个类的随机林分类器上的可靠性。它真的给出了正确的比率吗?我有一个类间不平衡的数据集。如果没有,是否有更好的选择或解决此问题的方法
谢谢你的帮助
我已经通过如下编辑get_predict_proba函数解决了这个问题:
我仍然需要关于predict_proba的更深入的信息,以及它如何在具有不平衡类的多类分类器上工作。如果有更有效的方法来解决这个问题,我很乐意看到。谢谢
预测值的第一个“预测概率”
predict_proba
返回和数组,其中包含您拥有的每个类的概率,如您所说。当然,此数组的最大值或最大值将对应于预测的类。因此,简单的解决方案是返回predict_proba
数组的最大值:第二个问题:不平衡班级中的“预测概率”
作为定义,
predict_proba
是“输入样本的预测类概率计算为森林中树木的平均预测类概率。单个树木的类概率是树叶中同一类样本的分数”这意味着您正在评估随机森林中每棵树的预测,并由此获得一个概率。如果您的随机林在不平衡类中表现良好,那么这是一个很好的方法
总而言之,我将重点获得一个好的随机林模型,如果它能很好地处理不平衡的类,那么
predict_proba
将具有代表性。如果随机林不够好,您将不得不使用一些技术来解决不平衡类的问题(例如过采样或欠采样)相关问题 更多 >
编程相关推荐