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