好的,这是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
这里的功劳(我知道这不是一个快速的实现,而是出于基本算法的考虑)。
现在这是我的理解问题;
假设我们有一个矩阵dictionary=140x100
词。和一个矩阵page=140x40
字。每列代表140维空间中的一个单词。
现在,如果使用dumDistance(page,dictionairy)
它,它将返回一个40x100
带有距离的矩阵。
我要实现的是找到page
矩阵的每个单词与矩阵有多接近dictionary
,以便根据字典用直方图表示页面。
我知道,如果我采用min(40x100),则将得到一个1x100矩阵,该矩阵的最小值表示我的直方图。
我在这里真正无法理解的是这个40x100矩阵。这个矩阵仍然代表什么数据?我在脑海中无法想象这一点。
在我开始之前的小评论:
您应该真正使用它pdist2
。这样会更快,并且您将获得与相同的结果dumDistance
。换句话说,您可以这样称呼它:
D = pdist2(page.', dictionary.');
你需要调换page
和dictionary
作为pdist2
假定每个行是一个观察,而每列对应的变量/功能。您的数据结构使得每一列都是一个观察值。这将返回一个40 x 100
矩阵,就像您在中看到的一样dumDistance
。但是,pdist2
不使用for
loops。
现在到您的问题:
D(i,j)
表示页面上的单词与词典中的单词之间的欧几里德平方距离。您的页面上有40个单词,而字典中有100个单词。每个词都由140维特征向量表示,因此索引的行索引为的单词,而索引的列索引为的单词。i
j
D
page
D
dictionary
我在这里所说的“距离”是指特征空间。页面和词典中的每个单词都表示为140个长度的向量。每个条目(i,j)
的D
需要第i个从向量page
和第j个向量从dictionary
每个它们对应的分量的相减,平方,然后将它们相加。然后将此输出存储到中D(i,j)
。这给你的字间的差异性i
,从你page
和字j
从你dictionary
的D(i,j)
。值越高,两个单词越相似。
次要说明: pdist2
计算欧几里得距离,同时dumDistance
计算欧几里得平方距离。如果您想拥有与之相同的东西dumDistance
,只需将D
from中的每个元素平方即可pdist2
。换句话说,只需计算即可D.^2
。
希望这可以帮助。祝你好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句