2

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

4

2 回答 2

4

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

例如。

  • 基于树的估计器将使用random_state随机选择特征和样本(如DecisionTreeClassifier, RandomForestClassifier)。

  • 在像Kmeans这样的聚类估计器中,random_state用于初始化聚类中心。

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

  • 一些特征选择算法也使用它进行初始选择
  • 还有很多...

它在文档中提到:

如果您的代码依赖于随机数生成器,则永远不应使用 numpy.random.random 或 numpy.random.normal 之类的函数。这种方法可能会导致测试中的可重复性问题。相反,应该使用一个 numpy.random.RandomState 对象,它是从random_state传递给类或函数的参数构建的。

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

于 2017-02-27T02:49:05.740 回答
3

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

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

于 2017-02-27T00:35:18.117 回答