在标记为9个类的6000个分量矢量上训练RForest之后,我尝试获得以前看不见的矢量形状的类概率:
clf = RandomForestClassifier( n_estimators = 100 )
probs = clf.predict_proba(X)
使用:
[array([[ 0.61, 0.39],
[ 0.62, 0.38],
[ 0.24, 0.76],
...,
[ 0.96, 0.04],
[ 0.49, 0.51],
[ 0.91, 0.09]]), array([[ 0.91, 0.09],
[ 0.94, 0.06],
[ 0.93, 0.07],
...,
[ 1. , 0. ],
[ 0.96, 0.04],
[ 0.99, 0.01]]), array([[ 0.95, 0.05],
[ 0.9 , 0.1 ],
[ 0.95, 0.05],
...,
结果我得到一个清单:
predict_proba
有恭维概率。有没有办法摆脱[ 0.96, 0.04]
中的赞美概率,所以这个方法的输出而不是0.96
只包含predictions = np.array(probs)
而没有自己编码?
*重大更新*
将RForest返回的概率列表转换为numpy数组后:
predictions.shape
(9, 15091, 2)
看看它的形状:
predict_proba
显示主要问题:我有9个类和15091个样本,因此WebRequest()
应该返回15091个列表,其中每个列表依次包含9个两个概率元素的列表(赞美)。相反,我得到9个列表,每个15091个元素长,其中每个元素是一个赞美概率列表。
简而言之,为什么不是:
(15091,9,2)
我明白了:
(9,15091,2)
出了什么问题?
答案 0 :(得分:1)
只需一个简单的切片即可
probs = clf.predict_proba(X)[:, 0] #0 in your case since you need the first one
答案 1 :(得分:0)
据我所知,你不能开箱即用,但为什么不扩展课程呢?
from sklearn.ensemble import RandomForestClassifier
import numpy as np
class RandomForestClassifier2(RandomForestClassifier):
def predict_proba(self,X,drop_compliment=False):
result = super().predict_proba(X)
if drop_compliment:
result = np.array([p for p,_ in result])
return result
使用示例:
# Generate some dummy data
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=4,
n_informative=2, n_redundant=0,
random_state=0, shuffle=False)
clf = RandomForestClassifier2(max_depth=2, random_state=0)
clf.fit(X, y)
您可以通过以下方式获得“默认”RandomForestClassifier
结果:
clf.predict_proba(X,drop_compliment=False)
Out[13]:
array([[ 0.88724838, 0.11275162],
[ 0.73563529, 0.26436471],
[ 0.88724838, 0.11275162],
...,
[ 0.16937022, 0.83062978],
[ 0.14297294, 0.85702706],
[ 0.14297294, 0.85702706]])
或您想要的输出:
clf.predict_proba(X,drop_compliment=True)
Out[14]:
array([ 0.88724838, 0.73563529, 0.88724838, ...
0.16937022, 0.14297294, 0.14297294])