一、数据集切分
数据集切分的通用参数:
random_state
:一个整数或者一个RandomState
实例,或者None
,指定随机数种子。- 如果为整数,则它指定了随机数生成器的种子。
- 如果为
RandomState
实例,则指定了随机数生成器。 - 如果为
None
,则使用默认的随机数生成器。
X
:样本集合。通常是一个numpy array
,每行代表一个样本,每列代表一个特征。y
:样本的标签集合。它与X
的每一行相对应。groups
:样本的分组标记集合。它与X
的每一行相对应,用于训练集、测试集的拆分。
1.1 train_test_split
train_test_split
用于将数据集切分成训练集和测试集,其原型为:sklearn.model_selection.train_test_split(*arrays, **options)
返回值:一个列表,依次给出一个或者多个数据集的划分的结果。每个数据集都划分为两部分:训练集、测试集。
参数:
*arrays
:一个或者多个数组,代表被拆分的一些数据集。test_size
:一个浮点数,整数或者None
,指定测试集大小。- 浮点数:必须是0.0 到 1.0 之间的数,代表测试集占原始数据集的比例。
- 整数:代表测试集大小。
None
:如果训练集大小也指定为None
,则test_size
设为 0.25。
train_size
:一个浮点数,整数或者None
,指定训练集大小。- 浮点数:必须是0.0 到 1.0 之间的数,代表训练集占原始数据集的比例。
- 整数:代表训练集大小。
None
:如果测试集大小也指定为None
,则test_size
设为 0.75。
random_state
:指定随机数种子。stratify
:一个数组对象或者None
。如果它不是None
,则原始数据会分层采样,采样的标记数组就由该参数指定。
1.2 KFold
KFold
类实现了数据集的 折交叉切分。其原型为:class sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)
n_splits
:一个整数,即 (要求该整数值大于等于 2)。shuffle
:一个布尔值。如果为True
,则在切分数据集之前先混洗数据集。random_state
:指定随机数种子。
方法:
get_n_splits([X, y, groups])
:返回n_splits
参数。参数:其参数都被忽略,用于保持接口的兼容性。
split(X[, y, groups])
:切分数据集为训练集和测试集。返回测试集的样本索引、训练集的样本索引。参数:
X
为训练数据集,形状为(n_samples,n_features)
y
为标记信息,形状为(n_samples,)
groups
:样本的分组标记,用于拆分。
KFold
首先将0~(n-1)
之间的整数从前到后均匀划分成n_splits
份。每次迭代时依次挑选一份作为测试集样本的下标。- 如果
shuffle=True
, 则按顺序划分。 - 如果
shuffle=False
, 则按随机划分。
- 如果
1.3 StratifiedKFold
StratifiedKFold
类实现了数据集的分层采样 折交叉切分。其原型为:class sklearn.model_selection.StratifiedKFold(n_splits=3, shuffle=False, random_state=None)
参数:参考
KFold
。方法:参考
KFold
。StratifiedKFold
的用法类似于KFold
,但是StratifiedKFold
执行的是分层采样:保证训练集、测试集中各类别样本的比例与原始数据集中相同。
1.4 LeaveOneOut
LeaveOneOut
类实现了数据集的留一法拆分(简称LOO
)。它是个生成器,其原型为:class sklearn.model_selection.LeaveOneOut(n)
n
:一个整数,表示数据集大小。
LeaveOneOut
的用法很简单。它每次迭代时,依次取0,1,...(n-1)
作为测试集样本的下标。from sklearn.model_selection import LeaveOneOut
for train_index,test_index in LeaveOneOut(len(y)):
#train_index 保存训练集样本下标,test_index 保存测试集样本下标
1.5 cross_val_score
便利函数
cross_val_score
对estimator
执行k
折交叉验证。其原型为:sklearn.model_selection.cross_val_score(estimator, X, y=None, scoring=None, cv=None,
n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
返回值:返回一个浮点数的数组。每个浮点数都是针对某次 折交叉的数据集上,
estimator
预测性能得分。参数:
estimator
:指定的学习器,该学习器必须有.fit
方法来进行训练。X
:样本集合。通常是一个numpy array
,每行代表一个样本,每列代表一个特征。y
:样本的标签集合。它与X
的每一行相对应。groups
:样本的分组标记集合。它与X
的每一行相对应,用于训练集、测试集的拆分。scoring
:一个字符串,或者可调用对象,或者None
,它指定了评分函数。如果为可调用对象,则参数为
estimator, X, y
,返回值为一个浮点数表示预测能力得分。如果为
None
,则采用estimator
学习器的.score
方法。如果为字符串,则可以为下列字符串:
'accuracy'
:采用的是metrics.accuracy_score
评分函数。'average_precision'
:采用的是metrics.average_precision_score
评分函数。f1
系列:采用的是metrics.f1_score
评分函数。包括:'f1'
:f1
值作为评分。用于二分类问题。'f1_micro'
:微f1
值作为评分。用于多分类问题。'f1_macro'
:宏f1
值作为评分。用于多分类问题。'f1_weighted'
:加权f1
值作为评分。'f1_samples'
:多标签f1
值作为评分。
'log_loss'
: 采用的是metrics.log_loss
评分函数。precision
系列:采用的是metrics.precision_score
评分函数。具体形式类似
f1
系列。recall
系列:采用的是metrics.recall_score
评分函数。具体形式类似
f1
系列。'roc_auc'
:采用的是metrics.roc_auc_score
评分函数 。'adjusted_rand_score'
:采用的是metrics.adjusted_rand_score
评分函数。'mean_absolute_error'
:采用的是metrics.mean_absolute_error
评分函数。'mean_squared_error’'
:采用的是metrics.mean_squared_error
评分函数。'median_absolute_error'
:采用的是metrics.median_absolute_error
评分函数。'r2'
:采用的是metrics.r2_score
评分函数 。
cv
:一个整数、 折交叉生成器、一个迭代器、或者None
,指定k
折交叉参数。- 如果为
None
,则使用默认的 3 折交叉生成器。 - 如果为整数,则指定了 折交叉生成器的 值。
- 如果为 折交叉生成器,则直接指定了 折交叉生成器。
- 如果为迭代器,则迭代器的结果就是数据集划分的结果。
- 如果为
fit_params
:一个字典,指定了estimator
执行.fit
方法时的关键字参数。n_jobs
:一个整数,指定并行性。verbose
:一个整数,用于控制输出日志。pre_dispatch
:一个整数或者字符串或者None
,用于控制并行执行时,分发的总的任务数量。- 如果为
None
,则所有的job
立即创建并派生。 - 如果为整数,则它指定了立即派生的
job
的数量。 - 如果为字符串,则指定了
n_jobs
的表达式。如'2*n_jobs'
表示立即派生2倍n_jobs
数量的job
。
- 如果为
之所以称
cross_val_score
为便利函数,是因为完全可以凭借现有的函数手动完成这个功能,步骤为:折交叉划分数据集,对每次划分结果执行:
- 在训练集上训练
estimator
。 - 用训练好的
estimator
预测测试集,返回测试性能得分。
- 在训练集上训练
- 收集所有的测试性能得分,放入一个数组并返回。