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\}
{Cl∣l=1,2,...,k},其中
C
l
‘
⋂
l
‘
≠
l
C
l
=
∅
C_{l^`} \bigcap_{l^` \neq l} C_l = \emptyset
Cl‘⋂l‘=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]n∗m,其中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=1∑m∣xik−xjk∣p)p1,p≥1
当
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=1∑m∣xik−xjk∣2)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=1∑m∣xik−xjk∣
当
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)=maxk∣xik−xjk∣
闵可夫斯基距离越大相似度越小,距离越小相似度越大
3.2 马哈拉诺比斯距离 (Mahalanobis distance)
简称 马氏距离,也是另一种常用相似度,考虑各个分量之间的相关性并与各个分量的尺度无关。
【定义】
给定一个样本集合
X
=
[
x
i
j
]
n
∗
m
X = [x_{ij}]_{n*m}
X=[xij]n∗m ,其协方差矩阵记为
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)=[(xi−xj)TS−1(xi−xj)]21
当 S S S 为单位矩阵时,马氏距离就是欧氏距离。
同样,马哈拉诺比斯距离越大相似度越小,距离越小相似度越大
3.3 VDM—无序属性
先来理解一下什么是有序属性和无序属性。
举个例子:一个定义域为
{
1
,
2
,
3
}
\{1, 2, 3\}
{1,2,3},这样的离散属性可直接计算距离,很明显"1" 与 “2” 比与 “3” 更加接近,它便称为 “有序属性”。可以理解,闵可夫斯基距离可用于计算这种有序属性。
而若定义域为 { 飞机,火车,轮船 },这样的离散属性则不能直接计算距离,称为 “无序属性”。
那么对于无序属性,便可以采用 VDM 方法来计算。
【定义】
![](https://i-blog.csdnimg.cn/blog_migrate/beab14404a0d499f3a9aee069371b8dc.png)
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(xik−xˉi)2∑k=1m(xjk−xˉj)]21∑k=1m(xik−xˉi)(xjk−xˉ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=1∑mxik,xˉj=m1k=1∑mxjk
在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=1mxik2∑k=1mxjk2]21∑k=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)