用于特征相似性的成对距离计算(多维矩阵)

时间:2014-07-10 02:43:23

标签: matlab matrix machine-learning computer-vision cluster-analysis

好的,这是matlab中的公式:

function D = dumDistance(X,Y)
n1 = size(X,2);
n2 = size(Y,2);
D = zeros(n1,n2);
for i = 1:n1
    for j = 1:n2
        D(i,j) = sum((X(:,i)-Y(:,j)).^2);
    end
end

Credits here(我知道它不是快速实现,但是为了基本算法)。

现在这是我的理解问题;

假设我们有一个矩阵dictionary=140x100字。还有一个矩阵page=140x40个单词。每列代表140维空间中的一个单词。

现在,如果我使用dumDistance(page,dictionairy),它将返回带有距离的40x100矩阵。

我想要实现的是找到page矩阵的每个单词与dictionary矩阵的接近程度,以便根据字典用直方图表示页面。说。

我知道,如果我拿最小值(40x100),生成一个1x100矩阵,其中最小值的位置代表我的直方图。

我真正无法理解的是这个40x100矩阵。这个矩阵代表什么数据呢?我无法在脑海中想象出这一点。

1 个答案:

答案 0 :(得分:1)

我开始之前的一些评论:

您应该使用pdist2代替。这要快得多,您将获得与dumDistance相同的结果。换句话说,你会这样称呼它:

D = pdist2(page.', dictionary.');

您需要转置pagedictionary,因为pdist2假设每个是一个观察点,而每列对应一个变量/要素。您的数据的结构使得每个都是一个观察点。这将返回40 x 100矩阵,就像您在dumDistance中看到的那样。但是,pdist2 不使用for循环


现在回答你的问题:

D(i,j)表示您网页上的字i与字典中的字j之间的欧几里德平方距离。您的页面上有40个单词,字典中有100个单词。每个单词由140维特征向量表示,因此D的行索引page的单词,而D的列索引dictionary的单词。

我在这里的“距离”是指特征空间。页面和词典中的每个单词都表示为140长度向量。 (i,j)的每个条目Dpage获取i th 向量,从dictionary获取j th 向量,将每个相应的组件减去,平方,然后将它们相加。然后将此输出存储到D(i,j)中。这使您i中的page字与j dictionary中的字D(i,j)之间存在差异。值越高,两个单词的不相似越多。

次要注意: pdist2计算欧几里德距离,而dumDistance计算欧几里德平方距离。如果您希望与dumDistance具有相同的内容,只需将D中的每个元素都放在pdist2上。换句话说,只需计算D.^2

希望这会有所帮助。祝你好运!