Fisher信息计算扩展

时间:2018-02-08 21:46:58

标签: python numpy matrix statistics tensor

根据您的数据矩阵X.shape = (n, d)和单个预测变量的估算值y_pred.shape = (n,),可以像这样计算Fisher信息I

    V = diags(y_pred * (1 - y_pred)) # V.shape = (n, n), sparse from scipy.sparse.diags
    I = X.T.dot(V).dot(X) # I.shape = (d, d)

现在让我们说我想将其扩展到k数据矩阵,所以X.shape = (k, n, d),给我k FIM I.shape = (k, d, d)。循环遍历k矩阵会更有效吗,还是有一种线性代数方法可以加速它?

谢谢!

1 个答案:

答案 0 :(得分:2)

方法#1

对于np.tensordotnp.einsum -

的矢量化解决方案,我们可以分两步完成
parte1 = np.tensordot(X, V, axes=(1,0))
out = np.einsum('ijk,ikl->ijl',parte1, X)

对于稀疏矩阵V,请使用以下内容获取parte1

(X.swapaxes(1,2).reshape(-1,n)*V).reshape(k,d,n)

方法#2

或者,在一次einsum电话会议中

np.einsum('ijk,jl,ilm->ikm',X, V, X)

注意:我们可以在optimize=True调用中试用einsum,以便在新的NumPy版本中实现进一步的加速。