如何用Sklearn Pipeline简化含StandardScaler、PolynomialFeatures的回归流程
使用sklearn Pipeline简化建模流程实现方案
核心逻辑
Pipeline 可以将多个数据处理、特征工程、模型训练步骤按执行顺序串联封装,无需手动多次调用fit和transform,同时能保证训练集和测试集的预处理逻辑严格一致,避免数据泄露问题。
具体实现
首先导入Pipeline依赖:
from sklearn.pipeline import Pipeline
替换原有逻辑的完整代码如下:
from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, PolynomialFeatures from sklearn.linear_model import Ridge from sklearn.metrics import r2_score # 数据集拆分逻辑保持不变 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33) # 按顺序定义处理流,每个步骤格式为(自定义步骤名, 实例化处理对象) pipe = Pipeline(steps=[ ('scaler', StandardScaler()), # 第一步:数据标准化 ('poly', PolynomialFeatures(degree=3, include_bias=False)), # 第二步:生成多项式特征 ('ridge', Ridge(alpha=alpha)) # 第三步:带正则化的岭回归模型 ]) # 一次性完成所有预处理步骤+模型训练,仅需调用一次fit pipe.fit(X_train, y_train) # 直接调用predict即可自动完成数据预处理+预测,无需手动转换 r2_train = r2_score(y_train, pipe.predict(X_train)) r2_test = r2_score(y_test, pipe.predict(X_test))
补充说明
- 步骤的传入顺序必须和原有业务逻辑一致,Pipeline会严格按照
steps的传入顺序依次执行处理 - 如果需要单独获取某个步骤的参数/输出,可以用
pipe.named_steps['步骤名']调用,比如查看训练好的岭回归系数:pipe.named_steps['ridge'].coef_ - 后续做超参数调优时,可直接和
GridSearchCV结合,对Pipeline内不同步骤的参数联合搜索,参数命名格式为步骤名__参数名,比如同时搜索多项式阶数和正则化系数:param_grid = {'poly__degree':[2,3], 'ridge__alpha':[0.1,1,10]}
内容的提问来源于stack exchange,提问作者8-Bit Borges
相关产品推荐
相关产品推荐

