sklearn学习——model_selection

sklearn中文学习文档

0. 写在前面

本博客累积一些关于sklearn中model_selection中常用的函数.

1. 形成测试集和训练集

from sklearn.model_selection import train_test_split
Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size=0.3,shuffle=True)

2. 交叉验证

2.1 cross_val_score

Q1: 返回的评价指标是什么?

A1: 默认每次交叉验证,使用estimator本身的评价指标,具体可以参考sklearn对该estimator的介绍。当然也可以通过参数scoring来改变

Q2 :交叉验证时,使用训练集还是全部的数据集?

A2 :严谨来说,应该使用训练集。当使用全部数据集时,存在这样一个问题:有一个数据集第一次交叉验证时被作为训练集,第二次被作为验证集,这就相当于提前告诉了模型一些数据信息,使得模型过拟合。所以要使用训练集作为交叉验证的全部数据,在每一次交叉验证时,一份作为验证集,其余作为训练集,在验证集上表现好的,还要再测试集上测试,最后得出答案。

Q3 :estimator是训练后的还是未训练的

A3 :未训练的

注意:交叉验证本身就是一个经验技术,帮助我们更好的判断模型的训练效果,但并不是在验证集和测试集上都表现好的模型就是一个好模型,因为我们不确定它们对所有未知数据的预测


from sklearn.model_selection import cross_val_score

cross_val_score(
    estimator,
    X,
    y=None,
    *,
    groups=None,
    scoring=None,
    cv=None,
    n_jobs=None,
    verbose=0,
    fit_params=None,
    pre_dispatch='2*n_jobs',
    error_score=nan,
)
Docstring:
Evaluate a score by cross-validation

顺便提一下,你可以通过以下代码查看所有的评价指标:

import sklearn
sorted(sklearn.metrics.SCORERS.keys())

2.2 KFold

也许你还会碰到KFold对象用来交叉验证,它需要配合cross_val_score来使用,具体的:

cv = KFold(n_splits=5, shuffle = True, random_state=42)
results = cross_val_score(estimator,X,y,cv=cv)

2.3 网格搜索交叉验证GridSearchCV

目的:使用网格搜索法进行穷尽搜索最好的参数对(一般是两个参数)。

使用:GridSearchCV实现了fitscore方法。如果estimator本身实现了predictpredict_probadecision_functiontransforminverse_transform方法,则GridSearchCV的类对象也可以调用这些方法

GridSearchCV(
    estimator,     # √
    param_grid,    # √
    *,
    scoring=None,  # √
    n_jobs=None,
    iid='deprecated',
    refit=True,
    cv=None,       # √
    verbose=0,
    pre_dispatch='2*n_jobs',
    error_score=nan,
    return_train_score=False,
)

在实际使用中,一般下面的操作:

1. 定义一个字典类型变量param,其中key值是estimator的参数,value是该参数取值范围
2. 定义模型,该模型一定是未经过训练的
3. 定义交叉验证对象,可以使用KFold,该步可有可无
4. 定义GridSearchCV对象
5. 训练等后续操作
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InceptionZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值