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

