Numpy 以压缩稀疏行格式(csr_矩阵)为矩阵中的值取对数

Numpy 以压缩稀疏行格式(csr_矩阵)为矩阵中的值取对数,numpy,scikit-learn,normalization,sparse-matrix,transformation,Numpy,Scikit Learn,Normalization,Sparse Matrix,Transformation,我对从countvectorizing文本数据中获得的计数数据的对数感兴趣。我很想测试这种转换(规范化)是否有助于提高sklearn中模型的性能 这就是我所拥有的: TEXT = [data[i].values()[3] for i in range(len(data))] from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer(min_df=0.01,max_df =

我对从countvectorizing文本数据中获得的计数数据的对数感兴趣。我很想测试这种转换(规范化)是否有助于提高sklearn中模型的性能

这就是我所拥有的:

TEXT = [data[i].values()[3] for i in range(len(data))]

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(min_df=0.01,max_df = 2.5, lowercase = False, stop_words = 'english')

X = vectorizer.fit_transform(TEXT)
X = [math.log(i+1) for i in X]
但是,在运行此代码时,我得到一个错误:

File "nlpQ2.py", line 29, in <module>
X = [math.log(i+1) for i in X]
File "/opt/conda/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 337, in __add__
raise NotImplementedError('adding a nonzero scalar to a '
NotImplementedError: adding a nonzero scalar to a sparse matrix is not supported
这就产生了

NotImplementedError: adding a nonzero scalar to a sparse matrix is not supported

有办法解决这个问题吗?非常感谢您的帮助。

您只需通过
todense()
方法将稀疏矩阵
X
转换为密集数组,然后使用NumPy计算对数:

X = np.log(1 + X)
如果
X
很大,将其转换为密集矩阵可能会耗尽RAM。在这种情况下,该方法是您的朋友,因为它对稀疏矩阵进行操作:

X = X.log1p()

你能考虑接受我的答案,点击接受按钮,这样我就能获得帮助你的信用吗?这是向其他人发出的礼貌信号,表示问题已解决,您将获得+2代表。
X = X.log1p()