train_test_split函数中random_state参数的取值范围是多少
train_test_split中random_state参数的合法取值范围 合法取值区间
random_state的合法取值为0 到 2^32 - 1(即4294967295)的所有非负整数,这是scikit-learn所有带随机过程的API统一的取值规则,参数本质是传给底层NumPy随机数生成器的种子值。
不同传参对应的行为如下:
- 传入合法区间内的整数:固定随机数生成序列,同一份数据集、相同拆分比例下,同一个整数永远对应完全一致的训练/测试集拆分结果
- 传入
None:不固定随机种子,每次运行代码都会生成新的随机拆分,结果不可复现 - 直接传入已初始化的随机数生成器实例:也属于合法传参,但不在你问的整数取值范畴内
关于调整random_state刷准确率的问题
靠遍历
random_state取值挑最高测试集准确率的做法是错误的,属于典型的测试集泄露,得到的高准确率是没有任何泛化参考价值的虚假结果。
你的数据集总共300条样本,按75%/25%拆分后测试集仅75条样本,理论上存在天量的拆分组合,你确实能遍历到不少拆分刚好让测试集样本被模型“蒙对”,甚至得到你推测的96%~100%的准确率。但这种情况下模型本质是过拟合到了你特意挑出来的那小部分测试集上,换到真实场景的未见过的数据,效果会直接断崖式下跌。如果要稳定评估模型效果,应该用交叉验证,而不是反复换拆分种子刷分。
内容的提问来源于stack exchange,提问作者June
相关产品推荐
相关产品推荐

