C++ 理解Dlib内核实现

C++ 理解Dlib内核实现,c++,algorithm,machine-learning,dlib,C++,Algorithm,Machine Learning,Dlib,我开始使用dlib,我很难理解内核的实现方式。我从k-kmeans算法开始,因为我知道这种聚类方法。但是,我无法找出内核的计算位置。输入数据是一个矩阵(不是内核),算法从不将数据转换为内核。 我希望内核类返回一个平方矩阵。但我从没见过这样的事! 我想使用dlib实现一个使用内核的集群算法,dlib听起来是一个很好的解决方案。有没有人有关于它是如何实现的文档,或者可以向我解释它是如何工作的 谢谢你的帮助 对于一组N个数据点,内核通常由一个NxN矩阵指定,其(i,j)项给出了数据点i和数据点j之间的

我开始使用dlib,我很难理解内核的实现方式。我从k-kmeans算法开始,因为我知道这种聚类方法。但是,我无法找出内核的计算位置。输入数据是一个矩阵(不是内核),算法从不将数据转换为内核。 我希望内核类返回一个平方矩阵。但我从没见过这样的事! 我想使用dlib实现一个使用内核的集群算法,dlib听起来是一个很好的解决方案。有没有人有关于它是如何实现的文档,或者可以向我解释它是如何工作的


谢谢你的帮助

对于一组N个数据点,内核通常由一个NxN矩阵指定,其(i,j)项给出了数据点i和数据点j之间的内核值。只要矩阵是对称的和正定的,这就适用于内核方法,对于真正的内核,这是保证为真的。

内核基本上只是一个函数,它接受两个输入样本并输出一个数字。是的,有时您会看到这样的代码,它会计算N个样本的所有可能的内核函数输出的N×N矩阵。然而,这是一种有点幼稚的实现策略,因为它需要O(N^2)RAM。因此,大多数真实世界的内核方法软件使用某种延迟计算或缓存策略来避免这个问题

在dlib中的内核K-means实现中,这是通过对象完成的。在kcentroid中,您可以看到它在许多地方调用内核函数,并执行所有“内核工作”。您可以阅读kcentroid的文档以了解它的功能。尽管如此,如果您刚刚开始使用内核方法,那么您确实需要一本关于这个主题的书。我强烈建议您选择以下选项之一:

  • 用核学习:支持向量机、正则化、优化及其他,Bernhard Schlkopf和Alexander J.Smola著
  • John Shawe Taylor和Nello Cristianini的模式分析核方法

好吧,如果我真的理解你说的话,在这个示例中,如果k-kmeans没有用作内核,但如果提供了内核,它的工作原理是一样的?那么如何从输入的数据中获取内核呢?