[英]How do I compute the variance of a column of a sparse matrix in Scipy?
我有一个很大的scipy.sparse.csc_matrix
并且想对其进行规范化。 即从每个元素中减去列平均值并除以列标准偏差 (std)i。
scipy.sparse.csc_matrix
有一个scipy.sparse.csc_matrix
.mean()
但是有没有一种有效的方法来计算方差或标准差?
您可以使用均值自行计算方差,公式如下:
E[X^2] - (E[X])^2
E[X]
代表平均值。 因此,要计算E[X^2]
您必须对csc_matrix
求平方,然后使用mean
函数。 要获得(E[X])^2
您只需对使用正常输入获得的mean
函数的结果求平方即可。
Sicco 有更好的答案。
但是,另一种方法是将稀疏矩阵一次一列转换为密集的 numpy 数组(与一次转换整个矩阵相比,内存要求较低):
# mat is the sparse matrix
# Get the number of columns
cols = mat.shape[1]
arr = np.empty(shape=cols)
for i in range(cols):
arr[i] = np.var(mat[:, i].toarray())
我所知道的最有效的方法是使用scikit
StandardScalar
:
from sklearn.preprocessing import StandardScaler
scalar = StandardScaler(with_mean=False)
scalar.fit(X)
然后方差在属性var_
:
X_var = scalar.var_
不过,奇怪的是,当我第一次使用pandas
加密时(非常慢),我的回答相差了几个百分点。 不知道哪个更准确。
有效的方法实际上是对整个矩阵进行致密化,然后以通常的方式对其进行标准化
X = X.toarray()
X -= X.mean()
X /= X.std()
正如@Sebastian 在他的评论中指出的那样,标准化会在减法步骤中破坏稀疏结构(引入大量非零元素),因此将矩阵保持为稀疏格式是没有用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.