【sklearn】GridSearchCV辅助Pipeline调参

一个简单的目录

  • 流水线(Pipeline)
      • 定义
      • 使用
      • 参数
      • 属性
  • 格点搜索(GridSearchCV)
      • 定义
      • 参数
      • 属性
  • 实例

流水线(Pipeline)

定义

Pipeline就是若干转换器(transformer)和一个估计器(estimator)的组合。在实例化之后fit数据时会依次调用各transformerfit()transform()方法,最后调用estimatorfit()方法。

使用

Pipeline是用列表定义的,列表是(name, transformer)元组的顺序排列,最后一项是(name, estimator),其中name是字符串类型,可以根据需要自定义。

参数

  1. memory:接受字符串或对象,用于缓存pipeline
  2. verbose:布尔型,用于输出每一步的耗时信息

属性

named_steps:字典型,键是自定义的name,值是对应的transformerestimator及其参数

格点搜索(GridSearchCV)

定义

顾名思义,该函数用于在若干参数组成的参数网格中搜索最优的参数组合。

参数

  1. estimator:使用的估计器对象
  2. param_grid:字典,字典中的键即estimator的参数名,键对应的值是该参数待搜索的范围,是列表类型;它也可以是多个字典组成的列表,这时每个字典定义的参数网格都会被搜索一遍
  3. n_jobs:整数,并行的工作数
  4. verbose:整数,控制运行过程中输出信息的多少

属性

  1. best_estimator_:得分最高的estimator
  2. best_score_best_estimator_在数据上交叉验证得到的得分的平均值
  3. best_params_:最优参数组合

更多参数和属性可以参考官网:官方文档

实例

波士顿房价的预测。数据集是统计的 20 世纪 70 年代中期波士顿郊区房价的中位数,来源即sklearn.dataset.load_boston()。该例分析流程:

  1. 生成特征多项式、数据归一化、构建岭回归模型,并将这三步封装到Pipeline
  2. GridSearchCV,对 PipelinePolynomialFeaturesdegree参数和岭回归模型的alpha参数进行调优
  3. 用训练集进行模型拟合
  4. 用训练好的模型对测试集的预测准确度进行评估,评估指标采用R2_score

通过上面对Pipeline语法的介绍,容易将流水线写出,模型的训练及预测也非常简单,重点在 GridSearchCVPipeline的结合。这里只要注意GridSearchCV的参数网格的写法即可,由于流水线中有多个transformer,在参数网格中定义参数时要注意参数的名称前面要加上transformer__,其中transformer是参数所在的转换器的名称,后面跟的是两个下划线。(可参考:GridSearchCV报错)
以下是源代码:

from sklearn.datasets import load_boston
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.linear_model import Ridge
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.metrics import r2_score
from sklearn.pipeline import Pipeline

data = load_boston()
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=66)

pipeline = Pipeline([
    ('PolynomialFeatures', PolynomialFeatures()),
    ('Standardization', StandardScaler()),
    ('L2', Ridge())
])

param = {
    'PolynomialFeatures__degree': [i for i in range(2, 5)],
    'L2__alpha': [0.2, 0.3, 0.5, 0.7]
        }

gridsearch_polynomial = GridSearchCV(pipeline, param_grid=param)
gridsearch_polynomial.fit(x_train, y_train)
y_pred = gridsearch_polynomial.best_estimator_.predict(x_test)

print(r2_score(y_test, y_pred))

你可能感兴趣的:(【sklearn】GridSearchCV辅助Pipeline调参)