sklearn 各种交叉验证方法、验证集两种设定方法、神器GridSearchCV

内容概要

训练集/测试集分割用于模型验证的缺点 – > 各种交叉验证的方法
交叉验证用于选择调节参数、选择模型、选择特征
验证集的作用及自动和手动设定
并行化调参 – > GridSearchCV应用

训练集/测试集分割用于模型验证的缺点

   对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以需要多模型验证这一过程,选择相对好的模型。
   为了解决用全部数据进行训练和测试来衡量模型,导致模型过拟合这一问题,我们将所有数据分成训练集和测试集两部
分,所以我们延伸出了很多交叉验证的方法。

从直接的一次划分开始:

  1. train_test_split

    在分类问题中,通过对训练集进行train_test_split,划分成train 和test 两部分,其中train用来训练模型,
    test用来 评估模型,模型通过fit方法从train数据集中学习,然后调用score方法在test集上进行评分;从
    分数上我们可以知道模型当前的训练水平如何。
    
    #读取本机上的一个文件,获取feature和target
    import pandas as pd
    df = pd.DataFrame(pd.read_csv('one_hot_output.csv'))
    X = df[df.columns[:-1]]
    y = df['target']

    from sklearn.ensemble import  GradientBoostingClassifier
    from sklearn.model_selection import train_test_split

    X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=10)

    gbm0 = GradientBoostingClassifier()
    gbm0.fit(X_train,y_train)
    print 'Accuracy: %.4g' % metrics.accuracy_score(y_train,y_pred)
    print 'AUC Score(Train): %f ' % metrics.roc_auc_score(y_train,y_predprob)
    print 'AccuracyTest: %.4g' % metrics.accuracy_score(y_test,gbm0.predict(X_test))
    print 'AUC Score(Test): %f ' % metrics.roc_auc_score(y_test,gbm0.predict_proba(X_test)[:,-1])     
输出:
Accuracy: 0.9889
AUC Score(Train): 0.914790 
AccuracyTest: 0.9819
AUC Score(Test): 0.880798 

这种方式只进行了一次划分,数据结果具有偶然性

2.Standard Cross Validation\k-fold cross-validation(k折交叉验证)
sklearn 各种交叉验证方法、验证集两种设定方法、神器GridSearchCV_第1张图片

  针对上面通过train_test_split划分存在的弊端,提出Cross Validation 交叉验证。
  Cross Validation:就是进行多次train_test_split划分;每次划分时,在不同的数据集上进行训练、测试评估,
从而得出一个评价结果;如果是5折交叉验证,意思就是在原始数据集上,进行5次划分,每次划分进行一次训练、评估,最后得到
5次划分后的评估结果,一般在这几次评估结果上取平均得到最后的评分。
  k-fold cross-validation ,其中,k一般为5或10。
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(gbm0,X, y) #cv:默认是3折交叉验证
    print("Cross validation scores:{}".format(scores))
    print("Mean cross validation score:{:2f}".format(scores.mean()))
输出:
Cross validation scores:[0.97840458 0.89810322 0.98411998]
Mean cross validation score:0.953543

交叉验证
优点:
    原始采用的train_test_split方法,数据划分具有偶然性;交叉验证通过多次划分,大大降低了这种由一次随机划分带来的偶然性,
    同时通过多次划分,多次训练,模型也能遇到各种各样的数据,从而提高其泛化能力;与原始的train_test_split相比,对数据的
    使用效率更高。train_test_split,默认训练集、测试集比例为3:1,而对交叉验证来说,如果是5折交叉验证,训练集比测试集为4:1;
    10折交叉验证训练集比测试集为9:1。数据量越大,模型准确率越高
缺点:
    这种简单的交叉验证方式,从上面的图片可以看出来,每次划分时对数据进行均分,设想一下,会不会存在一种情况:数据集有5
    训练时,没有学习到测试集中数据的特点,从而导致模型得分很低,甚至为0,!为了避免这种情况,又出现了其他的各种交叉验证
    方式。

接下来,就累了,其余方法见https://www.cnblogs.com/ysugyl/p/8707887.html
shuffle那个感觉最好

交叉验证用于选择调节参数、选择模型、选择特征

https://blog.csdn.net/jasonding1354/article/details/50562513

验证集的作用及自动和手动设定

https://blog.csdn.net/isMarvellous/article/details/78195010?locationNum=6&fps=1

并行化调参 – > GridSearchCV应用

https://blog.csdn.net/u012969412/article/details/72973055

你可能感兴趣的:(sklearn 各种交叉验证方法、验证集两种设定方法、神器GridSearchCV)