python - Fisher 信息计算扩展

标签 python numpy matrix statistics tensor

给定数据矩阵 X.shape = (n, d) 和单个预测变量的估计值 y_pred.shape = (n,),可以计算Fisher Information 喜欢这样:

    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

对于使用 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)

注意:我们可以在 einsum 调用中尝试使用 optimize=True 来进一步提高较新 NumPy 版本的速度。

关于python - Fisher 信息计算扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48695308/

相关文章:

python - 如何抓取 Quora 个人资料页面的 'More' 部分?

python - 如何解释 scipy.stats.probplot 结果?

c++ - 如何在numpy c-api中共享随机数生成器?

C++在循环期间将 vector 存储在数组中

python - YouTube-dl 从 Reddit 下载并命名视频

python - 从嵌套字典中删除字段的优雅方法

python - 是否有一个脚本来管理/搜索 python 片段,它理解 python 代码,如 nullege.com?

python - numpy 序列的向量化分配

r - 使用 lpsolve 在 R 中进行线性规划

C - (Printf) 强制显示零