model_selection
主要提供 交叉验证
和 结果评估
的工具, cross_validation
模块作为老版本中的模块, 拥有同样的方法, 在0.20.0版本中将会本移除, 因此尽量不要使用cross_validation
模块.
- sklearn.model_selection.train_test_split()
作用: 随机地将样本集合分为训练集和测试集.
'''
参数:
*arrays: 被分割的数据集, 他们的长度(shape[0]或len)相同, 可以接受lists, numpy arrays, dataframes类型的数据;
test_size: 测试集大小, 可以为float, int, None, 默认为None;
float: 值在0.0到1.0中间, 表示测试集占数据集的比例大小;
int: 测试集包含的样本的绝对数值;
None: 根据train_size自动设置, 如果train_size也为None, test_size将被设置为0.25;
train_size: 训练集大小, 可以为float, int, None, 默认为None;
float: 值在0.0到1.0中间, 表示训练集占数据集的比例大小;
int: 训练集包含的样本的绝对数值;
None: 根据test_size自动设置, 如果test_size也为None, train_size将被设置为0.75;
random_state: 随机种子;
stratify: 对样本类别的标记列表, 默认为None, 可以设置为array-like, 长度与被分割的数据array中的长度相同, 其中的每个值表示对应样本的所属类别, 如[0,0,0,1,1]表示前3个样本数据属于第0类, 后两个样本数据属于第1类;
随机取样本时, 如果该参数不是None, 则在每个类别的样本中按比例抽取训练集和测试集, 即抽取后的训练集总样本和测试集总样本中的不同类别的样本比例保持不变.
'''
# stratify参数使用方法
X = np.random.rand(100, 3)
y = np.random.rand(100) * 2 + 100
stratify = np.ones(100)
stratify[50:] = 2
print(train_test_split(X, y, stratify=stratify))
以下为进行样本划分的类, 拥有共同的方法get_n_splits()
和split()
首先介绍这两个共有方法:
- get_n_splits()
'''
作用: 返回分割后的子样本集合(Folds)的数量, 即划分类初始化时设置的n_splits参数.
参数:
X: (must)被划分的数据;
返回: 返回分割后的子样本集合(Folds)的数量, 即划分类初始化时设置的n_splits参数.
'''
- split()
'''
作用: 对样本进行划分, 代码生成使用yield, 因此使用for循环进行调用, 每次返回一次分割结果.
参数:
X: (must)样本特征, shape为(n_samples, n_features);
y: 样本标签, 长度为n_samples
groups: shape为(n_samples,), 每个样本对应的集合分类, 如[0,0,0,1,1].
输出:
train: 本次分割产生的训练集样本索引(indices);
test: 本次分割产生的测试集样本索引(indices);
'''