【问题标题】:Computing Description Length计算描述长度
【发布时间】:2021-12-21 02:50:25
【问题描述】:

我有两个整数数组,xy

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


    【解决方案1】:

    TLDR;您需要2 * 5 * np.log2(n_unique) 位来存储哪个唯一值放置在哪里,但您还需要n_unique * n_bits 位来存储唯一值本身。


    您为使用 x 压缩 y 而应用的转换如下所示:

    1. 使用x 作为y 的最佳模型并计算residual。 如果x 是完美的,您希望在residual 中看到全零。 但是,由于它并不完美,因此还剩下一些其他值。您已经获得了以下残差:
    array([[ 0,  0,  0, -1,  0],
           [ 0,  1, -1,  0,  3]])
    
    1. 许多值为 0,其他一些值相同。因此,为了压缩residual,我们确定唯一的整数值,并将每个值替换为存储唯一值的数据结构中的值的索引。我将在这里使用一个列表,特别是以下内容:
    [0, -1, 1, 3]
    

    当我用这个列表中的索引替换值时,残差变为:

    array([[ 0,  0,  0,  1,  0],
           [ 0,  2,  1,  0,  2]])
    

    由于索引甚至小于值,我们需要更少的位来存储它们。 我们只需要2 * 5 * log2(len(unique)) 位来存储这个转换后的数组。 但是,如果我们只存储它,我们将缺少需要插入来重建y 的实际值! 3. 因此,我们还需要存储包含唯一值的列表。这里的元素是具有通常位数n_bits 的整数。我们有n_unique=4,所以要存储unique,我们还需要n_unique * n_bits位来存储索引。

    如果x 可以完美预测y,那么residual 将全为零。 在这种情况下,只有一个唯一值 (0)。 这样,您只需存储数组的大小,或者如果您不想存储此信息,则将一串 0 编码为单个位。当然,您还必须存储 0

    事实上,如果residual 仅包含其他值,您将获得相同的压缩大小。

    【讨论】:

    • 非常感谢@cherrywoods 的详尽回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2016-03-16
    • 1970-01-01
    • 2019-06-29
    • 2021-02-19
    • 2016-06-12
    • 2013-06-06
    相关资源
    最近更新 更多