如何在MATLAB中向量化相交核函数?

Peiyun

我需要预先计算直方图交点内核矩阵,以便在MATLAB中使用LIBSVM。

假设x,y是两个向量。内核函数为K(x,y)= sum(min(x,y))。为了提高效率,在大多数情况下,最佳实践是对操作进行矢量化处理。

我想要做的是像计算核矩阵一样,计算两个矩阵之间的欧几里得距离,例如pdist2(A,B,'euclidean')。定义函数“ intKernel”后,我可以通过调用pdist2(A,B,intKernel)来计算交集内核。

我知道功能“ pdist2”可能是一个选择。但是我不知道如何编写自定义距离函数。同时,我不知道如何在一个压缩表达式中编码vector(1-by-M)和matrix(M-by-N)之间的交集内核。

“ repmat”可能不可行,因为矩阵真的很大,可以说是20000 x 360000。

任何帮助,将不胜感激。

佩云

本托伊13

我认为这pdist2是一个不错的选择,因此我可以帮助您定义距离函数。

根据该文档,自定义距离函数必须具有2个输入:第一个是1×N向量;第二个是1×N向量。第二个是M×N矩阵(请注意顺序!)。

为了避免使用repmat确实消耗大量内存的方法,可以使用bsxfun一些基本操作对扩展了单例维度的数据进行操作。您可以执行以下操作:

distance_kernel = @(x,Y) sum(bsxfun(@min,x,Y),2);

对列进行求和以获得列向量作为输出。

然后,只需致电pdist2即可完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章