python中的train_test_split函数

>>> import numpy as np
>>> from sklearn.cross_validation import train_test_split #从sklearn.cross_validation模块导入train_test_split 函数,用于训练集和测试集的划分,cross_validation即交叉验证
>>> X, y = np.arange(10).reshape((5, 2)), range(5) #
>>> X
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.33, random_state=42) 
...
>>> X_train
array([[4, 5],
[0, 1],
[6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
[8, 9]])
>>> y_test
[1, 4]

解释:test_size 为测试集占比,如果为整数就代表样本的数量

            random_state 为随机数种子 

讨论一下random_state :

random_state 相当于随机数种子,你可以先看一下图片中的代码和运行结果来了解它的作用。图中设置了 random.seed() 就相当于在 SVC 中设置了 random_state。设置了 random.seed() 就相当于在 SVC 中设置了 random_state。

第三段和第四段代码设置了相同的 random seed(123),它们取的随机数就完全相同,你多运行几次也是这样的。

第五段代码也设置了 random seed (456),但是与前面设置的不同,于是运行取随机数的结果也不同。

python中的train_test_split函数_第1张图片

random_state 与 random seed 作用是相同的。不仅 SVC 中有 random_state ,很多其它的模型也有,你可以从模型对应的文档中查看。交叉验证的时候使用的 ShuffleSplit() 也有 random_state。在 ShuffleSplit() 设置 random_state 可以让每次划分训练集和验证集的时候都是完全一样的。在模型(如SVC)中设置 random_state 可以使模型每次用相同的训练集训练结果是一样的,对测试集的预测结果也是一样的。不然的话,你的结果,比如准确度可能会有波动。如果你在需要设置 random_state 的地方都设置好,那当别人重新运行你的代码的时候就能得到完全一样的结果,复现和你一样的过程。如果你设置为 None,则会随机选择一个种子。

参考资料:https://www.zhihu.com/question/56315846/answer/148520029

http://www.cnblogs.com/zhanglianbo/p/5701009.html


你可能感兴趣的:(python学习)