使用GridSearchCV筛选最优回归模型与缩放器接入ML流水线是否合理?
数据集说明
数据集用于预测连续浮点型结果,无分类任务,包含200个样本与50个特征。
导入库
import pandas as pd from sklearn.neighbors import KNeighborsRegressor from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.linear_model import LinearRegression, Lasso from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler, QuantileTransformer, MinMaxScaler, RobustScaler from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error
实现步骤
- 实例化测试流水线:
test_pipe = Pipeline([ ('scaler', StandardScaler()), ('model', KNeighborsRegressor())])
- 构建参数网格并执行GridSearchCV:
param_grid = {'scaler': [MinMaxScaler(), RobustScaler(), QuantileTransformer(), StandardScaler(), 'passthrough'], 'model': [KNeighborsRegressor(), LinearRegression(), Lasso(alpha=0.1), Lasso(alpha=0.5), GaussianProcessRegressor()], } grid = GridSearchCV(test_pipe, param_grid, cv=4) grid.fit(X_train, y_train) print(grid.best_params_) print(grid.score(X_test, y_test)) grid.get_params()
输出[1]:
{'model': Lasso(alpha=0.1), 'scaler': QuantileTransformer()} 0.9843408040290395
- 基于最优参数构建正式流水线:
pipe = Pipeline([ ('scaler', grid.best_params_['scaler']), ('model', grid.best_params_['model'])]) pipe.fit(X_train,y_train)
输出[2]:
Pipeline(steps=[('scaler', QuantileTransformer()), ('model', Lasso(alpha=0.1))])
疑问
这种方法可能存在问题,是否需要绘制各缩放器/模型组合的得分、MAE/MSE,并评估模型的欠拟合/过拟合情况?
最优模型评估结果
print(f'Score: {pipe.score(X_test, y_test)}') print(f'MAE: {mean_absolute_error(y_test, pipe.predict(X_test))}') print(f'MSE: {mean_squared_error(y_test, pipe.predict(X_test))}')
输出[3]:
Score: 0.9843408040290395 MAE: 13.785801047280785 MSE: 352.94279168844093
内容的提问来源于stack exchange,提问作者Drew Sanislo
相关产品推荐
相关产品推荐

