K-means 聚类算法问题

数据挖掘 机器学习 Python k-均值
2021-09-28 04:35:34

我正在尝试实现 k-means 聚类算法,但我对计算距离和更新(移动)聚类质心感到困惑。例如,假设我有 2 个功能。其中一个是weight={2,4,6,8,11,14,21},另一个是height={4,6,7,8,9,12,14}所以,在坐标系中,我的点是x1={2,4},x2={4,6},x3={6,7}等等。然后,我随机初始化集群质心,不管现在有多少,但它们也有坐标。比方说μ1={4,2}至此,我明白了如何用欧几里得距离计算距离。

在此处输入图像描述

我计算距离的代码:

def get_distance(x1,x2,s1,s2):
      return np.sqrt(np.power(s1-x1,2)+np.power(s2-x2,2))

现在我有距离了。

我的第一个问题是集群分配步骤(循环中的第一步)如何知道哪个质心分配给 c(i)。我的意思是,我应该查看每个质心以了解哪个样本(x(i))接近它然后我应该将质心分配给 c(i),对吗?

我的第二个问题,假设我有距离,我现在有 c(1,2..,n) 数组。算法的第二步称为移动(更新)质心步骤,我们计算 μ。根据公式,这个 μ 是分配给集群的点的平均值,例如 μ1=[x(3) + x(4) + x(6)] / 3。但是,这里的 μ 是坐标系中的一个点,对?我的意思是,μ1 是 {4,2}。这怎么可能?这是一个点而不是变量。它有坐标。好吧,如果它将成为一个变量,假设 μ1=5,我该如何减去 ||x(i)-μ|| 然后?x 是一个坐标。

我的最后一个问题很简单。对于这个例子,我有两个特征重量和高度。我们可以在 k-mean 中使用的最大特征数是多少?是否可以对许多特征使用 k-mean 算法?例如,我的第一个特征是高度,第二个是重量,第三个是宽度,第四个等等。

我希望,我清楚地解释了我的问题。如果没有,对不起英语不好。我认为这三个问题是独立的问题,所以你可以回答其中一个。

谢谢。

1个回答

维基百科说:“将每个观察值分配给平均值产生最小的集群内平方和(WCSS)的集群”

我认为在您的情况下,这可以翻译为: ci 通过欧几里得距离分配到最近的质心。

对于你的第二个问题,质心应该 μ 应该与每个训练点具有相同的维数 xi. 它们都是坐标系中的点。

您可以通过 K-means 使用大量功能,例如,文本分析可能会将新闻文章的语料库减少到 10,000 多个维度。根据您使用的包,这些可能表示为稀疏矩阵。