sklearn.model_selection

该模块一共讲述了三部分的内容,交叉验证:评估模型,微调模型的超参数以及学习曲线

可用的API有拆分策略,参数优化的方法以及模型评估

拆分策略

对于独立同分布(i.i.d)的数据

函数名作用重要参数方法备注
KFold([n_splits,shuffle,…])k折交叉验证n_splits:多少折;shuffle:是否打乱数据;random_state:随机种子get_n_splits([X,y,groups]):返回拆分的次数,split(X,[,y,groups]):生成拆分后的训练集和测试集的序号等分数据
LeaveOneOut()将一个样本作为测试集,其他作为训练集,n个样本就有n个不同的训练集和测试集无参数同KFold不推荐使用
LeavePOut(p)预留出p个样本作为测试集p:测试集的大小同KFold测试集会有重叠部分
RepeatedKFold([n_splits,…])重复KFold n次n_repeats:重复次数同KFold每次都是不同的拆分方法
ShuffleSplit([n_splits,…])随机排列交叉验证test_size:测试集大小;train_size:训练集大小同KFold可以自己设置训练集/测试集的大小,数据会先打乱,再拆分

对于类别分布不平衡的数据,例如正例的数量是反例数量的好几倍。
Tip:对于array数组统计成员出现次数,需要先将np.narray.tolist()转换为list,再使用list的count方法统计某个值的频数。

函数名作用重要参数方法备注
StratifiedKFold([n_splits,…])分层K折交叉验证同KFold同KFold每一折的测试集和训练集都不一样
RepeatedStratifiedKFold([…])重复分层K折交叉验证n_reoeats:重复的次数同KFold每一次都用不同的随机方式
StratifiedShuffleSplit([…])分层随机排列交叉验证同ShuffleSplit同ShuffleSplit

如果数据间是有关联性的,例如医院调研中,有一些数据属于同一个病人,那么理所应当的应该将这些数据归为一组,不可能说这个病人的一部分数据作为测试集,一部分作为训练集。这一个信息在交叉验证将通过groups参数来传递

函数名作用重要参数方法备注
GroupKFold([n_splits])无重叠组的K折拆分变形只有一个参数n_splits:折的数量函数同KFold,但注意groups参数要给出因为数据分组的问题,所以每一折拆分出来的数据大小不一定一样
GroupShuffleSplit([…])打乱分组顺序的交叉验证n_splits:多少折;test_size:测试集大小;train_size:训练集的大小;random_state:随机种子同GroupKFold
LeaveOneGroupOut()留出一组作为测试集无参数同GroupKFold
LeavePGroupsOut(n_groups)留出P组作为测试集只有一个参数n_groups:测试集的大小同GroupKFold

其他还有,与时间相关的划分,例如当前时刻的结果与之前时刻的结果有关,那么包含了当前时刻的样本就应当和之前时刻的样本放在一起当测试集,TimeSeriesSplit([n_splits,…])。还可以事先指定测试集PredefinedSplit(test_fold)

参数优化

函数名作用重要参数属性方法
GridSearchCV(estimator,…)遍历搜寻给出的参数中的最优参数estimator:选用的模型;param_gird:参数表(重要);scoring:评分方式;cv:交叉验证方式;refit:是否选择最优模型;return_train_score:是否返回训练集的分数需要先fit(X[,y,groups]),cv_results_:所有的结果;best_estimator:最佳模型;best_score:最高分数;best_params:最佳参数fit(X[,y,groups]):拟合数据;predict(X):预测…
RandomizedSearchCV(…[,…])随机抽样超参数与GridSearchCV不同的参数,param_distributions: 参数表,dict型数据,对于连续的参数最好给出一个连续的分布(常用的有expon,gamma,uniform,randint)(scipy.stats.distributions),如果给出的是列表,将会进行无放回的抽样;n_iter:抽样次数;random_state:针对给出的参数是列表型的话同GridSearchCV同GridSearchCV
函数名作用
ParameterGrid(param_grid)用于产生一系列离散的参数的迭代器
ParameterSample(…[,…])用于产生一系列连续的参数的迭代器
fit_grid_point(X,y,…[,…])使用一组参数拟合模型,获得分数

模型评估

函数名作用重要参数备注
cross_val_score(estimator,X)直接获得交叉验证后的分数estimator:拟合数据的模型;X:数据;y:标签;scoring:评分方式;cv:交叉验证的拆分策略scoring方式
cross_validate(estimator,X)多种评分方式下的交叉验证得分并且记录拟合以及打分时间同上;return_train_score:是否返回测试集的分数;return_estimator:是否返回模型的参数与cross_val_score的不同:1. 前者允许多种评估方式 2.前者除了返回测试集的分数外,还返回每次拟合的时间,评分的时间,以及训练集的分数
cross_val_predict(estimator,X)返回每个样本作为CV中的测试集时,对应的模型对于该样本的预测结果基本与cross_val_score相同,没有scoring适用于1. 从不同模型中获得预测结果 2.模型融合
learning_curve(estimator,X,y)学习曲线关注的是增加样本量对测试集以及验证集的影响train_sizes:可控制训练集的大小返回训练集的大小,训练集和测试集的分数
permutation_test_score(…)检查一个交叉验证后得到的分数是否有意义n_permutations:对标签进行排列的次数返回pvalue(用于验证未排列时的分数是不是随机得到的,越小越好)
validation_curve(estimator,…)通过画图的方式判断某一参数在训练集和验证集的表现param_name:某一参数的名称;param_range:参数的范围返回训练集的分数和测试集的分数。如果在训练集和验证集的分数都偏低,说明模型欠拟合。如果训练集分数很高,验证集分数很低,说明模型过拟合,否则就是拟合得当。

分割函数

函数名作用重要参数返回备注
check_cv([cv,y,classifier])构建一个交叉验证器KFold或者分层KFold
train_test_split(*arrays,…)将数列随机分割成训练集和测试集直接返回训练集和测试集

参考网址:

[1] https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection
[2] https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation
[3] https://scikit-learn.org/stable/modules/grid_search.html#grid-search
[4] https://scikit-learn.org/stable/modules/learning_curve.html#learning-curve

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值