聚类算法是一种无监督的学习算法,通过对无标记训练样本的学习,将样本划分为若干不相交的样本簇,本文简单介绍聚类分析中常用的距离及最经典的聚类算法-k_means算法
聚类分析中常用的距离
欧氏距离_有序属性(连续属性)
- 在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)
- 2维空间,坐标(x1, y1)与坐标(x2, y2)的欧氏距离与自然长度
- ρ=sqrt((x2-x1)²+(y2-y1)²);
- |X|=sqrt(x2²+y2²)
- 3维空间,坐标(x1, y1,z1)与坐标(x2, y2,z2)的欧氏距离与自然长度
- ρ=sqrt((x2-x1)²+(y2-y1)²+(z2-z1)²);
- |X|=sqrt(x2²+y2²+z2²)
- n维空间
- 用以标明两个点在标准坐标系上的绝对轴距总和
- 2维空间,两个点(x1, y1),(x2, y2)的曼哈顿距离
- d = |x1-x2|+|y1-y2|
- n维空间,两个点A=(a[1],a[2],…,a[n])和B=(b[1],b[2],…,b[n])的曼哈顿距离
- d = ∑(a[i] - b[i]) (i = 1,2,…,n)
闵可夫斯基距离_有序属性(连续属性)
- 闵氏距离是对多个距离度量公式的概括性的表述
- n维空间,两个点A=(a[1],a[2],…,a[n])和B=(b[1],b[2],…,b[n])的闵可夫斯基距离
- d = (∑(a[i] - b[i])^p)^(1/p) (i = 1,2,…,n)
- 当p=2时,即为欧氏距离
- 当p=1时,即为曼哈顿距离
VDM距离_无序属性(离散属性)
VDM距离是通过计算在某个属性上某种取值的样本数量占比来计算距离
Mu,a表示在属性u上取值为a的样本数,Mu,a,i表示在第i个样本簇中在属性u上取值为a的样本数,k为样本簇数,则属性u上两个离散值a与b的VDM距离
- d = ∑((Mu,a,i/Mu,a - Mu,b,i/Mu,b)^p )(i = 1,2,…,k)
|
|
a | b | c | 簇 | |
---|---|---|---|---|
0 | 100 | 200 | 300 | 1 |
1 | 200 | 300 | 400 | 2 |
2 | 300 | 400 | 500 | 3 |
p=2时,VDM距离如下
a,b的距离:
|
|
0.006172839506172843
b,c的距离
|
|
0.001543209876543208
a,c的距离
|
|
0.013888888888888888
混合使用
- 当样本中既包含有序变量有包含无序变量时,可将闵可夫斯基距离与VDM距离混合使用
聚类前准备工作-归一化
- 聚类算法在计算距离前,为防止某些数据偏差过大问题,通常会先归一化
- 归一化方法
- Standardization(zero_score): 量化后的特征服从标准正态分布,将分布在[-1, 1]区间
- (x-u)/std,其中u为向量均值,std为标准差
- Min-Max Scaling: : 量化后的特征分布在[0, 1]区间
- (x-min)/(max-min)
- Standardization(zero_score): 量化后的特征服从标准正态分布,将分布在[-1, 1]区间
|
|
k-means算法
- k_means算法基本原理
- 设定k值,并随机选取k个样本作为初始均值向量(质心)
- 将剩下的样本逐一与上述k各样本进行距离计算,并合并入最小距离的集合中,首次生成簇,并计算每一簇的均值向量
- 以新的均值向量作为初始均值向量,重复上述过程,直至样本簇不再变化,得到最终的簇划分
1、确定k值
- 根据业务设定
- 肘部法则(并不常用)
- 肘部法则:成本函数最小化
- 成本函数是各个类畸变程度之和。每个类的畸变程度等于该类重心与其内部成员位置距离的平方和
|
|
|
|
2、定义距离函数
|
|
3、定义训练模型函数
|
|
4、测试集分类结果
|
|
5、模型结果
|
|
0 | 1 | |
---|---|---|
0 | 1.827724 | 1.865160 |
1 | 1.236853 | 1.138610 |
2 | 1.608795 | 1.163853 |
3 | 1.209080 | 1.924797 |
4 | 1.897677 | 1.130945 |
5 | 1.227030 | 1.612169 |
6 | 1.233422 | 1.880208 |
7 | 1.536948 | 1.081214 |
8 | 1.627881 | 1.856679 |
9 | 1.985797 | 1.730550 |
10 | 17.456984 | 18.938306 |
11 | 16.210481 | 16.634254 |
12 | 16.161114 | 11.328820 |
13 | 11.100146 | 17.821086 |
14 | 11.312670 | 12.294023 |
15 | 17.168333 | 19.876406 |
16 | 19.034098 | 11.622804 |
17 | 16.523412 | 13.337517 |
18 | 17.286952 | 11.953653 |
19 | 10.363263 | 12.239709 |
|
|
|
|
0簇质心已更新完毕
1簇质心已更新完毕
|
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
|
[array([1.5391208 , 1.53841869]), array([15.26174538, 14.60465772])]
|
|
|
|
[0, 0, 0, 1]