本文为机器学习的学习总结,讲解聚类算法。欢迎交流。
无监督学习导论
监督学习需要学习带标签的数据,找出正负样本间的决策边界。即使用假设函数对样本标签进行拟合。
与监督学习不同,无监督学习需要学习无标签的数据,将无标签的数据作为输入,让算法找出其中隐藏的数据结构。如下图中的例子,可以将样本分成两个簇,即聚类算法(注意这里没有 y ( i ) y^{(i)} y(i))。
K-means 算法
K-means 算法用来将样本分成子集或簇。接下来我们介绍其原理。
对于下图中的例子,我们使用 K-means 算法介绍其执行步骤:
聚类算法是一个迭代算法,其中包括了两个步骤:簇分配+移动聚类中心
首先随机生成聚类中心,也就是图中的红叉和蓝叉。
每次迭代的第一步进行簇分配。遍历每个样本(绿点),根据距离分配给两个簇中心。图中的红点分给了红叉,蓝点分给了蓝叉:
第二步是移动聚类中心,将中心(2 个叉)移动到同色点的均值处:
不断迭代,算法收敛时,聚类中心已经能够成功将所有的样本分类了:
通过上面的介绍,应该已经大体了解了聚类算法的过程。接下来我们重新介绍一下规范写法。
算法有 2 个输入:
-
输入参数 K K K,表示想从数据中聚类出簇的个数。在文章后面我们会介绍如何选择参数。
-
输入是训练集 x ( i ) x^{(i)} x(i),约定 x ( i ) x^{(i)} x(i) 是 n n n 维实向量,默认丢掉 x 0 = 1 x_0=1 x0=1。
首先随机初始化 K K K 个聚类中心 μ 1 , … , μ K ∈ R \mu_1,…,\mu_K\in \mathcal R μ1,…,μK∈R,表示上个例子中的红叉和蓝叉。对下面的两步进行迭代:
第一步是簇分配,遍历 m m m 个样本点,计算 c ( i ) = min k ∣ ∣ x ( i ) − μ k ∣ ∣ 2 c^{(i)}=\min\limits_k ||x^{(i)}-\mu_k||^2 c