Machine Learning——聚类(基本概念)

1、聚类任务

我们知道在无监督学习中,训练样本的标签是未知的,所以为了能够通过这些无标签的训练样本来探究数据的内在性质及其规律,便产生了许多无监督学习算法。

其中,我们若想要通过数据的内在性质来分类数据,那么出现了一种叫 “聚类” 的方法。

【 定义 】
聚类针对给定的样本,依据它们特征的相似度或距离,将其归并到若干个 “类”“簇” 的数据分析问题。而这些类或簇通常是不相交的子集。而聚类过程得到的子集是没有其本就存在的概念语义的,它需要由使用者来把握和命名。

【 符号化 】
假定样本集 D = x 1 , x 2 , . . . , x m D = {x_1, x_2, ..., x_m} D=x1,x2,...,xm 包含 m m m 个无标记样本,每个样本 x i = ( x i 1 ; x i 1 ; . . . ; x i n ) x_i = (x_{i1}; x_{i1};...; x_{in}) xi=(xi1;xi1;...;xin) 是一个 n n n 维特征向量。
通过聚类算法,样本集被划分成 k k k 个不相交的簇 { C l ∣ l = 1 , 2 , . . . , k } \{C_l | l = 1, 2, ..., k\} {Cll=1,2,...,k},其中 C l ‘ ⋂ l ‘ ≠ l C l = ∅ C_{l^`} \bigcap_{l^` \neq l} C_l = \emptyset Cll=lCl= D = ⋃ l = 1 k C l D = \bigcup_{l=1}^kC_l D=l=1kCl
而样本 x j ⃗ \vec{x_j} xj 的 “簇标记” 用 λ j ∈ { 1 , 2 , . . . k } \lambda_j \in \{1,2, ... k\} λj{1,2,...k} 表示。
聚类结果可用 λ ⃗ = ( λ 1 ; λ 2 ; . . . ; λ m ) \vec{\lambda} = (\lambda_1; \lambda_2; ...; \lambda_m) λ =(λ1;λ2;...;λm)表示。


2、性能度量

因为样本是没有标签的,所以我们最终通过程序自动实现聚类的结果到底是好还是坏,我们需要一个标准或者指标去度量的。而聚类性能度量称为 “有效性指标”。除了评估聚类结果好坏,若明确了最终要使用的性能度量,则可以直接将其作为聚类过程的优化目标,从而更好找到更优的聚类结果。

很自然的,如果我们希望聚类结果更好,那么我们其实就希望最终是 “物以类聚” 的情况,即同一类中的样本距离足够近,而不同类之间的样本距离足够的远。 以术语来描述就是,聚类结果 “簇内相似度” 高“簇间相似度” 低

而聚类性能度量大致有两类:

  • 外部指标:将聚类结果与某个“参考模型”进行比较。
  • 内部指标:直接考察聚类结果而不利于任何参考模型。

在西瓜书中,有如下公式作为性能指标符号:

基于上面4式可以得到一些常用的聚类性能度量外部指标


显然,上述性能度量的结果值均在 [ 0 , 1 ] [0, 1] [0,1] 区间,值越大越好。


3 距离或相似度

首先定义样本集合,它可用矩阵 X X X 表示,矩阵第 i i i 行表示第 i i i 个样本,第 j j j 列表示第 j j j 个属性:
X = [ x i j ] n ∗ m , 其 中 i = 1 , 2 , . . . , m ; j = 1 , 2 , . . . , n X = [x_{ij}]_{n*m} , 其中 i = 1, 2, ..., m; j = 1, 2, ..., n X=[xij]nm,i=1,2,...,m;j=1,2,...,n

聚类的核心就是相似度或距离,我们主要使用如下距离或相似度:

3.1 闵可夫斯基距离 (Minkowski distance)

【定义】
给定样本 x i = ( x i 1 ; x i 2 ; . . . ; x i m ) , x j = ( x j 1 ; x j 2 ; . . . ; x j m ) x_i = (x_{i1}; x_{i2}; ...; x_{im}), x_j = (x_{j1}; x_{j2}; ...; x_{jm}) xi=(xi1;xi2;...;xim),xj=(xj1;xj2;...;xjm),则两个样本间的闵可夫斯基距离定义为:
d i s t m k ( x i , x j ) = ( ∑ k = 1 m ∣ x i k − x j k ∣ p ) 1 p , p ≥ 1 dist_{mk}(x_i, x_j) = (\sum_{k=1}^m|x_{ik} - x_{jk}|^p)^\frac{1}{p}, p\geq1 distmk(xi,xj)=(k=1mxikxjkp)p1,p1

p = 2 p = 2 p=2,则称为 欧氏距离 (Euclidean distance) ,即
d i s t e d ( x i , x j ) = ( ∑ k = 1 m ∣ x i k − x j k ∣ 2 ) 1 2 dist_{ed}(x_i, x_j) = (\sum_{k=1}^m|x_{ik} - x_{jk}|^2)^\frac{1}{2} disted(xi,xj)=(k=1mxikxjk2)21

