分类结果取决于random_state?

时间:2017-02-27 00:33:01

标签: python machine-learning scikit-learn adaboost boosting

我想使用scikit-learn(sklearn)实现AdaBoost模型。我的问题与another question类似,但并不完全相同。据我所知,documentation中描述的random_state变量用于根据前一个链接随机拆分训练集和测试集。所以,如果我理解正确,我的分类结果不应该依赖于种子,这是正确的吗?如果我的分类结果依赖于random_state变量,我应该担心吗?

2 个答案:

答案 0 :(得分:3)

这很重要。当训练集不同时,训练状态也会发生变化。对于不同的数据子集,您最终可能会得到一个与使用其他子集训练的分类器略有不同的分类器。

因此,您应该使用像0这样的常量种子或其他整数,以便您的结果可以重现。

答案 1 :(得分:3)

您的分类分数取决于random_state。正如@Ujjwal所说,它用于将数据分成训练和测试测试。不仅如此,scikit-learn中的许多算法都使用random_state来选择特征子集,样本子集,并确定初始权重等。

例如。

  • 基于树的估算工具会使用random_state随机选择要素和样本(例如DecisionTreeClassifier, RandomForestClassifier)。

  • Kmeans等聚类估算工具中,random_state用于初始化聚类中心。

  • SVM将其用于初始概率估计

  • 某些功能选择算法也将其用于初始选择
  • 还有更多......

documentation中提到:

  

如果你的代码依赖于随机数生成器,它绝不应该使用像numpy.random.random或numpy.random.normal这样的函数。这种方法可能导致测试中的重复性问题。相反,应该使用numpy.random.RandomState对象,该对象是根据传递给类或函数的random_state参数构建的。

请阅读以下问题和答案以便更好地理解: