好的,这是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矩阵。这个矩阵代表什么数据呢?我无法在脑海中想象出这一点。
答案 0 :(得分:1)
我开始之前的一些评论:
您应该使用pdist2
代替。这要快得多,您将获得与dumDistance
相同的结果。换句话说,你会这样称呼它:
D = pdist2(page.', dictionary.');
您需要转置page
和dictionary
,因为pdist2
假设每个行是一个观察点,而每列对应一个变量/要素。您的数据的结构使得每个列都是一个观察点。这将返回40 x 100
矩阵,就像您在dumDistance
中看到的那样。但是,pdist2
不使用for
循环。
现在回答你的问题:
D(i,j)
表示您网页上的字i
与字典中的字j
之间的欧几里德平方距离。您的页面上有40个单词,字典中有100个单词。每个单词由140维特征向量表示,因此D
的行索引page
的单词,而D
的列索引dictionary
的单词。
我在这里的“距离”是指特征空间。页面和词典中的每个单词都表示为140长度向量。 (i,j)
的每个条目D
从page
获取i th 向量,从dictionary
获取j th 向量,将每个相应的组件减去,平方,然后将它们相加。然后将此输出存储到D(i,j)
中。这使您i
中的page
字与j
dictionary
中的字D(i,j)
之间存在差异。值越高,两个单词的不相似越多。
次要注意: pdist2
计算欧几里德距离,而dumDistance
计算欧几里德平方距离。如果您希望与dumDistance
具有相同的内容,只需将D
中的每个元素都放在pdist2
上。换句话说,只需计算D.^2
。
希望这会有所帮助。祝你好运!