一、train_test_split
sklearn中有方法能将数据集划分为训练集和测试集,实现过程如下:
from sklearn.model_selection import train_test_split #数据分区
x=np.arange(72).reshape(24,3) #24个样本点,3个维度
y=np.arange(24)
X_train,X_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)
print(len(X_train),len(X_test),len(y_train),len(y_test))
输出:
16 8 16 8
但是以上方法也有不足的地方,即在很多场景中可能需要将数据集分为训练集、测试集和验证集3部分。sklearn没有提供直接将数据集分为3种(含3种)以上的方法,我们可以使用Numpy的split方法划分数据集。
二、np.split
split参数如下:
np.split(ary, indices_or_sections, axis=0)
- ary:要划分的原始数据集,类型必须是array数组的形式。
- indices_or_sections:要划分的数据集数量或自定义索引分区。如果直接使用整数型数值设置分区数量,则按照设置的值做等比例划分;如果设置一个一维的数组,那么将按照设置的数组的索引值做区分划分边界。
- axis:要划分数据集的坐标轴,默认是0。
案例如下:
1、平均分样本量
import numpy as np
x=np.arange(72).reshape(24,3)
train_set1,test_set1,val_set1=np.split(x,3) #将数组平均分成三份
print(len(train_set1),len(test_set1),len(val_set1))
输出:
8 8 8
2、按比例分样本量
train_set2,test_set2,val_set2=np.split(x,[int(len(x)*0.6),int(len(x)*0.9)]) #60%训练集、30%测试集、10%验证集
print(len(train_set2),len(test_set2),len(val_set2))
输出:
14 7 3