RandomForestClassifier 获得前 N 个预测和相应的概率
Posted
技术标签:
【中文标题】RandomForestClassifier 获得前 N 个预测和相应的概率【英文标题】:RandomForestClassifier Get Top N Predictions and Respective Probabilities 【发布时间】:2020-11-17 05:43:55 【问题描述】:我有一个随机森林模型 model
,并且已经能够使用
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 不同