• 1 聚类分析

    • 1.1 相似度与距离度量
    • 1.2 聚类算法 及 划分方法
  • 2 聚类模型评估(优缺点)
  • 3 K-means 在 sklearn方法
  • 4 确定K值–肘部法则–SSE
  • 5 模型评估指标–轮廓系数法–最近簇
    • 5.1 轮廓系数
    • 5.2 最近簇定义—平均轮廓系数 [0,1]:
    • 5.3、Canopy算法配合初始聚类
  • 6 K-mean 优化
    • 6.1 K-means++优化
    • 6.2 映射到高维(Kernel k-means)
    • 6.3 二分法(二分K-means)
    • 6.4 Mini Batch K-Means(分批处理)
    • 6.5 迭代自组织数据分析算法(ISODATA)
    • 6.6 基于MCMC采样的算法
    • 6.7 AFK-MC^2
    • 附:马尔可夫链蒙特卡洛方法
  • 7 以下代码演示:请点击
    • K-means 肘部法则(确定K值)
    • K-means 轮廓系数法(验证K值)
    • Mini Batch K-Means(适合大数据的聚类算法)

1 聚类分析

聚类:把相似数据并成一组(group)的方法。‘物以类聚,人以群分’不需要类别标注的算法,直接从数据中学习模式所以,聚类是一种 数据探索 的分析方法,他帮助我们在大量数据中探索和发现数据结构
1.1 相似度与距离度量
定义距离来度量表示相似度:欧式距离,曼哈顿距离,闵氏距离距离与变量量纲的关系变量标准化方法:0-1 标准化区间缩放法 (a,b)=(0,1)类别变量onehot
1.2 聚类算法 及 划分方法
常见的两类聚类算法:层次聚类算法(Hierarchical)基于划分的方法(Partitional)基于密度 和 基于模型基于划分的方法(Partitional):K-means(K均值)1 随机选取K个数据点作为‘种子’2 根据数据点与‘种子’的距离大小进行类分配3 更新类中心点的位置,以新的类中心点作为‘种子’4 按照新的‘种子’对数据归属的类进行重新分配5 更新类中心点(-->3-->4),不断迭代,直到类中心点变得很小

2 聚类模型评估(优缺点)

优点: 算法原理简单,处理快当聚类密集时,类与类之间区别明显,效果好缺点: K是事先给定的,K值选定难确定对孤立点、噪声敏感结果不一定是全局最优,只能保证局部最优。很难发现大小差别很大的簇及进行增量计算结果不稳定,初始值选定对结果有一定的影响计算量大

3 K-means 在 sklearn方法

