python - onehotencoding 时功能名称丢失
问题描述
使用 onehotencoding 构建管道,当拟合和转换为训练/测试集并转换为数据帧时,它会导致特征没有名称。有什么方法可以获取每个编码特征的名称吗?
# Numerical column transformer
num_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
# Categorical column transformer
cat_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
# Preprocessing pipeline
preprocessor = ColumnTransformer(
transformers=[
('num', num_transformer, numerical_cols),
('cat', cat_transformer, categorical_cols)
])
# Fitting the data and transforming the training & test set
X_train_preprocessed = preprocessor.fit_transform(X_train)
test_preprocessed = preprocessor.fit_transform(test)
解决方案
named_transformers_
您可以使用的属性访问转换器ColumnTransformer
。您有 2 个名为'num'
and的转换器'cat'
,因此preprocessor.named_transformers_['cat']
您可以访问您的cat_transformer
. 然后使用您的named_steps
属性Pipeline
可以访问您的OneHotEncoder
命名'onehot'
及其categories_
属性:
X = [['Male', 1], ['Female', 3], ['Female', 2]]
preprocessor.fit_transform(X)
Out[6]:
array([[-1.22474487, 0. , 1. ],
[ 1.22474487, 1. , 0. ],
[ 0. , 1. , 0. ]])
preprocessor.named_transformers_['cat'].named_steps['onehot'].categories_
Out[7]: [array(['Female', 'Male'], dtype=object)]
推荐阅读
- html - 创建下拉菜单导航 - HTML/CSS Bella Beauty
- javascript - 如何在 JS 警报标签中引用 ruby 代码
- java - 从哈希表中获取列表
- reactjs - Reactjs npm 测试:Jest 遇到了意外的令牌
- javascript - 位置 6 AWS Lambda 的 JSON 中的意外意外令牌 t
- javascript - 用德语引号替换所有英语引号
- sql - bigquery 通过时间戳和另一列连接两个表
- ldap - LDAP 搜索过滤器,用于在一个查询中搜索多个用户组
- c - 我需要在不使用 INT32_MAX、INT_MAX 等常量的情况下找到最大 int32_t 数
- r - 使用 purrr 根据字符列表中的条目从命名数字列表中排除元素