聚类是一种无监督学习,其数据集只有特征,没有对应的输出。聚类需要模型在没有标准答案的情况下把相似的数据分成一组。接下来让我们看看K-Means。
K-Means
K-Means 是最常见的聚类算法之一,它提前告诉模型要分成几类,即 K 值。其大致过程是
先随机选 K 个中心点
每个样本分给离自己最近的中心点
重新计算每一组的中心
不断重复,直到分组基本不变
让我们从数学公式的角度来学习一下这个算法。
假设我们有 m 个样本,每个样本有多个特征。K-means 需要提前指定类别数量 K,每一类都有一个中心点,记作
$$
\mu_1, \mu_2, \cdots, \mu_K
$$
其中:$\mu_k$表示第 $k$ 个簇的中心点。
第一步,分配样本到最近中心。对于每一个样本,计算其到每个聚类中心的距离,常用的是欧氏距离的平方:
$$
\left| x^{(i)} - \mu_k \right|^2
$$
然后选择距离最小的那个中心:
$$
c^{(i)} = \arg \min_k \left| x^{(i)} - \mu_k \right|^2
$$
其中$c^{(i)}$表示第 $i$ 个样本被分到的类别编号。
第二步,重新计算聚类中心。当所有样本都被分配到某个类别之后,就需要重新计算每个类别的中心点。第 $k$ 类的新中心为:
$$
\mu_k = \frac{1}{|C_k|} \sum_{i:c^{(i)}=k} x^{(i)}
$$
这个公式的含义是:第 $k$ 类的新中心点等于这一类所有样本的平均值。
K-Means 的目标是让样本尽可能靠近自己的中心点,因此其代价函数可以写为:
$$
J = \frac{1}{m} \sum_{i=1}^{m} \left| x^{(i)} - \mu_{c^{(i)}} \right|^2
$$
当代价函数收敛到最小时可认为中心点已基本确定。