Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Dendogram和Scipy不´;行不通_Python_Scipy_Hierarchical Clustering - Fatal编程技术网

Python:Dendogram和Scipy不´;行不通

Python:Dendogram和Scipy不´;行不通,python,scipy,hierarchical-clustering,Python,Scipy,Hierarchical Clustering,我想使用scipy的dendogram。 我有以下数据: 我有一张有七种不同方法的清单。例如: Y = [71.407452200146807, 0, 33.700136456196823, 1112.3757110973756, 31.594949722819372, 34.823881975554166, 28.36368420190157] X = ["user1", "user2", "user3", "user4", "user5", "user6", "user7"] 为不同的用

我想使用scipy的dendogram。 我有以下数据:

我有一张有七种不同方法的清单。例如:

Y = [71.407452200146807, 0, 33.700136456196823, 1112.3757110973756, 31.594949722819372, 34.823881975554166, 28.36368420190157]
X = ["user1", "user2", "user3", "user4", "user5", "user6", "user7"]
为不同的用户计算每个平均值。例如:

Y = [71.407452200146807, 0, 33.700136456196823, 1112.3757110973756, 31.594949722819372, 34.823881975554166, 28.36368420190157]
X = ["user1", "user2", "user3", "user4", "user5", "user6", "user7"]
我的目标是在dendorgram的帮助下显示上述数据

我尝试了以下方法:

Y = [71.407452200146807, 0, 33.700136456196823, 1112.3757110973756, 31.594949722819372, 34.823881975554166, 28.36368420190157]
X = ["user1", "user2", "user3", "user4", "user5", "user6", "user7"]

# Attempt with matrix
#X = np.concatenate((X, Y),)
#Z = linkage(X)

Z = linkage(Y)
# Plot the dendogram with the results above
dendrogram(Z, leaf_rotation=45., leaf_font_size=12. , show_contracted=True)
plt.style.use("seaborn-whitegrid")
plt.title("Dendogram to find clusters")
plt.ylabel("Distance")
plt.show()
但它说:

ValueError:压缩距离矩阵“y”的长度n必须是一个二项式系数,即必须有一个k,使得(k\choose 2)=n)

我已经尝试将我的数据转换成矩阵。与:

# Attempt with matrix
#X = np.concatenate((X, Y),)
#Z = linkage(X)
但这也不行

有什么建议吗


谢谢:-)

所以您在
Y
len(Y)=7中使用了7个观察值

但根据的文件,观察次数
len(Y)
应为

{n \choose 2} = len(Y)
也就是说

1/2 * (n -1) * n = len(Y)
所以Y的长度应该是n是一个有效的整数。

的第一个参数要么是一个nxm数组,表示m维空间中的n个点,要么是一个包含。这是两个截然不同的意思!第一个是“原始数据”,即“观察”。第二种格式假定您已经计算了观测值之间的所有距离,并且您将这些距离提供给
链接
,而不是原始点

看起来您需要第一个案例(原始数据),m=1。因此,您必须重塑输入以获得形状(n,1)

替换此项:

Z = linkage(Y)
与:


到目前为止,我通过阅读文档了解到的是
y必须是(n | 2)大小的向量
。我试过你的代码,如果
len(Y)
是15,它就可以工作了。想弄明白为什么它不能用在比这更小的东西上。听起来很奇怪。但这实际上是一个用例,不是吗?应该有可能构建具有“相同”意思的用户集群。你是对的。我扩展了我的Y,它工作了。不幸的是,丹道图看起来很奇怪。只有一个集群。扩展我的Y轴的正确方法是什么?我试图用相同的值再次扩展它。。比如
Y.extend(Y)
而不是计算平均值,我使用了原始值。因此,我的Y更大。这对我有用:-)多亏了
linkage
的第一个参数的意义取决于参数的维数。当其为一维时,值被解释为点之间的成对距离,存储在压缩排列中,而不是点(即观察值)本身。说观察值的数量应该是
{n\choose 2}
是不正确的。这应该是答案,因为我们不必修改数据的长度