【问题标题】:Sanity Check for Training Phase of an Algorithm算法训练阶段的健全性检查
【发布时间】:2012-04-12 16:43:43
【问题描述】:

我有一个图像压缩算法,我可以对其进行训练,然后将其输入一些测试图像。 不过,这段代码似乎有问题。 为了测试这一点,我尝试给它与我训练过的相同的测试图像(即测试集==训练集)。现在我的一般问题如下

如果您使用与训练算法完全相同的数据来测试算法会发生什么?

我怀疑我应该得到相同的结果,就好像我从未训练过算法一样(即只是用原始数据测试过它,根本没有任何训练)

您如何看待这种情况? 您建议进行哪些一般类型的测试(如健全性检查)以确保算法训练阶段合理完成?


感谢您的回答。该算法使用上下文树加权,计算灰度图像某个点中 0 或 1 的概率。它使用该点之前的上下文来估计其概率(0/1)。压缩比(比特/字节)作为衡量结果的好处。 首先,我在单个图像(x)上运行 ctw,压缩率为 0.75,然后我用例如 6 个图像进行训练,并用训练集之外的相同图像(x)进行测试。但是训练后的压缩比是 0.80 bit/byte。图像为 2048*2048 灰度。 得到这些结果后,我尝试通过交叉验证来测试ctw的正确性,得到了我之前解释过的奇怪结果。

我希望这些信息能帮助我回答。

谢谢

【问题讨论】:

    标签: algorithm testing image-processing machine-learning


    【解决方案1】:

    这完全取决于算法和您的问题。一些(例如最近邻方法的分类)将很容易得到完美的答案。大多数将显示出比从与训练数据相同的分布中提取的不同测试数据更好的性能,但并不完美。我猜可能有些地方好像你从未训练过它,但对于大多数算法而言,未经任何训练的测试甚至都不是一个定义的操作,或者它只是一个完全随机的结果。

    对训练数据进行测试可以很好地检查您的代码是否正常运行,因为它应该做得很好。但最好只拥有一个用于测试的小型训练集/测试集,并确保它在测试集上执行合理的操作。对于分类或回归,您通常会做一些交叉验证的变体(以避免在训练集上进行测试)来进行真正的性能评估,并且您可以在一些可以快速运行以测试您的代码的小数据集上执行此操作。

    不过,我不太清楚您要处理的设置是什么。你能再解释一下吗?即算法如何使用其训练集进行图像压缩?

    【讨论】:

      【解决方案2】:

      你的怀疑是不正确的。 ML 算法通常应该在用于训练它的集合上给出非常好的结果(在某些情况下是完美的),除非该算法完全不适合该任务,或者如果它构思不当并且没有收敛。

      很难说,因为我不确定您是如何教授压缩算法的。您是否使用原始文件和输出文件大小的比率来衡量结果的“好坏”?您如何基于此调整算法,如何确保调整导致收敛,而不仅仅是随机效应?

      就完整性检查而言,如果算法在用于训练它的集合上给出的结果不优于随机结果,则该算法不起作用。反之则不然——训练集测试良好并不意味着算法运行良好。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-24
        • 2015-04-10
        相关资源
        最近更新 更多