• sklearn-pipeline、GridSearchCV、train_test_split


    1、pipeline

    pipeline 实现了对全部步骤的流式化封装和管理,可以很方便地使参数集在新数据集上被重复使用。

    (当我们对训练集应用各种预处理操作时(特征标准化、主成分分析等等),我们都需要对测试集重复利用这些参数。)

    pipeline 可以用于下面几处:

    • 模块化 Feature Transform,只需写很少的代码就能将新的 Feature 更新到训练集中。

    • 自动化 Grid Search,只要预先设定好使用的 Model 和参数的候选,就能自动搜索并记录最佳的 Model。

    • 自动化 Ensemble Generation,每隔一段时间将现有最好的 K 个 Model 拿来做 Ensemble。

    可放在Pipeline中的步骤可能有:

    • 特征标准化是需要的,可作为第一个环节
    • 既然是分类器,classifier也是少不了的,自然是最后一个环节
    • 中间可加上比如数据降维(PCA)
    • 。。。

    调用 Pipeline 时,输入由元组构成的列表,每个元组第一个值为变量名,元组第二个元素是 sklearn 中的 transformer 或 Estimator。

    注意中间每一步是 transformer,即它们必须包含 fit 和 transform 方法,或者  fit_transform
    最后一步是一个 Estimator,即最后一步模型要有 fit 方法,可以没有 transform 方法。

    然后用 Pipeline.fit对训练集进行训练,pipe_lr.fit(X_train, y_train)
    再直接用 Pipeline.score 对测试集进行预测并评分 pipe_lr.score(X_test, y_test)

    from sklearn.preprocessing import StandardScaler
    
    from sklearn.decomposition import PCA
    
    from sklearn.linear_model import LogisticRegression
    
    from sklearn.pipeline import Pipeline
    
    pipe_lr = Pipeline([('sc', StandardScaler()), ('pca', PCA(n_components=2)), ('clf', LogisticRegression(random_state=1)) ])
    
    pipe_lr.fit(X_train, y_train)
    
    print('Test accuracy: %.3f' % pipe_lr.score(X_test, y_test))

    2、train_test_split(随机划分训练集和测试集

    一般形式: 
    train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和testdata,形式为:

    X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)

    参数解释: 
    - train_data:所要划分的样本特征集 
    - train_target:所要划分的样本结果 
    - test_size:样本占比,如果是整数的话就是样本的数量 
    - random_state:是随机数的种子。 
    - 随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。 
    随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则: 
    - 种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。

    from sklearn.cross_validation import train_test_split  
    train= loan_data.iloc[0: 55596, :]  
    test= loan_data.iloc[55596:, :]  
    # 避免过拟合,采用交叉验证,验证集占训练集20%,固定随机种子(random_state)  
    train_X,test_X, train_y, test_y = train_test_split(train,  target,  test_size = 0.2,  random_state = 0)  
    train_y= train_y['label']  
    test_y= test_y['label'] 

    3、GridSearchCV

    GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,

    estimator:所使用的分类器,如estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10), 并且传入除需要确定最佳的参数之外的其他参数。每一个分类器都需要一个scoring参数,或者score方法。
    param_grid:值为字典或者列表,即需要最优化的参数的取值,param_grid =param_test1,param_test1 = {'n_estimators':range(10,71,10)}。
    scoring :准确度评价标准,默认None,这时需要使用score函数;或者如scoring='roc_auc',根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。scoring参数选择如下:

    参考地址:http://scikit-learn.org/stable/modules/model_evaluation.html


    cv :交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。
    refit :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。
    iid:默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均。
    verbose:日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。
    n_jobs: 并行数,int:个数,-1:跟CPU核数一致, 1:默认值。
    pre_dispatch:指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次

    常用方法:

    grid.fit():运行网格搜索
    grid_scores_:给出不同参数情况下的评价结果
    best_params_:描述了已取得最佳结果的参数的组合
    best_score_:成员提供优化过程期间观察到的最好的评分

     

  • 相关阅读:
    Vue的配置安装与项目创建
    log4j:WARN No appenders could be found for logger
    终于在博客园扎根了
    简单工厂模式
    详解apache防盗链网站图片防盗链方法
    怎样能写好文章标题
    生活需要阿Q精神
    2013个人博客全新起航
    华中师范大学新生网上怎么选宿舍
    华中师范大学2012级新生QQ交流群欢迎加入!
  • 原文地址:https://www.cnblogs.com/hester-tang/p/8707658.html
Copyright © 2020-2023  润新知