使用Kmeans在矩阵线上建立聚类

时间:2018-10-26 11:01:38

标签: python scikit-learn cluster-analysis k-means

大编辑

原始代码为:

与n线文本文件的读取相对应的图形绘制。每行包含4列,前三列是(x,y,z)点的坐标,第四列是此绘图不必要的二进制变量。每读取20行,就会读取一个骨架,该骨架是一组20个(x,y,z)点或关节,每个关节由每行的前三列组成。

文本文件内容的示例:文本文件包含860行,并且860/20 = 43,即创建20个(x,y,z)关节骨架的关节数量。然后,文本文件由43个骨骼组成,产生运动。因此,该文本文件表示动作。我称其为“示例”,因为数字有所不同。

构建代码以读取骨骼的运动之后,我制作了一个大的2D数组,其中包含所有运动,结果是22797x400数组,其中每行都是骨骼。因此,有22797个骨架,每个骨架有400列。我将这最后一个2D数组称为 final_array

我将奇异值分解(SVD)应用于 final_array ,在这里我使用了SVD中的V矩阵(产生S,V和D矩阵) final_array和V的简化版本(最初为400x400),由于V的简化版本为400x3,因此生成了22797x3 2D数组。出于某些原因(在此无需赘述)这是必要的,但这是为了减少尺寸以在流程的后续部分中绘制骨架。

因此,我有一个22797x3 2D数组,其中每行代表一个骨架,是根据上述操作构建的,我需要将聚类应用于此矩阵,在此矩阵中,使用Scikit-Kmeans将每行聚类为一个组。用Python学习。它必须是具有100个群集组的群集。

作为结果,我需要得到kmeans_labels结果,其中包含22797个元素的列表,通知每个行(骨架)所在的100个聚类组的分组。

到目前为止,我已经尝试过:

kmeans = KMeans(n_clusters=100, random_state=0).fit(matrix)

但是结果是以下错误消息:

发现小于n_clusters(100)的不同簇数(68)。可能是由于X中的重复点。   return_n_iter = True)

更改组号的次数无关紧要,错误消息会以较小的值返回。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

此错误意味着您的数据矩阵主要由重复的向量组成。 因此,从您的22797个数据点来看,只有68个不同的向量,其余的只是这68个值的重复。 尝试打印矩阵。我相信您要么没有按应有的方式读取数据,要么没有正确地测量数据