【发布时间】:2014-07-17 14:27:34
【问题描述】:
我正在使用以下功能:
kernel = @(X,Y,sigma) exp((-pdist2(X,Y,'euclidean').^2)./(2*sigma^2));
以下列方式计算一系列内核:
K = [(1:size(featureVectors,1))', kernel(featureVectors,featureVectors, sigma)];
但是,由于featureVectors 是一个巨大的矩阵(大约为 10000x10000),计算内核需要真的很长时间(例如,K)。
是否有可能以某种方式加快计算速度?
编辑:上下文
我通过libsvm 使用带有高斯内核的分类器,您可能已经从变量名和语义中注意到了这一点。
我现在(或多或少地)使用#terms~=10000 和#docs~=10000。这个#terms 是在停用词删除和词干提取之后产生的。 This course 表示拥有10000 功能是有意义的。
不幸的是,libsvm 没有自动实现高斯内核。因此,需要手动计算。我从here 那里得到了这个想法,但是内核计算(正如引用的问题所建议的那样)真的很慢。
【问题讨论】:
-
也许sparse matrices 会帮助你。
-
你的特征向量真的有 20000 个元素吗?这听起来不正常。你真的想要每个特征向量之间的成对距离吗?正如您所发现的,当然不是最佳的,也不是可扩展的。我会说你需要更多地研究你的算法。你不会用“微”优化来解决这个问题。随意描述更高级别的问题以获得一些建议。
-
查看更新后的问题。
标签: performance matlab time kernel function-handle