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中OneHotEncoder

sklearn.preprocessing.OneHotEncoder

如何在 sklearn 中使用 OneHotEncoder 的输出?

sklearn中的LabelEncoder和OneHotEncoder的区别

onehotencoder 的 sklearn 掩码不起作用

在 sklearn 0.14 中使用 OneHotEncoder 指定要分类的选择特征