在MATLAB中使用LIBSVM,需要预先计算直方图交集核矩阵.
假设x,y是两个向量。核函数为K(x,y) =和(min(x,y))。为了提高效率,大多数情况下的最佳做法是将操作向量化。
我想要做的是计算核矩阵,比如计算两个矩阵之间的欧几里德距离,比如pdist2(A,B,‘欧几里得’)。在定义函数'intKernel‘之后,我可以通过调用pdist2(A,B,intKernel)来计算交叉内核。
我知道函数'pdist2‘可能是一个选项。但是我不知道怎么写自定义的距离函数。然而,我不知道如何在一个浓缩表达式中编码向量(1×-M)和矩阵(M-by-N)之间的交集核。
“爬虫垫”可能是不可行的,因为基质真的很大,比如说,20000乘360000。
任何帮助都将不胜感激。
你好,佩云
发布于 2014-01-14 13:35:06
我认为pdist2是一个很好的选择,所以我帮助您定义您的距离函数。
根据doc,自定义距离函数必须有两个输入:第一个是1×N向量;第二个是M-by-N矩阵(注意顺序!)。
为了避免使用确实是内存消耗的repmat,您可以使用bsxfun对数据应用一些基本操作,并在单例维度上进行扩展。在您的情况下,您可以做以下事情:
distance_kernel = @(x,Y) sum(bsxfun(@min,x,Y),2);对列进行求和,得到一个列向量作为输出。
然后打电话给pdist2,你就完蛋了。
https://stackoverflow.com/questions/21114487
复制相似问题