关于通过将 random_state 值设置为整数来生成最佳决策树的困惑?

Posted

技术标签:

【中文标题】关于通过将 random_state 值设置为整数来生成最佳决策树的困惑?【英文标题】:confusion regarding generating the best decision tree by setting random_state value as an integer? 【发布时间】:2020-04-12 08:57:52 【问题描述】:

根据此处的讨论 confused about random_state in decision tree of scikit learn

因为我将我的 random_state 设置为 1,所以我确实有一致的指标,因为我每次都生成相同的树。但是当random_state设置为default-->none时,那么每次生成的不同树有不同的性能指标,有的比其他的好,有的更差。那么我们如何获得最好的指标,或者换句话说,如何找出为随机状态设置的 int 值,这将为我提供具有最佳准确性和 kappa 统计数据的树。

【问题讨论】:

【参考方案1】:

您不应优化random_state 的值。一般来说,如果您希望其他人得出与您完全相同的数字(例如重现数字等),您不希望将其分开。

让我们举一个例子来说明为什么你不应该这样做。做一个实验,在其中执行 K 折交叉验证。每次拆分都会导致不同的模型(示例中的树)。

如果我选择在此交叉验证中找到的最佳模型,我的结论将过于乐观。相反,我应该查看平均性能和波动。这些变化确实会告诉我为我的模型提供不同数据的影响是什么。它们还可以让我快速了解 2 个模型之间的性能差异是否显着:例如2 个模型,平均性能差异为 0.01,标准差。开发。 0.1 不应该让您得出结论认为有一个模型比另一个更好。

关于这个主题还有其他答案:https://stats.stackexchange.com/a/264008/121348

【讨论】:

既然我想在执行不同的实验后比较我的决策树的准确性,不同实验的不同随机 state_value 会不会让我的指标无法相互比较? 没有。对于每个实验,您将获得通过交叉验证(和一些标准开发)计算的平均准确度。您可以比较它们或进行统计测试以得出一些结论。【参考方案2】:

随机状态为模型增加了一定程度的随机性,正如您正确理解的那样,由此产生的不同性能指标将导致不同的模型和准确性。

要找到模型的最佳参数并优化精度,您可以使用GridSearchCV。它是一种交叉验证,利用参数网格(可能的参数值范围及其组合)来优化结果。

上述方法在生成、训练和测试多个模型时计算量很大,但通过这种方式,您可以找到可能的最佳参数值(无需使用 random_state 的试错法)并优化模型的准确性。

【讨论】:

你不应该优化随机状态。这是错误的。

以上是关于关于通过将 random_state 值设置为整数来生成最佳决策树的困惑?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以解释为啥我们在将数据拆分为训练和测试时使用 random_state 吗? [复制]

sklearn 的 train_test_split 中的 random_state 参数

尽管使用不同的 random_state 值,为啥 stratifiedkfold 会生成相同的拆分?

剑道图表将y轴设置为整数数值

在 train_test_split sklearn python 上设置种子

随机种子random_state,random seed