【问题标题】:RandomForestClassifier Get Top N Predictions and Respective ProbabilitiesRandomForestClassifier 获得前 N 个预测和相应的概率
【发布时间】: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% 确定这是否准确地满足了我的需求,或者是否有更好的策略。

【问题讨论】:

  • 你能举个例子吗?

标签: python python-3.x pandas scikit-learn random-forest


【解决方案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) 相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2015-01-10
    • 2015-09-21
    • 2020-08-25
    • 2023-03-24
    • 2019-06-16
    • 2019-10-19
    • 2016-05-23
    相关资源
    最近更新 更多