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

ColumnTransformer+OneHotEncoder新增行后输出异常求助

问题分析与解决

核心原因

这是scikit-learn中OneHotEncoder的sparse_output参数默认行为导致的:

  • 该参数默认值为'auto',会自动判断输出格式:当转换后的特征矩阵非零元素占比较高(比如初始8行数据时,分类列类别少,one-hot后大部分元素都是1,密集数组更高效),就输出密集数组;
  • 新增一行BlueGiant,307,5,257后,分类列的类别数量增加,one-hot转换后的特征维度变大,非零元素占比降低,此时scikit-learn会自动切换为输出稀疏矩阵,以此节省内存。

解决办法

在初始化OneHotEncoder时,显式设置sparse_output=False,强制输出密集数组:

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

# 初始化ColumnTransformer时指定OneHotEncoder的参数
preprocessor = ColumnTransformer(
    transformers=[
        ('cat', OneHotEncoder(sparse_output=False), [0])  # 强制输出密集数组
    ],
    remainder='passthrough'
)

这样无论样本量或类别数如何变化,都会输出预期的密集数组格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:50:52