sklearn.cluster.KMeans(n_clusters = 8,         #聚类个数,K值,默认8init = 'k-means++',     n_init = 10,max_iter = 300,tol = 0.0001,precompute_distances = 'auto',verbose = 0,random_state = None,copy_x = True,n_jobs = 1,algorithm = 'auto')一些重要的参数:
n_clusters = 8,          #聚类个数,K值,默认8
init = 'k-means++',      #初始化类中心点选择方法,可选:{'k-means++', #是一种优化选择方法,比较容易收敛'random',    #随机选择an ndarray   #可以通过输入ndarray数组手动指定中心点}
max_iter:                #最大迭代数
precompute_distances:   #预计算距离,计算速度更快但占用更多内存。auto  True
copy_x                   # True,原始数据不变,False直接在原始数据上做更改                         

4 确定K值–肘部法则–SSE

最合适的K值肘部法则(Elbow method):找到随着K值变大,损失函数的拐点。损失函数:各个类畸变程度(distortions)之和

肘方法的核心指标是 SSESSESSE (sum of the squared errors,误差平方和),CiCiC_i是第 iii 个簇,p" role="presentation" style="position: relative;">ppp 是 CiCiC_i 中的样本点,mimim_i是CiCiC_i的质心(CiCiC_i中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。

SSE=∑i=1K∑p∈Ci|p−mi|2SSE=∑i=1K∑p∈Ci|p−mi|2

SSE = \sum_{i=1}^{K}\sum_{p\in C_i}|p-m_i|^2

SSE是每个属性的SSE之和:1. 对于所有的簇,某变量的SSE都很低,都意味着什么?2. 如果只对一个簇很低,意味着什么?3. 如果只对一个簇很高,意味着什么?4. 如果对所有簇都很高,意味着什么?5. 如何使用每个变量的SSE信息改进聚类?解答: 1. 说明该属性本质上为常量,不能作为聚类依据。2. 那么该属性有助于该簇的定义3. 那么该属性为噪声属性4. 那么该属性 与 定义该属性提供的信息不一致,也意味着该属性不利于簇的定义。5. 消除对于所有簇都是 低的SSE(高的SSE)的属性。因为这些属性对聚类没有帮助, 这些属性在SSE的总和计算中引入了噪声。也可以对其中某些属性用加权概率来计算,使该属性有助于该簇的定义, 去除某些不利于该簇定义的影响因子(那些可能是噪声)。从而更有利于簇的聚类。K-means 附加问题1.处理空簇:如果数据量少,寻找替补质心,使SSE最小。如果数据量大,保留该空簇2.离群点:不能删除。建议聚类之前离群检测。分析看能否删除 3.降低SSE :将大的分散的簇再次拆开;引入新的簇将之前的大簇拆分。 4.增量更新质心:再次在质心附近寻找测试点,看能否再次找到更优的质心。 

5 模型评估指标–轮廓系数法–最近簇

聚类目的是让“组内数据尽量相似”,而“组间数据差异明显”,轮廓系数就是衡量方法。

针对每一条数据i
a(i)数据i与组内其它数据的平均距离
b(i)数据i与邻组的数据的平均距离
5.1 轮廓系数
S(i)=b(i)−a(i)max{a(i),b(i)}⇒S(i)⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪1−a(i)b(i),0a(i)b(i)−1,a(i)<b(i)a(i)=b(i)a(i)>b(i)S(i)→1S(i)→−1S(i)→0S(i)=b(i)−a(i)max{a(i),b(i)}⇒S(i){1−a(i)b(i),a(i)<b(i)S(i)→10a(i)=b(i)S(i)→−1a(i)b(i)−1,a(i)>b(i)S(i)→0

S(i)=\frac{b(i)-a(i)}{max\left \{ a(i),b(i) \right \}} \Rightarrow S(i)\left\{\begin{matrix} 1-\frac{a(i)}{b(i)}, & a(i)b(i) & S(i)\rightarrow 0 \end{matrix}\right.

数据i的轮廓系数s(i)
s(i) –> 1 样本i聚类合理
s(i) –> -1 样本i应该分到其它类
s(i) –> 0 样本i在两个轮廓的边界
5.2 最近簇定义—平均轮廓系数 [0,1]:
Cj=argminCk1n∑p∈Ck|p−Xi|2Cj=argminCk1n∑p∈Ck|p−Xi|2

C_j = arg\min_{C_k}\frac{1}{n}\sum_{p\in C_k}|p-X_i|^2

其中p是某个簇Ck中的样本。即,用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,
选择离Xi最近的一个簇作为最近簇。
sklearn.metrics.silhouette_score
sklearn.metrics.silhouette_score(X,labels = 'euclidean',sample_size = None,random_state = None)
一些重要的参数:X:      聚类的输入特征数据labels:类标签数组metrics:sample_size:是否抽样计算
5.3、Canopy算法配合初始聚类
1.聚类最耗费计算的地方是计算对象相似性的时候,Canopy聚类在第一阶段选择简单、 计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy , 通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况, 可以把这一阶段看做数据预处理; 2.在各个Canopy 内使用传统的聚类方法(如K-means),不属于同一Canopy 的对象之间不进行相似性计算。 (即,根据Canopy算法产生的Canopies代替初始的K个聚类中心点, 由于已经将所有数据点进行Canopies有覆盖划分, 在计算数据离哪个k-center最近时,不必计算其到所有k-centers的距离, 只计算和它在同一个Canopy下的k-centers这样可以提高效率。 
算法过程:
1,首先选择两个距离阈值:T1和T2,其中T1 > T2
2,从list中任取一点P,用低计算成本方法快速计算点P与所有Canopy之间的距(如果当前不存在Canopy,则把点P作为一个Canopy),如果点P与某个Canopy距离在T1以内,则将点P加入到这个Canopy
3,如果点P曾经与某个Canopy的距离在T2以内,则需要把点P从list中删除,这一步是认为点P此时与这个Canopy已经够近了,因此它不可以再做其它Canopy的中心了;
4,重复步骤2、3,直到list为空结束。
优缺点
1、Kmeans对噪声抗干扰较弱,通过Canopy对比,将较小的NumPoint的Cluster直接去掉有利于抗干扰。
2、Canopy选择出来的每个Canopy的centerPoint作为K会更精确。
3、只是针对每个Canopy的内做Kmeans聚类,减少相似计算的数量。

6 K-mean 优化

6.1 K-means++优化
◆ K-means算法的先决条件1)必须先行指定k的大小,及最终结果需要聚为几类。2)第一次分配数据点的时候需要选取起始质心(seeds),即初始化聚类中心点。 k-means++是一种基于采样方法(称为D^2-sampling)的中心点选择方法。其核心为: 最开始的质心间两两的距离要尽可能远。 K-means++算法改进了标准K-means算法随机选取初始质心的缺点,但其内在的有序性导致了它的可扩展型不足。 由于选择下一个中心点所需的计算依赖于已经选择的所有中心点,这种内在的顺序执行特性使得到k个聚类中心 必须遍历数据集 k 次,从而使得算法无法并行扩展而应用在超大规模数据集上。
6.2 映射到高维(Kernel k-means)
kernel k-means:将每个样本映射到高维空间的处理,然后再将处理后的数据使用普通的k-means算法思想进行聚类。
6.3 二分法(二分K-means)
首先将所有点作为一个簇,然后将该簇一分为二。
之后选择能最大限度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。
以此进行下去,直到簇的数目等于用户给定的数目k为止。
6.4 Mini Batch K-Means(分批处理)
该算法的迭代步骤有两步: 1:从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心 2:更新质心,适用大数据类型
6.5 迭代自组织数据分析算法(ISODATA)
类别数目随着聚类过程而变化; 对类别数的“合并”:(当聚类结果某一类中样本数太少,或两个类间的距离太近时) “分裂”(当聚类结果中某一类的类内方差太大,将该类进行分裂)
6.6 基于MCMC采样的算法
MCMC的采样方法,k−MC2就是为了降低 k-means 算法的时间复杂度的改进算法。 使用MCMC采样来近似 D2−sampling 这个过程 在选取候选种子节点时,随机选取一个seeding,然后用MCMC的方法采样出长为M的马尔科夫链,使得马尔科夫链的平稳分布为 p(x) ,从而马尔科夫链达到平稳状态后的那些状态就可以看作是以p(x) 进行采样的样本点。 k-MC^2 算法有一个缺点:即由于在MCMC过程中,算法使用的提案分布 q(x) 为均匀分布,这导致了潜在的缺点,就是那些样本数较小的聚类中可能不会被选中为候选节点。
6.7 AFK-MC^2
AFK-MC^2关键之处:在于它使用马尔科夫链对k-Means++进行近似处理,也就是将数据点看做状态点。第一个状态是随机采样的数据点,通过一个随机过程来决定链的状态是否要转移到其他的随机数据点。状态是否转移与所有点的初始距离是相互独立的(马尔科夫链的稳定状态与初始状态无关), 并且初始距离作为预处理的一部分只计算一次。与k-Means++不同的是,AFK-MC2算法只需要遍历一次数据集。
附:马尔可夫链蒙特卡洛方法
◆ 蒙特卡洛方法蒙特卡洛模拟只是一种通过不断地生成随机数来评估固定参数的方法。 通过生成随机数并对其做一些计算,蒙特卡洛模拟给出了一个参数的近似值(其中直接计算是不可能的或者计算量过大)

由于 15 个点落在了圆内,那么圆的面积可以近似地为 75 平方英寸,对于只有 20 个随机点
的蒙特卡洛模拟来说,结果并不差。现在,假设我们想要计算下图中由蝙蝠侠方程(Batman Equation)绘制的图形的面积:

我们从来没有学过一个方程可以求这样的面积。不管怎样,通过随机地放入随机点,
蒙特卡洛模拟可以相当容易地为该面积提供一个近似值。◆ 马尔可夫链 在十九世纪,人们观察到钟形曲线在自然中是一种很常见的模式。 (我们注意到,例如,人类的身高服从钟形曲线分布。) Galton Boards 曾通过将弹珠坠落并通过布满木钉的板模拟了重复随机事件的平均值, 弹珠的最终数量分布中重现了钟形曲线:

给定一个确定的上述字母或空白,关于下一个字母将是 A、T 或者空白等,存在一个确定的概率。
通过这些概率,Markov 可以模拟一个任意的长字符序列。这就是马尔科夫链。

7 以下代码演示:请点击

K-means 肘部法则(确定K值)
K-means 轮廓系数法(验证K值)
Mini Batch K-Means(适合大数据的聚类算法)

聚类分析(K-means算法)相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  3. python 聚类分析 k means

    Kmeans 是一种动态聚类方法,其基本思想是:首先随机选取 K 个点作为初始凝聚点,按照距离最近原则划分为 K 类:然后重新计算 K 个类的重心作为新的凝聚点,再按照距离最近原则重新分类:重复这一过 ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  5. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  6. 聚类分析与相关算法(Kmeans等)详解

    聚类分析与相关算法详解 1 距离度量 1.1欧几里得距离定义 1.2其他距离度量的补充 1.3余弦距离 1.4简单匹配系数 1.5jaccard系数 1.6海明距离 2 聚类问题 2.1非监督学习中的 ...

  7. 独家 | R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  8. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  9. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  10. 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means

    学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...

最新文章

  1. java-mybaits-00101-基础安装配制
  2. 孩子听不进道理怎么办?
  3. 谈谈Mux与门电路的相互替换(包含实例分析)
  4. linux 内核中基于netfilter的编译选项
  5. 【接口测试】axios测试接口
  6. 45岁以后的IT人生
  7. iso安装器_mac怎么装双系统|mac电脑安装双系统教程
  8. java编程练习题:统计字符出现的次数
  9. [C/C++]为什么手搓一个简版CNN并不难
  10. 数字调制系统工作原理_图文讲解液压系统溢流阀分类与工作原理
  11. 原生js实现简易的可旋转伸缩连线效果代码
  12. MGJRouter代码分析
  13. 计161--Problem H: 求三角形面积-gyy
  14. 学习使用md+Typora记笔记的笔记
  15. LeetCode常用算法模式大厂面试题整理
  16. HDU 6608:Fansblog(威尔逊定理)
  17. 华为eNSP的介绍与简单使用
  18. 【苦练基本功】代码整洁之道 pt3(第7章-第9章)
  19. 2021全国人工智能师资培训正式“开课”,百度飞桨助力高校教师提升AI“超能力”...
  20. 女人怎样看男人和男人怎样看女人

热门文章

  1. 星来客机器人餐厅_星战来客——韩国“机器人士兵”小记
  2. java过滤器修改响应,在过滤器中实现修改http请求体和响应体
  3. Android开发知识(二十三)从源码角度分析ListView的滑动复用机制
  4. VSPD 串口调试工具!!
  5. 【mysql学习】01-认识数据库
  6. 【JavaScript】笑话生成器
  7. layui.js和layui.all.js的区别
  8. 算法课堂笔记01-语句频度计算
  9. 如何理解关联法则中的三个判断准则
  10. 交叉表、行列转换和交叉查询经典