将数据集拆分为训练/测试集(一次)
抽样时要尽可能保持数据分布的一致性,避免引入额外的偏差。
X_train, X_test, y_train, y_test = model_selection.train_test_split(data, target, test_size, train_size, random_state, shuffle, stratify)
将列表、数组、矩阵或DataFrame随机拆分为训练集和测试集构成的元组(X_train, X_test, y_train, y_test)(若输入是稀疏的则返回scipy.sparse.csr_matrix,否则数据类型同输入)。
data、target是位置参数,分别为特征数组或矩阵、目标数组或矩阵。
test_size指定测试集的大小,小数则表示占比,整数表示样本量,缺失默认0.25。train_size指定训练集的大小。random_state指定随机数种子。
shuffle是否在拆分前先打乱原数据,为False时stratify必须为None。stratify是用来标识分层的数组作为分层抽样依据,为None时将按顺序拆分为训练和测试集。
一般将训练样本和测试样本分为8:2或7:3。更好的方式是将数据分为3份:训练集:交叉验证数据集:测试集=6:2:2(交叉验证数据集用于选择模型,测试集用于测试准确性,使选择模型与评价预测性能分开)。
原文链接:https://blog.csdn.net/fengsuiwoxing/article/details/87918035
1.random_state:随机数种子——其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如每次都为1,其他参数一样的情况下你得到的随机数组是一样的。当为None时,产生的随机数组也会是随机的。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
下面我们通俗的解释一下就是:
参数test_size:如果是浮点数,在0-1之间,表示test set的样本占比;如果是整数的话就表示test set样本数量。
test_size只是确定training set于test set的各自所占比例或者数量,并没有确定数据的划分规则。比如我们有数据集[1,2,3,4,5,6,7,8,9],我们确定test_size=3,那问题是我们应该取哪三个数作为test set呢,这时候就应该使用random_state来确定我们的划分规则,假设我们取random_state=1,它按一定的规则去取出我们的数据,当我们random_state=2时,它又换成另一种规则去取我们的数据,random_state的取值范围为0-2^32。当random_state=None时,可以理解为随机分配一个整数给random_state,这样就导致每次运行的结果都可能不同。
其他函数中的random_state参数功能是类似的。
原文链接:https://blog.csdn.net/perfect_accepted/article/details/81151952
结论: random_state的值相当于一种规则,通过设定为相同的数,每次分割的结果都是相同的
2.stratify:是为了保持split前类的分布。比如有100个数据,80个属于A类,20个属于B类。如果train_test_split(... test_size=0.25, stratify = y_all), 那么split之后数据如下:
training: 75个数据,其中60个属于A类,15个属于B类。
testing: 25个数据,其中20个属于A类,5个属于B类。
用了stratify参数,training集和testing集的类的比例是 A:B= 4:1,等同于split前的比例(80:20)。通常在这种类分布不平衡的情况下会用到stratify。
将stratify=X就是按照X中的比例分配
将stratify=y就是按照y中的比例分配