如何从Scikit-learn Pipeline中获取生成的多项式特征列表?
获取Pipeline生成的多项式特征列表与DataFrame视图
1. 提取训练完成的多项式特征转换器
无论是直接训练的Pipeline,还是GridSearchCV输出的最优模型,都可以通过named_steps属性定位到Pipeline中的PolynomialFeatures组件:
- 针对普通Pipeline(如你的OLS模型):
poly_transformer = models3['OLS'].named_steps['poly'] - 针对GridSearchCV得到的模型(如Lasso/Ridge/Tweedie):
poly_transformer = models3['Lasso'].named_steps['poly']
2. 生成特征名称列表
使用get_feature_names_out()方法生成特征名,如果你的X_train是带列名的DataFrame,传入X_train.columns可以得到更直观的特征命名(比如原始特征为x1、x2时,会生成1、x1、x2、x1^2、x1 x2、x2^2这类名称):
# 获取特征名称数组 feature_names = poly_transformer.get_feature_names_out(X_train.columns) # 打印查看 print(feature_names)
如果X_train是无列名的numpy数组,方法会自动生成x0、x1这类默认名称。
3. 生成多项式特征的DataFrame
用训练好的转换器对X_train做变换,再结合特征名构建DataFrame,方便查看:
import pandas as pd # 生成多项式特征矩阵 poly_features_matrix = poly_transformer.transform(X_train) # 转为DataFrame,保留原数据索引 poly_features_df = pd.DataFrame( poly_features_matrix, columns=feature_names, index=X_train.index ) # 查看前5行 print(poly_features_df.head())
版本兼容提示
如果你的scikit-learn版本低于1.0,get_feature_names_out()方法不存在,可改用已弃用的get_feature_names()方法,但建议优先升级scikit-learn到最新稳定版。
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

