python 中的一个热编码稀疏矩阵
one hot encoded sparse matrix in python
我想创建一个热编码特征作为稀疏矩阵。我正在尝试使用 pd.get_dummies
并将稀疏标志设置为 True,如下所示。
X = df.iloc[:, :2]
y = df.iloc[:, -1]
X = pd.get_dummies(X, columns = ['id', 'video_id'], sparse=True)
但这似乎并没有给出预期的结果。我得到的只是一个热编码矩阵,而不是 CSR 矩阵。
创建单热编码稀疏矩阵的正确方法是什么?
提前致谢
要获得稀疏矩阵,您可以使用 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
与 SparseArray
):
sparse:
Whether the dummy-encoded columns should be backed by a SparseArray (True) or a regular NumPy array (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)
我想创建一个热编码特征作为稀疏矩阵。我正在尝试使用 pd.get_dummies
并将稀疏标志设置为 True,如下所示。
X = df.iloc[:, :2]
y = df.iloc[:, -1]
X = pd.get_dummies(X, columns = ['id', 'video_id'], sparse=True)
但这似乎并没有给出预期的结果。我得到的只是一个热编码矩阵,而不是 CSR 矩阵。 创建单热编码稀疏矩阵的正确方法是什么?
提前致谢
要获得稀疏矩阵,您可以使用 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
与 SparseArray
):
sparse: Whether the dummy-encoded columns should be backed by a SparseArray (True) or a regular NumPy array (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)