sklearn OneHotEncoder 与 ColumnTransformer 导致稀疏矩阵代替创建假人
Posted
技术标签:
【中文标题】sklearn OneHotEncoder 与 ColumnTransformer 导致稀疏矩阵代替创建假人【英文标题】:sklearn OneHotEncoder with ColumnTransformer resulting in sparse Matrix in place of creating dummies 【发布时间】:2021-03-25 15:06:45 【问题描述】:我正在尝试使用 OneHotEncoder 和 ColumnTransformer 将分类值转换为整数。我的理解是它应该为 pd.get_dummies 等类别列创建虚拟对象。我的文件有大约 1500 条记录和 10 列。
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
cat_features=['COMPANY_NAME', 'BRAND_NAME']
enc=OneHotEncoder()
transformer = ColumnTransformer([("enc",
enc,
cat_features)],
remainder="passthrough")
df_transformed = transformer.fit_transform(df_model)
df_transformed)
结果是:
<1574x37 sparse matrix of type '<class 'numpy.float64'>'
with 15513 stored elements in Compressed Sparse Row format>
当我使用以下方法将数据转换为数据框后尝试查看数据时:
我做错了什么。我的数据如下所示:
【问题讨论】:
【参考方案1】:您需要先将其转换为密集数组,然后再将其放入 data.frame,参见help page:
pd.DataFrame(df_transformed.toarray())
或者您将转换器设置为始终返回密集数组,请参阅the sparse threshold option
transformer = ColumnTransformer([("enc",
enc,
cat_features)],
remainder="passthrough",sparse_threshold=0)
【讨论】:
以上是关于sklearn OneHotEncoder 与 ColumnTransformer 导致稀疏矩阵代替创建假人的主要内容,如果未能解决你的问题,请参考以下文章
sklearn.preprocessing.OneHotEncoder
如何在 sklearn 中使用 OneHotEncoder 的输出?
sklearn中的LabelEncoder和OneHotEncoder的区别