人工智能算法大全:基于MATLAB
上QQ阅读APP看书,第一时间看更新

5.1 原理介绍

本节将讲述K-Means算法的主要原理,详细介绍其算法步骤和数学原理,并运用算法的一些技巧,最后对其优缺点做简要说明。

5.1.1 算法思想

K-Means算法属于非监督学习,在训练模型时不需要输入样本的标签,只需要输入特征就行。K-Means算法把各类样本的均值点当成中心点,通过样本与各中心点的距离来判断样本属于哪一类,常用的距离是欧氏距离。在训练过程中各类样本的中心点在不断地变化,使得模型训练迭代停止的条件可以是下列三者之一。

1)中心点不再变动。

2)各样本点到其中心点的距离之和几乎不变。

3)各个样本的归类情况不变。

整个训练的目的是使各个样本到其所属的中心点距离之和最小,因此可以将其定义为算法的损失函数,公式如下。

其中rnk取0或1,当样本n属于k这一类时取1,否则取0。||xn-uk||2是样本x到每一类的中心点距离的平方。 训练K-Means的目的就是使该损失函数最小。

5.1.2 算法流程

K-Means算法是聚类算法中比较简单的一种,整个算法是流程式的,可以通过以下几个简单的步骤来概括。

1)随机选取k个样本点作为初始的中心点。

2)计算每个样本点到k个中心点的距离,样本点离哪个中心点最近,就把该样本点归为哪一类,并记录此次分类情况。

3)将样本分为k类后,计算每一类中各个点的均值点,并把其作为新的中心点。

4)计算每个样本点到新的中心点的距离,并记录分类情况,然后与上一次计算的分类情况对比,若每一类分类结果都相同,则模型训练结束,得出各类的中心点和分类情况,否则再重复3)、4)步骤。

5.1.3 k值的选取

在K-Means的使用中,需要知道数据应该分为几类,即k取多少。但实际运用时,很多时候是不知道数据到底有几类,这就涉及k应该取多少的问题。本书建议可以使用“肘点法”来确定k的值,即k取不同的值,然后分别训练K-Means模型,随着k的增加,损失函数递减,但是递减的速度会减缓,由快变缓那一刻的点即为k取值的点,具体见后文的实例分析。