我需要预先计算直方图交点内核矩阵,以便在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。
任何帮助,将不胜感激。
佩云
我认为这pdist2
是一个不错的选择,因此我可以帮助您定义距离函数。
根据该文档,自定义距离函数必须具有2个输入:第一个是1×N向量;第二个是1×N向量。第二个是M×N矩阵(请注意顺序!)。
为了避免使用repmat
确实消耗大量内存的方法,可以使用bsxfun
一些基本操作对扩展了单例维度的数据进行操作。您可以执行以下操作:
distance_kernel = @(x,Y) sum(bsxfun(@min,x,Y),2);
对列进行求和以获得列向量作为输出。
然后,只需致电pdist2
即可完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句