randomForestClassifier(sklearn)的predict_proba(X)似乎是静态的?

时间:2016-07-30 10:17:36

标签: python scikit-learn classification probability random-forest

对于所有课程,我想要检索给定样本的预测分数/概率。我正在使用sklearn的RandomForestClassifier。如果我使用.predict(),我的代码运行正常。但是,为了显示我正在使用.predict_proba(X)的概率,它始终返回相同的值,即使在X更改时也是如此。为什么会如此以及如何解决?

我正在将我的代码分解为相关部分:

# ... code ... feature generation / gets the feature data
if rf is None:
    rf = RandomForestClassifier(n_estimators=80)
    rf.fit(featureData, classes)
else:
    prediction = rf.predict(featureData) # gets the right class / always different
    proba = rf.predict_proba(featureData) 
    print proba # this prints always the same values for all my 40 classes

有趣的是max(proba)检索.predict()在第一次运行中返回的类。由于.predict()正在按预期工作,我认为错误是在sklearn方面,即我猜有一个需要设置的标志。

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

我想问题是你总是将同一个参数传递给predict_proba。这是我从虹膜数据集构建树林的代码:

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
iris = datasets.load_iris()
X = iris.data
y = iris.target
rf = RandomForestClassifier(n_estimators=80)
rf.fit(X, y)

当我调用方法predictpredict_proba时,不同参数的类和类对数概率预测也是不同的,正如人们可以合理预期的那样。

示例运行:

In [82]: a, b = X[:3], X[-3:]

In [83]: a
Out[83]: 
array([[ 5.1,  3.5,  1.4,  0.2],
       [ 4.9,  3. ,  1.4,  0.2],
       [ 4.7,  3.2,  1.3,  0.2]])

In [84]: b
Out[84]: 
array([[ 6.5,  3. ,  5.2,  2. ],
       [ 6.2,  3.4,  5.4,  2.3],
       [ 5.9,  3. ,  5.1,  1.8]])

In [85]: rf.predict(a)
Out[85]: array([0, 0, 0])

In [86]: rf.predict(b)
Out[86]: array([2, 2, 2])

In [87]: rf.predict_proba(a)
Out[87]: 
array([[ 1.,  0.,  0.],
       [ 1.,  0.,  0.],
       [ 1.,  0.,  0.]])

In [88]: rf.predict_proba(b)
Out[88]: 
array([[ 0.    ,  0.    ,  1.    ],
       [ 0.    ,  0.0125,  0.9875],
       [ 0.    ,  0.0375,  0.9625]])