【问题标题】:Fisher Information Calculation ExtendedFisher 信息计算扩展
【发布时间】:2018-07-19 14:27:59
【问题描述】:

给定您的数据矩阵 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 矩阵会更有效,还是有一种线性代数方法可以加快速度?

谢谢!

【问题讨论】:

  • 你可以看看np.tensordot
  • knd的典型值是多少?
  • 我正在构建一个前向选择程序,所以d 通常从 2 开始,到 20-30 左右结束?然后k 会随着每一步而减少。

标签: python numpy matrix statistics tensor


【解决方案1】:

方法#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 版本进一步加快速度。

【讨论】:

  • 张量点抛出错误:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python\Python35\lib\site-packages\numpy\core\numeric.py", line 1309, in tensordot if as_[axes_a[k]] != bs[axes_b[k]]: IndexError: tuple index out of range 但他们有那些轴? >>> V.shape (100, 100) >>> X.shape (10, 100, 7) 或者我需要在V 中添加np.newaxis 吗?
  • @BradFlynn XV 的形状是什么?
  • X.shape (10, 100, 7)V.shape (100, 100)
  • @BradFlynn 对我来说很好。再检查一下?
  • 这可能是因为V 是一个稀疏矩阵,这是必要的,因为n 在我的大部分或所有用例中都会变大
猜你喜欢
  • 1970-01-01
  • 2013-05-31
  • 2021-12-20
  • 1970-01-01
  • 2016-12-01
  • 2017-10-28
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
相关资源
最近更新 更多