更高维度的 KMeans 聚类是不是可行?
Posted
技术标签:
【中文标题】更高维度的 KMeans 聚类是不是可行?【英文标题】:Is KMeans Clustering with higher dimensions possible?更高维度的 KMeans 聚类是否可行? 【发布时间】:2021-01-22 17:33:42 【问题描述】:我有几百个 3d 数组,我想用它们做一些聚类分析,但是 sklearn.cluster.KMeans
只会做一个 2D 数组。我的每个数组的大小都是(56,88,56)
,我有300
。当我将它们组合为一个数组时,我得到(300,56,88,56)
。 KMeans 给出错误ValueError: Found array with dim 4. Estimator expected <= 2.
。我解决这个问题的一种方法是在我的数组上使用np.ndarray.flatten()
,所以我的新数组是(275968,)
,当组合成一个数组时,我得到(300,275968)
,我可以使用KMeans 聚类。有没有办法使用 4D 阵列执行聚类分析,或者我最终会得到与展平阵列以进行 2D 分析相同或相似的结果?
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import nibabel as nib
import os, sys
from tqdm import tqdm
DIR = '(56x88x56)\\'
flatten_list = []
for r,d,f in os.walk(DIR):
for file in tqdm(f):
path = DIR + file
cp = nib.load(path).get_fdata()
cp = np.array(cp)
array_flatten = np.ndarray.flatten(cp)
flatten_list.append(array_flatten)
flatten_list = np.array(flatten_list)
kmeans = KMeans(n_clusters = 10, random_state = 0, verbose = 1).fit(flatten_list)
cluster_labels = kmeans.labels_
print(cluster_labels)
【问题讨论】:
【参考方案1】:K-Means 聚类的步骤是:
选取一些随机中心:对所有坐标采样相同的分布,因此该操作相对于坐标变化是对称的。 计算所述集群和数据库中的点之间的距离。即使您更改坐标顺序,欧几里得距离的公式也保持不变。 计算平均值和移动中心。交换坐标时,平均值也保持不变。总而言之,K-Means 中的所有步骤都与数据的内部结构无关。您可以轻松地为矩阵实现它,但这样做没有实际意义,因为您可以将它们展平并将它们视为数组。 sklearn 收敛到的解决方案应该与提供的实现相同。
你问这个有什么特别的原因吗? sklearn 的解决方案不会收敛到预期的输出吗?
【讨论】:
您可以轻松选择三个特征(列)作为您适合的变量的输入。 np.asarray([np.asarray(df['Feature1']),df['Feature2']),df['Feature3'])]).TX = data 如果您需要更多信息,请告诉我。以上是关于更高维度的 KMeans 聚类是不是可行?的主要内容,如果未能解决你的问题,请参考以下文章