我必须设置:
A = {(2, 3, 4), (3, 1, 3), (2, 5, 4)}
B = {(4, 4, 4), (3, 7, 3)}
我现在想知道平均链接,但实际上我不知道 知道用哪个集合计算。
dist_al(A, B) = 1 / (|A| * |B|) * SUM dist(x, y)
此示例中的|A| * |B|
是什么?它是3 * 2(在集合B中设置A *集合)还是9 * 6(每个数字)?
如果它是我得到的第一个:
1/6 * (2 + 2+ 2+ 1+ 5+ 1+ 1+ 1+ 1+ 4+ 1+ 3+ 1+ 1+ 1+ 1+ 4+ 3+ 3+ 3+ 2+ 6+ 2+ 1+ 1+ 1+ 4+ 2+ 2+ 2+ 1+ 5+ 1+ 1+ 1+ 1+ 2+ 2+ 2+ 1+ 3+ 1)
=> 14,16
如果是第二个我
1/54 * (2 + 2+ 2+ 1+ 5+ 1+ 1+ 1+ 1+ 4+ 1+ 3+ 1+ 1+ 1+ 1+ 4+ 3+ 3+ 3+ 2+ 6+ 2+ 1+ 1+ 1+ 4+ 2+ 2+ 2+ 1+ 5+ 1+ 1+ 1+ 1+ 2+ 2+ 2+ 1+ 3+ 1)
=> 1,5
答案 0 :(得分:2)
在通用的数学符号中,|A|
是集A
中元素的数量
即|{ Apple, Banana, Obama }| = 3
,假设这些是三个不同的对象。
由于有6对成对距离,除以6也是显而易见的选择。
请注意,存在两种不同的“平均”联系。这些名字在书本之间略有不同。 UPGMA和WPGMA有一些明确的定义,看看这些!
哦,请注意,在实施层次聚类时,通常会使用此公式 计算它,而是使用基于之前结果的更新公式。
因此,平均连锁(使用欧几里德距离)是:
sum(2.2360679775 4.24264068712 3.31662479036
6.0 2.2360679775 2.44948974278)/6
= 3.4134818625433332
答案 1 :(得分:0)
要在avgerage-linkage算法中找到两个聚类之间的距离,您必须计算A组中每个数据点与组B中每个数据点的欧几里德距离。然后取所有距离的平均值。
所以:
betweenClusterDistance =((euclidinDistance((2,3,4),(4,4,4))+ euclidinDistance((3,1,3),(4,4,4))+ euclidinDistance((2,5,4) ),(4,4,4))+ ... +欧几里德距离((2,5,4),3,7,3)))/(欧几里德距离调用次数))
看看以下代码:
public static double findClusterDistance(ClusterObject cluster1,
ClusterObject cluster2) {
double distance = 0.0;
int itt = 0;
for (DataObject data1 : cluster1.getClusterList()) {
for (DataObject data2 : cluster2.getClusterList()) {
itt++;
distance += getEuclidianDistance(data1.getDimensions(),
data2.getDimensions());
}
}
return distance / itt;
}
public static double getEuclidianDistance(List<Double> list1,
List<Double> list2) {
double euclidianDistance = 0.0;
double partialDistance = 0.0;
for (int i = 0; i < list1.size(); i++) {
partialDistance += Math.pow(list2.get(i) - list1.get(i), 2);
}
euclidianDistance = Math.sqrt(partialDistance);
return euclidianDistance;
}