非监督学习是要让计算机学习无标签数据,需要将一系列无标签的训练数据,输入到某个算法中,找到这个数据的内在规律、结构或模式。
聚类算法(clustering)实现将一系列无标签的训练数据,分成不同的点集(称为簇)。典型的聚类算法有K-均值算法。典型的应用有:

聚类算法应用

3.1.1 K-Means(K-均值算法)

\(K\)-均值算法接受一个未标记的数据集,然后将数据聚类成多个类,即使在没有非常明显区分的组群的情况下也可以。

算法基本思想:

  1. 首先随机选择\(K\)个点,称为聚类中心。
  2. 其次对于数据集中的每一个数据,按照距离 \(K\) 个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点组成一个组。
  3. 然后计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
    再次重复以上两个步骤直至中心点不再变化,至此数据集聚类成\(K\)个组。

算法描述:

模型参数:聚类个数: \(K\);训练集 \( \{x^{(1)} , x^{(2)} ,…, x^{(m)}\}\ \ \ \ \ \ (x^{(i)} ∈ R^n , x_0=1) \); 随机选择\(K\)个聚类中心点:\(μ_1,μ_2,…,μ_K\ \ \ \ \ \ \ (μ_k∈R^n)\)

代价函数:最小化所有的数据点与其所关联的聚类中心点之间的距离之和。

Repeat {
    for i = 1 to m
        c(i):= index (from 1 to  K) of cluster centroid closest to x(i)
    for k= 1 to K
        μ_k:= average (mean) of points assigned to cluster K
}

算法应用注意点:

聚类中心随机初始化:随机选择\(K\)个训练实例(\(K< m \)),即聚类中心点的个数要小于所有训练集实例的数量,然后令 \(K\) 个聚类中心分别与这\(K\)个训练实例相等。初始化存在可能会停留在一个局部最小值处的问题:

  • 当\(K\)较小的时候(2-10):通常需要多次运行 \(K\)-均值算法,每一次都重新进行随机初始化,最后再比较多次运行 \(K\)-均值的结果,选择代价函数最小的结果。
  • 当\(K\)较大,可能不会有明显地改善,一般不需要做多次的随机初始化。

K值选择

选择聚类数K:

  • 先思考运用 \(K\)-均值算法聚类的动机是什么,然后选择能最好服务于该目标的聚类数。
  • “肘部法则”:从\(K=1\)开始,改变K值,运行\(K\)均值聚类方法,计算畸变函数 \(J\),绘制\(J\)曲线。畸变值在刚开始是会迅速下降,在 3 的时候达到一个肘点;在此之后,畸变值就下降的非常慢, \(K=3\)之后就下降得很慢,那么就选\(K\)等于 3;应用“肘部法则”可以有效地选择聚类个数。

肘部法则

K-means与KNN比较:

相同点:都是计算最近邻,一般都用欧氏距离。</br>
不同点:

  1. KNN是分类、输入样本带标签的、监督学习、没有训练过程的算法
  2. K-means是聚类、输入样本不带标签的、非监督学习、有训练过程的算法
  3. K的含义不同。