Matlab中簇内两两平方距离和的计算验证与原理问询
关于Krzanowski-Lai准则中簇内两两距离平方和的Matlab代码疑问
问题1:代码计算的是哪种距离?
这段代码计算的是欧几里得距离的平方,完全对应公式中的$|u-v|^2$,即簇内任意两个观测样本之间的欧氏距离平方值。
问题2:代码与公式的对应性推导说明
目标公式为:
$$D_r = \sum_{u,v\in Cluster}\left|u-v\right|^{2}$$
其中$u$、$v$是cluster矩阵的列向量(行代表变量,列代表观测样本),以下是代码与公式的对应推导:
- 欧氏距离平方的展开
对于任意两个列样本$u$和$v$,欧氏距离平方可展开为:
$$|u-v|^2 = (u-v)^T(u-v) = u^Tu + v^Tv - 2u^Tv$$
其中:
- $u^Tu$是样本$u$自身的点积(即各元素平方和),对应代码中
clstrsq = dot(cluster,cluster,1):dot(cluster,cluster,1)对cluster的每一列计算自点积,得到的clstrsq是一个行向量,每个元素对应一个样本的$u^Tu$值。
构造两两样本的平方和项
bsxfun(@plus,clstrsq',clstrsq)将clstrsq转置为列向量后,与原行向量做广播加法,得到的矩阵中每个位置$(i,j)$的值为$u_i^Tu_i + u_j^Tu_j$,对应展开式的前两项之和。构造交叉项
2*(cluster'*cluster)中,cluster'*cluster的$(i,j)$位置是$u_iTu_j$(两个样本的点积),乘以2后恰好对应展开式的$-2uTv$项的相反数。求和得到最终结果
将前两步的结果相减,得到的矩阵每个位置$(i,j)$就是$|u_i - u_j|^2$,最后通过sum(sum(...))将矩阵所有元素累加,就得到了簇内所有样本两两之间的距离平方和,完全匹配目标公式$D_r$的计算逻辑。
注:代码中包含了$u=v$的情况(样本自身与自身的距离平方为0),但由于0不影响求和结果,最终计算值与公式要求的结果一致。
内容的提问来源于stack exchange,提问作者バシル
相关产品推荐
相关产品推荐

