sklearn学习——model

    科技2022-09-02  98

    文章目录

    0. 写在前面1. 形成测试集和训练集2. 交叉验证2.1 cross_val_score2.2 KFold2.3 网格搜索交叉验证GridSearchCV

    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实现了fit和score方法。如果estimator本身实现了predict、predict_proba、decision_function、transform和inverse_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. 训练等后续操作
    Processed: 0.012, SQL: 9