如何获取scikit-learn ColumnTransformer的填充与归一化参数
获取ColumnTransformer中预处理组件的统计值
你可以通过train_mod.best_estimator_['preprocess'].transformers_定位到对应的预处理组件,再提取它们的内置属性来获取所需统计值,具体操作如下:
1. 获取分类特征SimpleImputer的众数
SimpleImputer拟合后,statistics_属性会存储每个分类特征的众数。你需要先找到对应分类预处理步骤的实例:
# 遍历transformers列表,匹配分类预处理步骤名称 for name, transformer, cols in train_mod.best_estimator_['preprocess'].transformers_: if name == 'cat_imputer': # 替换为你实际的分类预处理步骤名称 cat_imputer = transformer break # 提取众数,可与列名对应成字典方便查看 cat_modes = cat_imputer.statistics_ cat_mode_map = dict(zip(cols, cat_modes))
2. 获取数值特征SimpleImputer的中位数
和分类特征逻辑一致,数值SimpleImputer的statistics_存储的是各特征的中位数:
# 遍历找到数值预处理步骤的SimpleImputer for name, transformer, cols in train_mod.best_estimator_['preprocess'].transformers_: if name == 'num_imputer': # 替换为你实际的数值预处理步骤名称 num_imputer = transformer break # 提取中位数并关联列名 num_medians = num_imputer.statistics_ num_median_map = dict(zip(cols, num_medians))
3. 获取MinMaxScaler的极值
MinMaxScaler拟合后会生成data_min_(各特征最小值)和data_max_(各特征最大值)两个属性:
# 遍历找到缩放步骤的MinMaxScaler实例 for name, transformer, cols in train_mod.best_estimator_['preprocess'].transformers_: if name == 'num_scaler': # 替换为你实际的缩放步骤名称 scaler = transformer break # 提取极值并关联列名 scaler_mins = scaler.data_min_ scaler_maxs = scaler.data_max_ scaler_min_map = dict(zip(cols, scaler_mins)) scaler_max_map = dict(zip(cols, scaler_maxs))
注意:如果预处理是嵌套Pipeline的情况
如果你的数值/分类预处理是用Pipeline组合的(比如先填充再缩放),需要先从Pipeline中取出对应组件:
# 假设数值预处理是名为'num_pipeline'的Pipeline for name, transformer, cols in train_mod.best_estimator_['preprocess'].transformers_: if name == 'num_pipeline': # 从Pipeline中取出SimpleImputer和MinMaxScaler num_imputer = transformer.named_steps['imputer'] # 替换为Pipeline中imputer的名称 num_scaler = transformer.named_steps['scaler'] # 替换为Pipeline中scaler的名称 break # 后续提取统计值的逻辑和之前一致 num_medians = num_imputer.statistics_ scaler_mins = num_scaler.data_min_
内容的提问来源于stack exchange,提问作者Petre
相关产品推荐
相关产品推荐

