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