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
相关产品推荐
相关产品推荐

