用于测试数据分类的 k 均值聚类

k-means clustering for Testing data classification

我想进行 k 均值聚类以根据训练数据对测试数据进行分类,训练数据都有 3 类(1,2 和 3)。

我如何使用集群大小对测试数据集进行分类,例如kmeans 中的 k=10(例如使用 Matlab)?我知道我可以让 k=3,然后使用最近的邻居根据其最近的簇大小来识别数据……但不确定我将使用 k=3 以外的值?您将如何标记这 10 个集群中的每一个?

谢谢

10 个星团的 class 化与 3 个星团的 class 化没有什么不同。 k-means给出的簇数与数据中"classes"的个数无关。 k-means是一种无监督学习算法,意味着它在训练过程中不考虑训练数据的class。

算法看起来像这样:

distances = dist(test_point, cluster_centers)
cluster = clusters[ min(distances) ]
class = mode(cluster.class)

我们找到聚类中心和测试点之间距离最小的聚类,然后我们在该最小距离聚类中包含的元素中找到最常见的 class 标签。

有点不清楚你到底想做什么,虽然这是我理解的大纲。

当您对数据进行聚类时,标签最好不存在,因为您可以使用聚类从数据中获取洞察力或将其用于预处理。

尽管如此,如果您想执行聚类,然后根据聚类中心的接近程度将 class id 分配给新数据点,那么您可以执行以下操作。

首先,您 select k 通过自举或其他方法,可能使用 Silhouette 系数。获得聚类中心后,检查哪个中心最接近新数据点并相应地分配 class id。

在这种情况下,您可能有兴趣使用 Rand Index or the Adjusted Rand Index 来获取集群质量。