随机森林分类器概率只取值为0, 0.1, 0.2... 1

4 投票
1 回答
3461 浏览
提问于 2025-04-17 13:49

我正在尝试使用随机森林来对我的数据进行分类,但当我生成分类器的概率时,结果总是像0、0.1、0.2……1这样的值,精确到小数点后五位。这是统计问题还是软件问题?我在Mac 10.7.5上使用的是Python 2.7.3中的scikit-learn库里的RandomForestClassifier。我的数据大致如下:

y   x1   x2   x3   x4...
0   23   4    0
1   102  2    0
1   12   17   1

我的响应变量y是二元的。总共有15个特征,都是实数或整数值,其中一些是二元的。我大约有2000个训练样本和500个测试样本。我把树的数量设置为500,每棵树尝试的特征数量设置为8,其他设置都用默认值。训练完模型后,我使用“predict_proba”函数生成概率,结果像0.90000000000000002或0.10000000000000001这样的值。

我以为这个问题可能是由某个特定变量引起的,所以我尝试逐个变量训练模型,重复了五个变量。每个变量单独的概率值正常,比如0.5532。当我一起使用两个变量时,开始出现一些0.70000等的值。当我使用更多变量时,0.700000类型的值的比例变得更大。

这是统计问题还是软件问题?Numpy的测试通过了:numpy.test(),但scipy.test()和sklearn.test()都失败了。我以前使用过scikit-learn包,测试失败但没有出现这个问题。此外,我知道我应该修复这些包,但我花了20个小时从源代码安装,然后是二进制包,还阅读了30多页关于其他人如何安装或遇到的错误的网页。当他们说安装很简单时,我并没有看到他们测试这些包。谢谢。

1 个回答

8

sklearn的决策森林默认会建立10棵树。看起来你可能没有正确地更改这个设置,因为如果森林里正好有10棵树,输出结果就会是这样的(概率是给出类别1的树的比例,所以值会是0、0.1、0.2,一直到1)。

你能检查一下设置的参数,看看它是否真的在建立500棵树吗?

>>> import sklearn.ensemble
>>> rf = sklearn.ensemble.RandomForestRegressor()
>>> rf.n_estimators
10
>>> rf = sklearn.ensemble.RandomForestRegressor(n_estimators=500)
>>> rf.n_estimators
500

撰写回答