机器学习--基础算法之聚类(1,k-means)

1.聚类简介

在进行k-means分析前,先说说聚类算法,聚类算法。之前说过无监督学习,训练样本无标签,我们通过某个算法来发现样本数据间的内在联系或者规律,而被应用最为广泛的就是聚类算法。聚类算法通常是将数据集划分为不向交的子集,每个子集被称作 ‘簇’ 。每个簇可能对应着样本的不同类别。而聚类的这种寻找数据集的内部分布结构,可单独达到分类效果,也可以是作为其他学习任务的前驱过程。
聚类和之前提到的分类分类算法的区别就是,聚类属于无监督学习。
这里我们将介绍基础的k-means,以及基于k-means的Canopy+kmeans,kmeans++,二分k-means,ISODATA,kernel kmeans,Mini-batch K-Means。算法进阶:基于密度聚类的DBSCAN,层次聚类,Mean Shift聚类。回头一看,哇塞,东西好多。写到这里我觉得应该分开来一一说明,这里先简单介绍前期需要的一些知识。
聚类算法中我们需要大量的距离运算,当说到k-means时候你就知道了。所以这里先说说各种距离,(机器学习–基础算法之KNN)是之前总结的一个算法,其中介绍常用的各种距离。

2.k-means

2.1简介

首先你想象一下一堆离散的样本,k-means的k指的是初始中心点个数(计划聚类数),means:求中心点到其他数据点距离的平均值。像这样:
在这里插入图片描述
那两个红点就是表示选定k=2个初始点,嗯,你可能想到了,是随机选的。

2.2算法解析

  1. 选择聚类的个数k,
  2. 计算每个点到你选中点(我们叫他中心点吧)的距离,将这个点归类为距离最短对应的中心点点,这样就可以分为k类了,
  3. 然后更新中心点,将每类的所有点计算质心作为中心点,
  4. 再次计算所有点到新的中心点的距离,再次分类,不断更新质心,不断迭代
  5. 当中心点也就是质心不再变化,或者变化很小(比如小于自己设置一个阈值),我们就认为算法收敛,分类完成。

这里在计算距离时候就要根据你的实际问题选择合适的计算距离方法。比如是欧式距离还是曼哈顿距离,还是闵氏距离。。。。这里就不说了,主要是我举不出恰当例子。

2.3算法效果衡量与优化

我们期望分类完成后同类之间比较聚合,距离较近,类与类之间距离比较远。我们使用下面这种方式衡量

2.31 SSE:误差平方和

S S E = ∑ i = 1 k ∑ p ∈ C i ∣ p − m i ∣ 2 SSE=\sum_{i=1}^k\sum_{p∈C_i}|p-m_i|^2 SSE=i=1kpCipmi2
其中k 就是我们初始选择的k值,p:属于簇Ci的点, m i m_i mi最后分类第i类的质心,也就是分类完成每类分别计算所有点到所属分类质心点距离的平方求和,在将所有分类计算的结果求和。无偶一我们需要这个SSE院小越好。

2.32 K值的选择

之前你就会想k值的选择肯定会影响最终的效果,对,你想对了:
这是最后根据SSE调整后一个分类例子:
起始k的选择和SSE的值:
k起始选择位置
最终质心确定,分类完成和SSE的值的变化曲线
在这里插入图片描述
这是效果比较好的情况,同样的例子我们选择起始位置不同就有了不同结果:
起始选点:
在这里插入图片描述
最终结果:
在这里插入图片描述
两种情况来看,最终SSE值都趋于稳定,但是第二种情况SSE值明显大于第一种情况。这样说明k的起始位置很重要。我们可以根据SSE衡量起始位置的选择。
除了起始位置的选择,还有k的大小怎么确定
肘部法Elbow method
(1)对于n个点的数据集,迭代计算k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心的距离的平方和;
(2)平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。
(3)在这个平方和变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值。

在这里插入图片描述

2.33 轮廓系数法(Silhouette Coefficient :SC系数法)

结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果:
在这里插入图片描述
每次聚类后,每个样本都会得到一个轮廓系数,当它为1时,说明这个点与周围簇距离较远,结果非常好,当它为0,说明这个点可能处在两个簇的边界上,当值为负时,暗含该点可能被误分了。
当我们选取500点:计算平均SC系数时候:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
k = 2时,第0簇的宽度远宽于第1簇;
k = 4时,所聚的簇宽度相差不大,因此选择K=4,作为最终聚类个数。
所以轮廓系数法我们可以称之为SC系数法可以总结如下:
求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。
平均轮廓系数的取值范围为[-1,1],系数越大,聚类效果越好。
簇内样本的距离越近,簇间样本距离越远

2.34 CH系数法(Calinski-Harabasz Index)

Calinski-Harabasz:类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数s会高,分数s高则聚类效果越好。
S ( k ) = t r ( B k ) t r ( W k ) m − k k − 1 S(k)={tr(B_k)\over tr(W_k)}{m-k\over k-1} S(k)=tr(Wk)tr(Bk)k1mk
m为训练集样本数,k为类别数,tr为矩阵的迹。Bk可视为类别之间的误差平方和,Wk可视为类别内部数据的误差平方和。
这个公式就是想说明用尽量少的类别聚类尽量多的样本,同时获得较好的聚类效果。

2.35小结
  1. 肘部法
    下降率突然变缓时即认为是最佳的k值
  2. SC系数
    取值为[-1, 1],其值越大越好
  3. CH系数
    分数s高则聚类效果越好

2.4 k-means总结

优点

  1. 原理简单(靠近中心点),实现容易
  2. 聚类效果中上(依赖K的选择)
  3. 空间复杂度o(N)时间复杂度o(IKN)N为样本点个数,K为中心点个数,I为迭代次数

缺点

  1. 对离群点,噪声敏感 (中心点易偏移)
  2. 很难发现大小差别很大的簇及进行增量计算
  3. 结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关.)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值