p = 1 p = 1 p=1,则称为 曼哈顿距离 (Manhattan distance) ,即
d i s t m a n ( x i , x j ) = ∑ k = 1 m ∣ x i k − x j k ∣ dist_{man}(x_i, x_j) = \sum_{k=1}^m|x_{ik} - x_{jk}| distman(xi,xj)=k=1mxikxjk

p = ∞ p = \infty p=,则称为 切比雪夫距离 (Chebyshev distance) ,即取各个坐标数值差的绝对值的最大值
d i s t m a n ( x i , x j ) = m a x k ∣ x i k − x j k ∣ dist_{man}(x_i, x_j) =max_k|x_{ik} - x_{jk}| distman(xi,xj)=maxkxikxjk

闵可夫斯基距离越大相似度越小,距离越小相似度越大

3.2 马哈拉诺比斯距离 (Mahalanobis distance)

简称 马氏距离,也是另一种常用相似度,考虑各个分量之间的相关性并与各个分量的尺度无关。

【定义】
给定一个样本集合 X = [ x i j ] n ∗ m X = [x_{ij}]_{n*m} X=[xij]nm ,其协方差矩阵记为 S S S。样本 x i x_i xi x j x_j xj之间的马哈拉诺比斯距离定义为:

d i s t m a ( x i , x j ) = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 dist_{ma}(x_i, x_j) = [(x_i - x_j)^TS^{-1}(x_i-x_j)]^\frac{1}{2} distma(xi,xj)=[(xixj)TS1(xixj)]21

S S S 为单位矩阵时,马氏距离就是欧氏距离。

同样,马哈拉诺比斯距离越大相似度越小,距离越小相似度越大

3.3 VDM—无序属性

先来理解一下什么是有序属性和无序属性。
举个例子:一个定义域为 { 1 , 2 , 3 } \{1, 2, 3\} {1,2,3},这样的离散属性可直接计算距离,很明显"1" 与 “2” 比与 “3” 更加接近,它便称为 “有序属性”。可以理解,闵可夫斯基距离可用于计算这种有序属性。
而若定义域为 { 飞机,火车,轮船 },这样的离散属性则不能直接计算距离,称为 “无序属性”
那么对于无序属性,便可以采用 VDM 方法来计算。
【定义】

3.4 相关系数

样本之间相似度可以使用 相关系数(correlation coefficient) 来表示。因为是表示相关性的指标,所以其值越大则越相似,值越小则越不相似,具体地,系数的绝对值越接近于1,样本相似度越大;越接近于0,样本相似度越小。

【定义】
样本 x i x_i xi x j x_j xj之间的相关系数定义为:
r i j = ∑ k = 1 m ( x i k − x ˉ i ) ( x j k − x ˉ j ) [ ∑ k = 1 m ( x i k − x ˉ i ) 2 ∑ k = 1 m ( x j k − x ˉ j ) ] 1 2 r_{ij}= \frac{\sum_{k=1}^m(x_{ik}-\bar{x}_i)(x_{jk}-\bar{x}_j)}{[\sum_{k=1}^m(x_{ik}-\bar{x}_i)^2\sum_{k=1}^m(x_{jk}-\bar{x}_j)]^\frac{1}{2}} rij=[k=1m(xikxˉi)2k=1m(xjkxˉj)]21k=1m(xikxˉi)(xjkxˉj)
其中, x ˉ i = 1 m ∑ k = 1 m x i k , x ˉ j = 1 m ∑ k = 1 m x j k \bar{x}_i = \frac{1}{m}\sum_{k=1}^mx_{ik}, \bar{x}_j = \frac{1}{m}\sum_{k=1}^mx_{jk} xˉi=m1k=1mxik,xˉj=m1k=1mxjk

在python中代码为:

## 求皮尔森相关系数
def corrcoef(x, y):
    sum1 = np.sum(x)
    sum2 = np.sum(y)
    sumofxy = np.sum(x * y)
    sumofx2 = np.sum(x * x)
    sumofy2 = np.sum(y * y)
    num = sumofxy - (np.float(sum1) * np.float(sum2) / x.shape[0])
    den = np.sqrt((sumofx2 - np.float(sum1 ** 2) / x.shape[0]) * (sumofy2 - np.float(sum2 ** 2) / x.shape[0]))
    return num/den
3.5 夹角余弦

样本之间相似度可以使用 夹角余弦 来表示。夹角余弦越接近于1,样本相似度越大;越接近于0,样本相似度越小。
【定义】
样本 x i x_i xi x j x_j xj之间的夹角余弦定义为:
s i j = ∑ k = 1 m x i k x j k [ ∑ k = 1 m x i k 2 ∑ k = 1 m x j k 2 ] 1 2 s_{ij}= \frac{\sum_{k=1}^mx_{ik}x_{jk}}{[\sum_{k=1}^mx_{ik}^2\sum_{k=1}^mx_{jk}^2]^\frac{1}{2}} sij=[k=1mxik2k=1mxjk2]21k=1mxikxjk
在python中代码为:

## 求夹角余弦
def cosVector(x, y):
    num = sum(map(float, x*y))
    den = np.linalg.norm(x) * np.linalg.norm(y)
    return num/float(den)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值