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

Sklearn的OneHotEncoder输出非表格格式,如何正确完成特征编码

问题原因

你得到的是稀疏矩阵的打印格式,本质是OneHotEncoder默认输出稀疏矩阵来降低高基数类别特征编码后的内存占用,直接用np.array()转换不会自动把稀疏矩阵转为可直接查看、适配所有模型的稠密numpy数组。

解决方法

方案1:初始化编码器时直接指定输出稠密数组(推荐)

直接在定义OneHotEncoder时配置参数,一步得到稠密数组:

  • sklearn 1.2及以上版本代码:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import numpy as np

# 新增sparse_output=False参数指定输出稠密数组
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(sparse_output=False), [0])], remainder='passthrough')
x_yam = ct.fit_transform(x_yam)
  • sklearn 1.2以下旧版本,把sparse_output=False替换为sparse=False即可。

方案2:手动转换已生成的稀疏矩阵

如果不想修改编码器初始化参数,也可以在转换后手动调用方法转稠密数组:

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

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
# 调用toarray()将稀疏矩阵转为稠密数组
x_yam = np.array(ct.fit_transform(x_yam).toarray())

注意:如果Entity列的唯一值非常多(高基数特征),转为稠密数组会占用大量内存。XGBoost、LightGBM、Sklearn自带的逻辑回归、SVM等大多数机器学习模型都原生支持稀疏矩阵输入,这种场景不需要转稠密数组,直接用原始稀疏矩阵训练即可。

内容的提问来源于stack exchange,提问作者Umut K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:57:01