概述

聚类算法是无监督学习的代表算法之一,也叫“无监督分类”。目的是将数据分为若干有意义或有用的组,通常根据实际需求来进行划分。聚类可以用于降维和矢量量化(vectorquantization),可以将高维特征压缩到一列当中,常常用于图像,声音,视频等非结构化数据,可以大幅度压缩数据量。核心是将数据分为多个组,探索每个组的数据是否有联系。

KMeans的工作原理

簇与质心

KMeans将数据划分称若干个无交集的簇,每个簇就是一个一组聚集在一起的数据集,在一个簇中的数据视为同一类,簇是聚类的结果体现。
质心就是每个簇中所有数据的平均值。
KMeans的工作流程如下:
1)随机取K个样本作为最初的质心;
2)将每个样本分配到离它最近的质心,得到K个簇;
3)对于得到的簇计算新的质心作为下一轮迭代的质心;
4)重复操作直到质心不再改变。

簇内样本平方和

我们认为分到同一个簇中的数据具有相似性,聚类追求的就是簇内差异小,簇间差异大。这个差异由样本点到簇质心的距离来衡量。
对于一个簇来说,所有样本点到质心的距离之和越小,我们就认为簇中的样本越相似,簇内的差异越小。而衡量距离主要有以下几种方法:

采用欧几里得距离时,一个簇中所有样本点到质心的距离的平方和为:

其中j为样本的编号,m就为簇中样本的数量,这个公式就是簇内平方和,又叫Inertia。整个数据集的簇内平方和相加就得到了整体平方和,整体平方和越小,聚类效果就越好。所以KMeans追求的就是使簇内平方和最小的质心。
对于三个距离,对应的质心和inertia不同:

距离度量 质心 Inertia
欧几里得距离 均值 最小化每个样本点到质心的欧氏距离之和
曼哈顿距离 中位数 最小化每个样本点到质心的曼哈顿距离之和
余弦距离 均值 最小化每个样本点到质心的余弦距离之和

sklearn中的KMeans

sklearn.cluster.KMeans

  • 参数n_clusters
    告诉模型要分几类,默认是8类。

  • 属性labels_,查看聚好的类别,每个样本属于哪个类,等同于fit_predict(X)

  • 属性cluster_centers_,查看每个类别的质心

  • 属性inertia_,返回总距离的平方和

聚类算法的模型评估指标

聚类算法的目标是簇内差异小,簇间差异大。首先上面的inertia可以作为衡量的一个指标,但是存在一定的局限性,当一个样本被划分为越多的簇时,inertia可能越来越小,就不能准确的评估模型的优劣。同时,Inertia对数据的分布有假设,它假设数据满足凸分布(即数据在二维平面图像上看起来是一个凸函数的样子),并且它假设数据是各向同性的(isotropic),即是说数据的属性在不同方向上代表着相同的含义。但是现实中的数据往往不是这样。所以使用Inertia作为评估指标,会让聚类算法在一些细长簇,环形簇,或者不规则形状的流形时表现不佳。

当数据有标签时,如果采用聚类算法,可以用以下几种方法来评估:

当样本标签未知时,可以采用轮廓系数来评估。
轮廓系数同时衡量了样本与其自身所在的簇中的其他样本的相似度a,等于样本与同一簇中所有其他点之间的平均距离样本与其他簇中的样本的相似度b,等于样本与下一个最近的簇中的所有点之间的平均距离
单个样本的轮廓系数计算公式是: s = b − a m a x ( a , b ) s=\frac{b-a}{max(a,b)} s=max(a,b)b−a​,其取值范围是(-1,1).其中值越接近1表示样本与自己所在的簇中的样本很相似,并且与其他簇中的样本不相似,当样本点与簇外的样本更相似的时候,轮廓系数就为负。当轮廓系数是0时就说明两个样本的相似度一致,两个样本就是一个簇了。

在sklearn中,我们使用模块metrics中的类silhouette_score来计算轮廓系数,它返回的是一个数据集中,所有样本的轮廓系数的均值。但我们还有同在metrics模块中的silhouette_sample,它的参数与轮廓系数一致,但返回的是数据集中每个样本自己的轮廓系数。传入参数为样本数据和训练后每个样本对应的簇。

