You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sklearn中查看OneHotEncoder的类别与对应编码?

解决OneHotEncoder类别与编码对应关系的查看问题

核心原因分析

你遇到的方法报错,大概率是sklearn版本差异导致:

  • get_feature_names_out() 是sklearn 0.24版本新增的方法,旧版本的OneHotEncoder没有这个属性;
  • 直接调用OneHotEncoder的get_feature_names()在新版本会被标记为弃用,且需要传入参数,正确的调用方式应该从包裹它的ColumnTransformer入手。

具体解决步骤

以下是基于示例代码的完整实现:

1. 完成数据编码的基础代码

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import numpy as np
import pandas as pd

# 构造示例数据(第3列为分类列)
data = pd.DataFrame({
    'col1': [1, 2, 3, 4, 5],
    'col2': [10, 20, 30, 40, 50],
    'col3': ['A', 'B', 'C', 'A', 'B']
})

# 定义ColumnTransformer,指定对第3列(索引为2)做独热编码
ct = ColumnTransformer(
    transformers=[
        ('encoder', OneHotEncoder(sparse_output=False), [2])
    ],
    remainder='passthrough'  # 保留其他列
)

# 拟合并转换数据
encoded_data = ct.fit_transform(data)

2. 提取OneHotEncoder实例并查看类别

从ColumnTransformer中取出内部的OneHotEncoder对象,再通过categories_属性获取所有分类值:

# 获取ColumnTransformer中的OneHotEncoder实例
encoder = ct.named_transformers_['encoder']

# 获取第3列的所有分类类别(因为只对一列编码,取categories_[0])
categories = encoder.categories_[0]
print("分类类别列表:", categories)
# 输出:分类类别列表: ['A' 'B' 'C']

3. 生成类别与编码的对应关系

OneHotEncoder默认按类别字典序生成编码,每个类别对应一个独热向量(对应位置为1,其余为0)。可以手动生成对应字典:

# 生成类别-编码的映射字典
encoding_mapping = {
    category: np.eye(len(categories))[index].astype(int)
    for index, category in enumerate(categories)
}

print("类别与编码对应关系:")
for cat, code in encoding_mapping.items():
    print(f"{cat} → {code}")
# 输出:
# A → [1 0 0]
# B → [0 1 0]
# C → [0 0 1]

4. (可选)获取编码后的列名(sklearn 0.23+)

如果你的sklearn版本在0.23及以上,可以直接调用ColumnTransformer的get_feature_names_out()方法,得到带类别标识的列名,直观对应编码列:

feature_names = ct.get_feature_names_out()
print("编码后的列名:", feature_names)
# 输出:编码后的列名: ['encoder__col3_A' 'encoder__col3_B' 'encoder__col3_C' 'col1' 'col2']

版本兼容处理

如果你的sklearn版本过低(低于0.24),建议升级到最新稳定版:

pip install --upgrade scikit-learn

内容的提问来源于stack exchange,提问作者Viki Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:52:37