在sklearn的RandomForestClassifier中设置随机状态会偏向您的模型吗?

时间:2019-03-08 20:58:53

标签: random scikit-learn random-forest random-seed

我正在训练随机森林模型,并使用一致的random_state值。我在培训,测试和验证数据集中也获得了非常好的准确性(所有数据都在〜.98左右)。尽管少数派仅占数据集的约10%。

如果您有兴趣的话,这里有一些代码:

model = RandomForestClassifier(n_jobs=-1, oob_score=True, random_state=310, n_estimators=300)
model.fit(subset, train.iloc[:,-1])

鉴于在训练,验证和测试数据集上的良好准确性得分,random_state是否会影响模型的泛化?

3 个答案:

答案 0 :(得分:1)

  

random_state:int,RandomState实例或无,可选(默认=无)

     

如果为int,则random_state是随机数生成器使用的种子;否则为false。如果是RandomState实例,则random_state是随机数生成器;如果为None,则随机数生成器是np.random使用的RandomState实例。

通常,random_state最初用于设置内部参数,因此您可以确定地重复训练。现在,您可以更改其他超参数(例如,树的数量)以比较结果。

一个缺点是您找不到全局最优值。但是您的结果听起来确实不错,准确度为0.98

答案 1 :(得分:1)

random_state不会影响模型的概括。实际上,在调整random_staten_estimators等超级参数时,最好的做法是使depth具有相同的值。这将确保您的性能不受以下因素的影响随机的初始状态。

此外,当您拥有诸如不平衡数据集之类的数据时,也不建议使用“准确性”来衡量模型的性能。

ROC或PR曲线下的面积可能是您可以使用的少数几个最好的东西之一,但是有很多可用的指标。参见here

答案 2 :(得分:1)

  

在最优性的几个方面,甚至对于简单的概念,学习最优决策树的问题都是NP完全的。因此,实用的决策树学习算法基于启发式算法(例如贪婪算法),其中在每个节点上做出局部最优决策。这样的算法不能保证返回全局最优决策树。可以通过在整体学习器中训练多棵树来缓解这种情况,在该学习器中,特征和样本通过替换随机抽样。

random_state用于子特征的随机选择,小于总特征和子样本。此参数控制随机选择。