使用Scikit-learn在3D数据上应用Kmeans

时间:2019-04-15 13:52:54

标签: python-3.x scikit-learn k-means

我有形状为(n,68,2)的数据(一个numpy数组 p )。我正在尝试使用Scikit-learn将k-means聚类应用于此数据。我需要从此数据中找到 k 个聚类,聚类后的最终输出数据的尺寸应为(k,68,2)

当我向Kmeans函数提供 p

return null;

显示错误

  

ValueError:找到的数组为暗3。估计值应为<= 2。

要解决此问题,我必须分离x和y坐标以获得 2 个维度为(n,68)的数组,并将kmeans分别应用于它们并合并结果稍后。

kmeans = KMeans(n_clusters=no_of_clusters, random_state=0).fit(p1)

我想将kmeans直接应用于整个2D坐标,而不必分开x和y并分别应用它们。但是我确实需要尺寸为(k,68,2)的输出数据,而不是在尝试重塑数组时得到的(k,2)

1 个答案:

答案 0 :(得分:0)

sklearn KMeans fit()方法期望X具有2d形状,如文档here中所示:

X : {array-like, sparse matrix}, shape = [n_samples, n_features]

这意味着您必须重塑np数组才能使用该库。新形状取决于每个维度的实际含义(很抱歉,不能从您的问题中完全弄清楚),但是假设n是样本数,68,2是可以转换x的数据点的形状通过以下方式:

x = x.reshape(n,68*2)

正如评论中正确指出的那样,您还可以编写自己的距离方法来处理3-d数据,但是根据数据需求,这可能是一个过大的选择。