【Python机器学习】算法链与管道——网格搜索预处理步骤与模型参数

我们可以利用管道将机器学习工作流程中的所有处理步骤封装成一个scikit-learn估计器。这么做的好处在于:现在我们可以使用监督任务(分类或回归)的输出来调节预处理参数。

下面用一个管道来完成一个建模过程。管道包含了3个步骤:缩放数据、计算多项式特征与岭回归:

X,y=make_wave(n_samples=60)
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)
pipe=make_pipeline(
    StandardScaler()
    ,PolynomialFeatures()
    ,Ridge()
)

为了知道怎样选择几项式,或者是否选择多项式或交互项,理想情况下,我们希望根据分类结果来选择degree参数。我们可以利用管道搜索degree参数已经Ridge的alpha参数。为了这一点,我们要定义一个包含这两个参数的param_grid,并用步骤名称作为前缀:

param_grid={'polynomialfeatures__degree':[1,2,3],
            'ridge__alpha':[0.001,0.01,0.1,1,10,100]}

现在,再次运行网格搜索:

grid=GridSearchCV(pipe,param_grid=param_grid,cv=5,n_jobs=-1)
grid.fit(X_train,y_train)

用热图将交叉验证的结果可视化:

plt.matshow(grid.cv_results_['mean_test_score'].reshape(3,-1),vmin=0,cmap='viridis')
plt.xlabel('岭回归参数alpha')
plt.ylabel('多项式特征参数degree')
plt.xticks(range(len(param_grid['ridge__alpha'])),param_grid['ridge__alpha'])
plt.yticks(range(len(param_grid['polynomialfeatures__degree'])),param_grid['polynomialfeatures__degree'])
plt.colorbar()
plt.show()

从交叉验证的结果中可以看出,使用三次多项式的效果比较好,从找到的最佳参数也可以看出:

print('最佳参数:{}'.format(grid.best_params_))

最佳参数对应的分数:

print('最佳分数:{}'.format(grid.score(X_test,y_test)))

为了对比,我们运行一个没有多项式特征的网格搜索:

pipe=make_pipeline(
    StandardScaler()
    ,Ridge()
)
param_grid={'ridge__alpha':[0.001,0.01,0.1,1,10,100]}
grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(X_train,y_train)

print('最佳参数:{}'.format(grid.best_params_))
print('无多项式特征最佳分数:{}'.format(grid.score(X_test,y_test)))

可以看到,不使用多项式特征得到了更差的结果。

同时搜索预处理参数和模型参数是一个非常强大的策略。但是要记住,GridSearchCV会尝试所有的指定参数的所有可能组合,因此,向网格添加更多参数,需要构建的模型指数将会呈指数增长。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 01:38:07       53 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 01:38:07       55 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 01:38:07       46 阅读
  4. Python语言-面向对象

    2024-07-11 01:38:07       56 阅读

热门阅读

  1. GraalVM简介及使用

    2024-07-11 01:38:07       18 阅读
  2. 徐州服务器租用:论带宽的作用有哪些

    2024-07-11 01:38:07       19 阅读
  3. 1. Go 九九乘法表

    2024-07-11 01:38:07       23 阅读
  4. Perl词法作用域:自定义编程环境的构建术

    2024-07-11 01:38:07       21 阅读
  5. SQL Server 设置端口详解

    2024-07-11 01:38:07       19 阅读
  6. MyBatis 框架核心及面试知识要点

    2024-07-11 01:38:07       23 阅读
  7. NLP - 基于bert预训练模型的文本多分类示例

    2024-07-11 01:38:07       17 阅读
  8. 二刷算法训练营Day57 | 动态规划(17/17)

    2024-07-11 01:38:07       18 阅读
  9. 自定义业务非受检异常

    2024-07-11 01:38:07       23 阅读