【问题标题】:one hot encoded sparse matrix in pythonpython中的一个热编码稀疏矩阵
【发布时间】:2020-11-27 18:29:27
【问题描述】:

我想创建一个热编码特征作为稀疏矩阵。我正在尝试使用pd.get_dummies,并将稀疏标志设置为True,如下所示。

X = df.iloc[:, :2]
y = df.iloc[:, -1]
X = pd.get_dummies(X, columns = ['id', 'video_id'], sparse=True)

但这似乎并没有给出预期的结果。我得到的只是一个热编码矩阵,而不是 CSR 矩阵。 创建单热编码稀疏矩阵的正确方法是什么?

提前致谢

【问题讨论】:

    标签: python pandas sklearn-pandas one-hot-encoding


    【解决方案1】:

    要获得稀疏矩阵,您可以使用scipy.sparse.csr_matrix,如下所述:Convert Pandas dataframe to Sparse Numpy Matrix directly

    import pandas as pd
    import scipy
    
    test_df = pd.DataFrame(np.arange(10), columns = ['category'])
    
    scipy.sparse.csr_matrix(pd.get_dummies(test_df).values
                           )
    

    输出

    <10x1 sparse matrix of type '<class 'numpy.longlong'>'
        with 9 stored elements in Compressed Sparse Row format>
    

    设置 sparse = True 与内部用于产生输出 (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html) 的对象类型(np.array vs SparseArray)有关:

    稀疏: 虚拟编码列应由 SparseArray (True) 还是常规 NumPy 数组 (False) 支持。

    如果您设置sparse = True,它会多次加速您的代码:

    • 使用sparse = True 获取假人
    %timeit pd.get_dummies(test_df.category, sparse=True)
    

    输出

    2.21 ms ± 117 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    • 使用sparse = False 获取假人
    %timeit pd.get_dummies(test_df.category, sparse=False)
    

    输出

    454 µs ± 18.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 2015-04-26
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多