【问题标题】:sklearn OneHotEncoder with ColumnTransformer resulting in sparse Matrix in place of creating dummiessklearn OneHotEncoder 与 ColumnTransformer 导致稀疏矩阵代替创建假人
【发布时间】: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>

当我使用以下方法将数据转换为数据框后尝试查看数据时:

我做错了什么。我的数据如下所示:

【问题讨论】:

    标签: python scikit-learn data-science sklearn-pandas one-hot-encoding


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 2017-03-31
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多