sklearn入门——聚类算法KMeans相关推荐

  1. 《菜菜的机器学习sklearn课堂》聚类算法Kmeans

    聚类算法 聚类算法 无监督学习与聚类算法 sklearn中的聚类算法 KMeans KMeans是如何工作的 簇内误差平方和的定义和解惑 sklearn.cluster.KMeans 重要参数 n_c ...

  2. 机器学习-Sklearn-07(无监督学习聚类算法KMeans)

    机器学习-Sklearn-07(无监督学习聚类算法KMeans) 学习07 1 概述 1.1 无监督学习与聚类算法 聚类算法又叫做"无监督分类",其目的是将数据划分成有意义或有用的 ...

  3. 机器学习实战-61:K均值聚类算法(K-Means)

    K均值聚类算法(K-Means) 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 机器学习分为监督学习.无监督学习和半监督学习(强化学习).无监督学习最常应用的场景是聚类(clust ...

  4. 聚类算法——kmeans和meanshift

    聚类算法--kmeans和meanshift [转] 1. meanshift 转于http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220 ...

  5. matlab中的聚类算法,kmeans聚类算法matlab matlab 聚类算法silhouette

    怎样用matlab实现多维K-means聚类算法小编觉得一个好的周末应该是这样的:睡到中午醒来,在床上躺着玩两个小时手机,起床随便吃点东西,下午去超市买一大堆零食,五六点的时候去约小伙伴们吃火锅烧烤, ...

  6. K均值聚类算法(Kmeans)讲解及源码实现

    K均值聚类算法(Kmeans)讲解及源码实现 算法核心 K均值聚类的核心目标是将给定的数据集划分成K个簇,并给出每个数据对应的簇中心点.算法的具体步骤描述如下. 数据预处理,如归一化.离群点处理等. ...

  7. 用人话讲明白聚类算法kmeans

    文章目录 1.什么是聚类 2.K-Means步骤 3.K-Means的数学描述 4.初始中心点怎么确定 5.K值怎么确定 6.小结 1.什么是聚类 先来回顾一下本系列第一篇就讲到的机器学习的种类. 监 ...

  8. sklearn学习 6.聚类算法K-Means

    一.概述 1.无监督学习与聚类算法 学习了决策树,随机森林,PCA和逻辑回归,他们虽然有着不同的功能,但却都属于"有监 督学习"的一部分,即是说,模型在训练的时候,即需要特征矩阵X ...

  9. sklearn专题六:聚类算法K-Means

    目录 1 概述 1.1 无监督学习与聚类算法 1.2 sklearn中的聚类算法 2 KMeans 2.1 KMeans是如何工作的 2.2 簇内误差平方和的定义和解惑 2.3 KMeans算法的时间 ...

最新文章

  1. C++实现图像的绘制并实现鼠标交互
  2. anaconda更换镜像源
  3. eclipse配置Maven中的Tomcat的使用
  4. hdu-4089-Activation-概率dp
  5. NAND FLASH读写速度计算方法详解
  6. js:自动亮起100盏灯
  7. HDU 6836 Expectation(矩阵生成树 + 期望)
  8. 软件工程综合实践专题——个人博客作业1
  9. [导入]ASP.NET 配置节架构
  10. uni app 调用网络打印机_uni-app封装一个request请求
  11. 无线网络(预处理+并查集)
  12. 实现拍照_成电最强拍照地点合集,以及帮你实现它们的拍照师傅
  13. 一些NER的英文数据集
  14. R及RStudio下载安装教程(超详细)
  15. OAuth认证实现机制及单点登录原理
  16. JSP基本语法(2)函数
  17. Web Polygraph 安装
  18. element上传图片的时候额外参数
  19. 标准之争:影响 IPv6 部署的经济学因素
  20. 11.集合之List

热门文章

  1. Numpy之数据归一化
  2. 【git】git 命令行删除远程仓库
  3. 自然语言处理研究报告
  4. getopt()函数简介
  5. 智慧家庭信息安全白皮书发布,推动智慧家庭叫好又叫座
  6. 分层自动化测试模型变与不变
  7. 《逆袭进大厂》第十五弹之智力情景题 | 个人博客
  8. Matlab文件列表实现自然排序的方法排序
  9. LaTeX Error: File `citesort.sty' not found.
  10. 读《大话数据结构》溢彩加强版