RandomForestClassifier 获得前 N 个预测和相应的概率

Posted

技术标签:

【中文标题】RandomForestClassifier 获得前 N 个预测和相应的概率【英文标题】:RandomForestClassifier Get Top N Predictions and Respective Probabilities 【发布时间】:2020-11-17 05:43:55 【问题描述】:

我有一个随机森林模型 model,并且已经能够使用

获得每个条目的前 3 个预测

predictions = model.classes_[numpy.argsort(model.predict_proba(params_only))[:, :-3 - 1:-1]]

但是,我还想要一个与每个预测相关的概率 NUMBERS 的类似列表。上面的代码只输出标签,但我还需要概率数。

最终目标是获取 top1、top2 和 top3 预测以及 top1prob、top2prob 和 top3prob 列表的列表,以便我可以将其输入 pandas 数据框。我已经完成了第一部分

prediction1 = [preds[0] for preds in predictions]
prediction2 = [preds[1] for preds in predictions]
prediction3 = [preds[2] for preds in predictions]

如果我不够清楚和/或您有任何问题,请询问他们!谢谢!

注意:我目前的解决方案是

guesses = model.predict_proba(df[PARAM_LIST])
probabilities = [sorted(probas, reverse=True)[:num_preds] for probas in guesses]

但我不能 100% 确定这是否准确地满足了我的需求,或者是否有更好的策略。

【问题讨论】:

你能举个例子吗? 【参考方案1】:
probs = model.predict_proba(params_only)
predictions = model.classes_[np.argsort(probs)[:, :-3 - 1:-1]]
assert len(probs) == len(predictions)
prediction1 = [preds[0] for preds in predictions]
prediction2 = [preds[1] for preds in predictions]
prediction3 = [preds[2] for preds in predictions]
top1prob = [ probs[i][prediction1[i]] for i in range(len(predictions))]
top2prob = [ probs[i][prediction2[i]] for i in range(len(predictions))] 
top3prob = [ probs[i][prediction3[i]] for i in range(len(predictions))]

我试图让它与您的代码相似。它可以在更少的行中完成。

根据你的回答,

guesses = model.predict_proba(df[PARAM_LIST])
probabilities = [sorted(probas, reverse=True)[:num_preds] for probas in guesses]

这也可以。因为对于每个条目,numpy.argsort() 都是按降序对标签进行排序,与 sorted(probas, reverse=True) 相同

【讨论】:

以上是关于RandomForestClassifier 获得前 N 个预测和相应的概率的主要内容,如果未能解决你的问题,请参考以下文章

解释来自 RandomForestClassifier 的特征重要性值

Scikit-learn RandomForestClassifier() 特征选择,只选择训练集?

RandomForestClassifier 与 BaggingClassifier 不同

RandomForestClassifier 导入

如何将 RandomForestClassifier 与字符串数据一起使用

RandomForestClassifier 性能不佳