gpt4 book ai didi

python - PyCluster 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:30 25 4
gpt4 key购买 nike

我有以下 python 代码:

  from Pycluster import *
from numpy import *
import matplotlib.pyplot as plt

names = [ "A1", "A2", "A3", "A4", "A5", "A6", "A7",
"A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"]

distances = array([
[0.000, 0.840, 0.860, 0.115, 0.150, 0.055, 0.000, 0.070, 0.065, 0.000, 0.165, 0.000, 0.000, 0.000, 0.065],
[0.840, 0.000, 0.710, 0.060, 0.125, 0.060, 0.000, 0.070, 0.065, 0.000, 0.165, 0.000, 0.000, 0.000, 0.070],
[0.860, 0.710, 0.000, 0.055, 0.120, 0.055, 0.000, 0.070, 0.065, 0.000, 0.000, 0.000, 0.000, 0.000, 0.065],
[0.115, 0.060, 0.055, 0.000, 0.885, 0.455, 0.415, 0.060, 0.150, 0.050, 0.240, 0.000, 0.000, 0.065, 0.140],
[0.150, 0.125, 0.120, 0.885, 0.000, 0.510, 0.330, 0.125, 0.165, 0.050, 0.145, 0.000, 0.000, 0.000, 0.200],
[0.055, 0.060, 0.055, 0.455, 0.510, 0.000, 0.335, 0.060, 0.215, 0.050, 0.140, 0.000, 0.000, 0.000, 0.085],
[0.000, 0.000, 0.000, 0.415, 0.330, 0.335, 0.000, 0.000, 0.245, 0.060, 0.255, 0.125, 0.000, 0.075, 0.225],
[0.070, 0.070, 0.070, 0.060, 0.125, 0.060, 0.000, 0.000, 0.195, 0.000, 0.000, 0.000, 0.000, 0.000, 0.140],
[0.065, 0.065, 0.065, 0.150, 0.165, 0.215, 0.245, 0.195, 0.000, 0.045, 0.135, 0.000, 0.000, 0.000, 0.155],
[0.000, 0.000, 0.000, 0.050, 0.050, 0.050, 0.060, 0.000, 0.045, 0.000, 0.000, 0.120, 0.000, 0.045, 0.080],
[0.165, 0.165, 0.000, 0.240, 0.145, 0.140, 0.255, 0.000, 0.135, 0.000, 0.000, 0.000, 0.000, 0.150, 0.150],
[0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.125, 0.000, 0.000, 0.120, 0.000, 0.000, 0.175, 0.090, 0.105],
[0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.175, 0.000, 0.000, 0.000],
[0.000, 0.000, 0.000, 0.065, 0.000, 0.000, 0.075, 0.000, 0.000, 0.045, 0.150, 0.090, 0.000, 0.000, 0.000],
[0.065, 0.070, 0.065, 0.140, 0.200, 0.085, 0.225, 0.140, 0.155, 0.080, 0.150, 0.105, 0.000, 0.000, 0.000]
])

clusterids, error, nfound = kmedoids(distances, 6)
print "Cluster ids:", clusterids
print "error:", error
print "nfound:", nfound

cities_in_cluster = {}
for name, clusterid in zip(names, clusterids):
cities_in_cluster.setdefault(clusterid, []).append(name)

import textwrap
for centroid_id, city_names in cities_in_cluster.items():
print "Cluster around", names[centroid_id]
text = ", ".join(city_names)
for line in textwrap.wrap(text, 70):
print " ", line

colors = ['red', 'green', 'blue', 'yellow', 'white', 'black']

medoids = {}
for i in clusterids:
medoids[i]= medoids.get(i,0) + 1

plt.scatter(distances[:,0],distances[:,1], c=colors)
plt.show()

这段代码存在两个问题:
- 每次执行都会给出不同的聚类结果。是吗?
- 该图只绘制了 11 个点,而不是 15 个点。

错误在哪里?

谢谢。

最佳答案

kmedoids 使用随机初始化,并且可能收敛到局部最小值。

所以,是的,如果多次运行它,您会得到不同的结果。

你的距离矩阵有可能不是距离吗?

那里的 0 值太多

[0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.175, 0.000, 0.000, 0.000]

是一个极端的例子。通过查看你的矩阵,所有点本质上都是相同的,因为从任何一个点你都可以找到到任何其他点的 0 距离链!因此,你的矩阵不是距离矩阵。这种违反基本距离属性的行为可能会杀死 kmedoids 并导致其返回本质上随机的结果?

此外,不要绘制距离矩阵的散点图。散点图用于输入数据,而不是距离矩阵的前两行。如果您想从距离矩阵重建散点图,请使用多维缩放

关于python - PyCluster 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com