我有形状为(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)。
答案 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数据,但是根据数据需求,这可能是一个过大的选择。