【发布时间】:2021-12-21 02:50:25
【问题描述】:
我有两个整数数组,x 和 y:
x = np.array([[1, 2, 0, 12, 4],
[5, 2, 1, 10, 12]]
)
y = np.array([[1, 2, 0, 11, 4],
[5, 3, 0, 10, 15]]
)
我想使用x 来压缩/计算y 的描述长度(以“位”为单位),然后比较压缩后“节省的位”的数量。鉴于我们的数据很小,我们将简单地使用n_bits = 8(8 位)来存储每个整数。在未压缩的情况下,总共需要2 x 5 x 8 = 80 位来存储y(即DL(y) = 80)。同样,DL(x) = 80。现在,假设x 是压缩y 的最佳“模型”/“假设”,那么根据MDL 框架:
DL(y, x) = DL(y|x) + DL(x)
其中DL(x) 是存储x 所需的位数,DL(y|x) 是y 给定x 的剩余位数:
residual = x - y
array([[ 0, 0, 0, -1, 0],
[ 0, 1, -1, 0, 3]])
那么,这个残差数组的DL(y|x) 是什么?根据我遇到的一些示例(我不完全理解),DL(y|x) 可以通过首先识别残差中唯一值的数量来计算
n_bits = 8
n_unique = len(np.unique(residual)) # 4
DL_residual = 2 * 5 * np.log2(n_unique) + n_unique * n_bits # 52 bits
如果我理解正确,因为n_unique = 4(即残差的基数是 4),那么看起来2 * 5 * np.log2(n_unique) 正在考虑存储残差的位数。但是,我不知道为什么需要n_unique * n_bits(也许不是??)。我天真地认为2 * 5 * np.log2(n_unique) 就足够了。
我什至不知道这是否是计算残差描述长度的正确方法,最终我需要弄清楚残差的描述长度是多少。
【问题讨论】:
标签: python numpy information-theory