我想做k-means聚类来根据训练数据对测试数据进行分类,训练数据都有3个类(1,2和3)。
如何使用例如群集大小对测试数据集进行分类? k = 10 in kmeans(例如使用Matlab)?我知道我可以有k = 3,然后使用最近邻居根据最近的簇大小来识别数据...但不确定我将用于其他k = 3的值?你会如何标记这10个集群中的每一个?
由于
答案 0 :(得分:1)
10个群集的分类与3个群集的分类没有区别。由k-means给出的簇的数量与"类的数量无关。在数据中。 k-means是一种无监督学习算法,这意味着它在训练期间不考虑训练数据的类别。
算法看起来像这样:
def t_or_f(arg):
ua = str(arg).upper()
if 'TRUE'.startswith(ua):
return True
elif 'FALSE'.startswith(ua):
return False
我们发现群集中心与测试点之间的距离最小的群集,然后我们在最小距离群集中包含的元素中找到最常见的类别标签。
答案 1 :(得分:0)
有点不清楚你究竟想做什么,虽然这是我理解的大纲。
当您对数据进行聚类时,理想情况下标签不存在,因为您使用聚类来获取数据的见解或使用它进行预处理。
虽然,如果要执行群集,然后根据群集中心的接近度将类ID分配给新的数据点,则可以执行以下操作。
首先,您可以通过引导或其他方法选择k
,也可以使用Silhouette系数。获得集群中心后,检查哪个中心最接近新数据点,并相应地分配类ID。
在这种情况下,您可能有兴趣使用Rand Index或Adjusted Rand Index来获得群集质量。