我开始使用 dlib,我很难理解内核的实现方式。我从 k-kmeans 算法开始,因为我知道这种聚类方法。但是我无法弄清楚内核的计算位置。输入数据是矩阵(不是核),算法从不将数据转换为核。我希望内核类返回一个方阵。但是我还没有见过这样的东西!我想使用 dlib 来实现使用内核的聚类算法,而 dlib 听起来是一个很好的解决方案。有没有人有关于它是如何实现的文档或者可以向我解释它是如何工作的?
感谢您的帮助!
我开始使用 dlib,我很难理解内核的实现方式。我从 k-kmeans 算法开始,因为我知道这种聚类方法。但是我无法弄清楚内核的计算位置。输入数据是矩阵(不是核),算法从不将数据转换为核。我希望内核类返回一个方阵。但是我还没有见过这样的东西!我想使用 dlib 来实现使用内核的聚类算法,而 dlib 听起来是一个很好的解决方案。有没有人有关于它是如何实现的文档或者可以向我解释它是如何工作的?
感谢您的帮助!
内核基本上只是一个函数,它接受两个输入样本并输出一个数字。所以,是的,有时你会看到代码,然后计算 N 个 N 个样本的所有可能的核函数输出的 N×N 矩阵。然而,这是一个有点幼稚的实现策略,因为它需要 O(N^2) RAM。所以大多数现实世界的内核方法软件使用某种延迟评估或缓存策略来避免这个问题。
在 dlib 中的内核 K-means 实现中,这是通过kcentroid对象完成的。在 kcentroid 内部,您可以看到它在许多地方调用内核函数并执行所有“内核工作”。您可以阅读 kcentroid 的文档以了解它的作用。虽然,如果你刚刚开始使用内核方法,那么你真的需要一本关于这个主题的书。我强烈建议选择其中之一:
对于一组 N 个数据点,内核通常由 NxN 矩阵指定,其第 (i,j) 项给出数据点 i 和数据点 j 之间的内核值。这适用于内核方法,只要矩阵是对称的且正定的,对于真正的内核来说,这保证是正确的。