欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【Python机器学习】算法链与管道——网格搜索预处理步骤与模型参数

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

2024/10/23 23:25:25 来源:https://blog.csdn.net/weixin_39407597/article/details/140198119  浏览:    关键词:【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会尝试所有的指定参数的所有可能组合,因此,向网格添加更多参数,需要构建的模型指数将会呈指数增长。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com