聚类算法K-means
K-means最简单的聚类算法属于无监督算法
聚类算法和分类算法的对比
- | 聚类 | 分类 |
---|---|---|
核心 | 将数据分成多个组,探索每个组的数据是否有联系 | 从已经分组的数据中去学习,把新数据放到已经分好的组中去 |
学习类型 | 无监督,无需标签进行训练 | 有监督,需要标签进行训练 |
典型算法 | K-Means,DBSCAN,层次聚类 | 决策树,贝叶斯,逻辑回归 |
算法输出 | 聚类结果是不确定的, 不一定总是能够反映数据的真实分类, 同样的聚类,根据不同的业务需求,可能是一个好结果,也可能是一个坏结果 |
分类的结果是确定的, 分类的优劣是客观的, 不是根据业务或算法需求决定 |
关键概念:簇与质心
簇:KMeans算法将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上来看簇是一组一组聚集在一起的数据,在一个簇中的数据就认为是同一类。簇是聚类结果的表现。
质心:簇中所有数据的均值uj通常被称为这个簇的质心,在一个二维平面中,一簇数据点的质心的横坐标就是这一簇数据点横坐标的均值,质心的纵坐标就是这一簇数据点的纵坐标的均值。同理可推广到高维空间。
在KMeans算法中,簇的个数K是一个超参数,需要我们人为输入来确定。KMeans的核心任务就是根据我们设定好的K,找出K个最优质心,并将离这些质心最近的数据分别分配到这些质心代表的的簇中去。具体步骤
- 1.随机抽取K个样本作为最初的质心
- 2.开始循环:
- 2.1.将每个样本点分配到距离他们最近的质心,生成K个簇
- 2.2.对于每个簇,计算所有被分到改簇的样本点的平均值作为新的质心
- 3.当质心的位置不再发生改变,迭代停止,聚类完成
当我们找到一个质心,在每次迭代中被分配到这个质心上的样本都是一致的,每次新生成的簇都是一致的,所有的样本点都不会再从一个簇转移到另一个簇,质心就不会变了。
簇内误差平方和
对于一个簇来说,所有样本点到质心的距离之和越小,我们就认为这个簇中的样本越相似,簇内差异就越小。
距离的衡量可以使用以下几种,令x表示簇中的一个样本点, 表示簇中的质心,n表示每个样本点中的特征数目,i表示组成点x的每个特征,则该样本点到质心的距离可以由以下距离度量:
欧几里得距离:
曼哈顿距离:
如果采用欧几里得距离,则一个簇中所有样本点到质心的距离的平方和为:
簇内平方和Cluster Sum of Square (CSS) =
整体平方和Total Cluster Sum of Square =
m为一个簇中样本的个数,j是每个样本的编号。
KMeans追求的是能够让整体平方和最小化的质心。在质心不断迭代的过程中,总体平方和是越来越小的,我们可以使用数学公式证明,当整体平方和最小的时候,质心就不再发生变化了。
簇数和轮廓系数
簇数越多,整体平方和越小
簇数:不能作为模型的衡量指标。根据簇数计算出inertia,inertia不是有界的不好衡量,而且inertia对数据的分布有假设,会让聚类算法在一些细长簇,环形簇或不规则簇中表现不佳。
如何衡量聚类算法的效果?
KMeans的目标是:确保簇内差异小,簇外差异大。通过衡量簇内差异来衡量聚类的效果。使用轮廓系数
轮廓系数:评价簇内的稠密程度,和簇间的离散程度的指标
取值范围(-1,1),
- 越接近1,表示样本与自己所在的簇中的样本很相似,并且与其他簇中的样本不相似
- 为负,表示样本点与簇外的样本更相似
- 为0,代表两个簇中的样本相似度一致,两个簇应该是同一个簇
如果一个簇中的大多数样本具有比较高的轮廓系数,则簇会有较高的总轮廓系数,则整个数据集的平均轮廓系数越高,则聚类越合适
来源:CSDN
作者:XDSXHDYY
链接:https://blog.csdn.net/XDSXHDYY/article/details/103756510