聚类算法-KMeans

1. 概述

聚类算法属于无监督学习(即进行模型训练时不需要标签),而KMeans又是聚类算法中的一个典型算法。聚类顾名思义就是将数据样本按照某种技术进行分类,使得每一类中的数据紧密程度高,而类与类之间的紧密程度尽量低,这些类就被称为

2. 聚类和分类的区别

聚类分类
类型无监督学习,模型学习中不需要标签有监督学习,模型学习过程中需要标签
特点将混杂的数据分成多个簇,并且探究组间的数据是否存在联系根据带标签的数据学习,获得对应标签的具体特征应该是什么样的,最终需要将新的数据划分到已经分好的组中
结果可以有不同的聚类结果分类的结果是确定的,给定一个数据样本,一定会有它所对应的类别

3. KMeans的原理

3.1 相关概念

:即聚类的结果,就是聚类完成后所划分成的不同的部分,簇之间没有交集,位于同一个簇内的样本都认为属于同一类。
质心:就是簇内数据的均值,就是这个簇的质心。
KMeans中的核心就是在数据集中按照我们给定的K值(簇的个数),找到对应K个质心,将离这些质心最近的数据全部归结到该簇内,具体流程如下:

Created with Raphaël 2.2.0 选择K个样本作为初始质心 将样本分到离自己最近的质心周围构成一个簇 并在每个簇中计算新的质心 质心位置是否还在更新? 聚类完成 yes no

3.2 相关数学公式

3.2.1 距离

上面提到最近是指距离最近,距离除了欧几里得距离外还有曼哈顿距离余弦距离。其中欧几里得距离为 d = ( ∑ i = 0 n ( x i − u i ) 2 ) 1 / 2 d=(\sum_{i=0}^n {(x_i-u_i)}^2)^{1/2} d=(i=0n(xiui)2)1/2其中 u u u表示质心, x x x代表一个样本点, n n n是维数。

3.2.2 簇内平方和

簇中所有样本到该簇质心的距离平方和(CCS) C C S = ∑ j = 0 m ∑ i = 0 n ( x i − u i ) 2 CCS = \sum_{j=0}^m\sum_{i=0}^n{(x_i-u_i)}^2 CCS=j=0mi=0n(xiui)2其中 m m m表示一个簇中的所有样本个数。

3.2.3 整体平方和

数据集中的所有簇的簇内平方和相加被称为整体平方和(TCCS) T C C S = ∑ q = 0 k C C S q TCCS = \sum_{q=0}^k{CCS_q} TCCS=q=0kCCSq其中 k k k表示簇数。

KMeans聚类是基于距离计算来实现的。KMeans追求在固定k的前提下,进行TCCS最小化,越小的CCS就意味着每个簇内样本点到质心的距离就越近,簇内的样本相似度就越高,聚类的效果就越好。这里强调了在固定k的前提是因为,随着簇数越来越多,则CCS也在不断减小,当簇数等于样本数时CCS等于0,但是这样的聚类没有意义。

3.3 KMeans是否有损失函数

损失函数用来衡量模型的拟合效果,只有在需要求解参数的算法中才有损失函数(比如线性回归)。因此严格来说,KMeans中只是对数据进行划分,并没有拟合数据,虽然追求TCCS最小的过程与逻辑回归中最小化损失函数类似,但是KMeans没有损失函数。但是可以将TCCS作为损失函数来理解。

3.4 聚类算法的模型评估指标

3.4.1 关于CCS参数

因为聚类算法追求簇内差异小,簇间差异大,而CCS是衡量簇中数据与质心的远近程度和联系程度,CCS值越小那么联系就越紧密,聚类效果就越好。但是,这个方法存在很多问题:比如CCS会受到簇数的影响,分的簇越多CCS就会越小;在高维度数据中计算欧氏距离很耗时间等,故不采用CCS作为评估指标

3.4.2 样本标签已知的模型评估

3.4.3 样本标签未知的模型评估

  1. 轮廓系数
    轮廓系数的定义为: s = b − a m a x ( a , b ) s = \frac{b-a}{max(a,b)} s=max(a,b)ba其中b为一个样本点到其他最近簇中所有样本的平均距离,a为该样本点到同簇中其它样本的平均距离,因此 s s s的取值范围在(-1,1)。因此为了满足簇内差异小,簇间差异大,需要b越大越好,a越小越好,对应到轮廓系数s则是越接近1越好。
    轮廓系数是针对每一个样本而言,对于整个模型来说,需要看平均轮廓系数。
  2. Calinski-Harabaz Index
    Calinski-Harabaz Index的定义公式如下: s = t r ( B ) t r ( W ) ∗ N − k k − 1 s = \frac{tr(B)}{tr(W)}*\frac{N-k}{k-1} s=tr(W)tr(B)k1Nk其中N为样本数,k为簇的个数,B是不同簇之间的协方差矩阵,W是簇内样本的协方差矩阵,tr表示矩阵的迹。协方差矩阵的迹可以衡量组间数据的离散程度,离散程度越大则迹也越大,因此希望tr(B)越大,tr(W)越小越好,对应到s上就是越大越好。该方法相对于轮廓系数而言计算很快。

4. Sklearn中的KMeans

  1. 类名:class sklearn.cluster.KMeans (参数)
  2. KMeans 类中的重要参数列表
参数含义
n_clusters该参数即KMeans算法中的K值,分类的类别个数
init默认值“k-means++”,表示初始质心的选择方法,可选值为:默认值、“random”或者指定的n维数组
random_state质心初始化时的随机数种子
n_init使用不同的质心随机初始化的种子运行KMeans的次数
max_iter单次运行KMeans算法的最大迭代次数
tol浮点数,指定两次迭代间簇内平方和下降的最小值,小于该值迭代求解就会停下
  1. KMeans 类的重要属性
属性含义
cluster_centers_收敛到的质心
labels_每个样本对应的标签
inertia_簇内平方和
n_iter_实际的迭代次数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值