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

使用OneHotEncoder处理分类特征用于逻辑回归时的报错解决求助

报错原因

OneHotEncoder默认输出稀疏矩阵,ColumnTransformer在包含输出稀疏矩阵的转换器时,整体返回结果也为稀疏矩阵格式。你直接用np.array()包裹稀疏矩阵时,不会将其转换为常规数值数组,而是会把整个稀疏矩阵对象作为object类型存入数组,因此出现你看到的错误输出。

解决方案

方案1:输出常规稠密数组(适合小数据量场景)

直接修改OneHotEncoder参数,令其直接输出稠密数组即可,无需额外转换:

  • sklearn 1.2及以上版本使用sparse_output参数:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import numpy as np

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(sparse_output=False), [0])], 
remainder='passthrough')
X = ct.fit_transform(X)
  • 旧版本sklearn使用sparse参数:
OneHotEncoder(sparse=False)

方案2:保留稀疏矩阵(推荐)

sklearn的逻辑回归LogisticRegression原生支持稀疏矩阵作为输入,保留稀疏矩阵可以大幅节省内存,你只需要去掉np.array()的包裹即可:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], 
remainder='passthrough')
X = ct.fit_transform(X)

如果后续确实需要将稀疏矩阵转为常规数组,可以调用toarray()方法:

X = ct.fit_transform(X).toarray()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:36:00