有监督学习:有监督学习我们接触过很多,例如线性回归模型,我们给模型一个x,会得到一个与之对应的 y ^ \hat{y} y^,目的是使我们所得到的结果与真实结果y越接近越好 。
无监督学习:有很多数据并没有给定x所对应的真实结果y,这时候,只有x,我们根据x的自身特点来进行分类。Kmeans算法就是无监督学习的一种。
假如空间内存在一批数据点,我们一般会认为距离越近的点他们是同一类的概率越大。选取K个点作为质心,对数据点的距离进行计算,一般采取欧式距离计算,距离哪个质心越近,那么这个数据点就归于哪一类。
损失函数, L = ∑ k = 1 K ∑ x i ∈ C k ∣ ∣ x i , u k ∣ ∣ L=\sum\limits_{k=1}^K\sum\limits_{x_i\in C_k} ||x_i,u_k|| L=k=1∑Kxi∈Ck∑∣∣xi,uk∣∣
其中 μ k = 1 N i ∑ x i ∈ C k x i \mu_k = \frac{1}{N_i}\sum\limits_{x_i \in C_k} x_i μk=Ni1xi∈Ck∑xi
可以从公式中看出损失函数L的意义是所有数据点到每个质心的欧式距离和,目的是使得L最小,找出每个x所属的类别
步骤如下:
1,根据经验以及需求设置K个分类, μ 1 , μ 2 , ⋅ ⋅ ⋅ , μ k \mu_1,\mu_2,\cdot\cdot\cdot,\mu_k μ1,μ2,⋅⋅⋅,μk
2,计算每个点到质心的距离,并讲其分配给距离质心最小的簇中
3,更新簇的质心,即, μ k = 1 N i ∑ x i ∈ C k x i \mu_k = \frac{1}{N_i}\sum\limits_{x_i \in C_k} x_i μk=Ni1xi∈Ck∑xi
4,重复2-3步,知道满足以下条件之一,停止分类
(1)聚类中心不在变化
(2)没有样本点分到其他类中
(3)损失函数L足够小
Kmeans++在Kmeans的基础上进行了改进
步骤如下:
1,从N个数据点中随机选取一个点作为初始的聚类中心,即 μ 1 \mu_1 μ1
2,计算每个点到聚类中心的距离
3,选取距离最远的数据点作为新的聚类中心
4,重复2-3步知道找到K个聚类中心为止
但是,Kmeans++的后一个聚类中心要依赖于前一个聚类中心
优点:算法简单,速度快,便于理解,复杂度低,当簇近似高斯分布的时候,效果会很好,而且可以保证有较好的伸缩性
缺点:K值的选取影响分类结果。K越大分类越精细;K越小分类越粗糙。对异常值敏感。对于初始聚类中心点的设置非常敏感。
假设数据挖掘的任务是将如下的八个点(用(x,y)代表位置)聚类为三个簇.A1(2,10),A2(2,5),A3(8,4),B1(5,8),B2(7,5),B3(6,4),C1(1,2),C2(4,9)距离函数是欧几里得距离.假设初始我们选择A1,B1和C1分别为每个簇的中心,用k均值算法给出 :
1,第一轮执行后的三个簇中心点为多少?
2,最后的三个簇是什么
解:由题目可知,将上述数据点聚成3类,题目要求使用欧式距离,将上述点整理成如下的表格
x | y | |
---|---|---|
A1 | 2 | 10 |
A2 | 2 | 5 |
A3 | 8 | 4 |
B1 | 5 | 8 |
B2 | 7 | 5 |
B3 | 6 | 4 |
C1 | 1 | 2 |
C2 | 4 | 9 |
(一)第一轮
初始的聚类中心为A1,B1和C1,我们要算出每个点到这三个聚类中心的距离,距离哪个聚类中心最小,就把这个点归于哪一类
拿A2与A1进行距离,算欧氏距离 S A 2 , A 1 S_{A_2,A_1} SA2,A1
S A 2 , A 1 = ( 2 − 2 ) 2 + ( 5 − 10 ) 2 S_{A_2,A_1} = \sqrt{(2-2)^2+(5-10)^2} SA2,A1=(2−2)2+(5−10)2
A1 | B1 | C1 | |
---|---|---|---|
A2 | min | ||
A3 | min | ||
B2 | min | ||
B3 | min | ||
C2 | min |
算出欧式距离进行比较发现,
第一轮
A1 (2,10)
B1(5,8),A3(8,4),B2(7,5),B3(6,4),C2(4,9)
C1(1,2),A2(2,5)
由此第一轮分类结果已出现,根据第一轮的分类结果重新计算聚类中心
第一个聚类中心为(2,10)
第二个聚类中心为(6,6)
计算方法为:(5+8+7+6+4)/5 = 6,(8+4+5+4+9)/5 = 6
第三个聚类中心为(1.5,3.5)
计算方法为:(1+2)/2 = 1.5,(2+5)/2 = 3.5
(二)第二轮
第二轮的聚类中心已知,所以将A1-C2的每个点与三个聚类中心算欧式聚类,然后进行比较选取最小的距离
(2.10) | (6,6) | (1.5,3.5) | |
---|---|---|---|
A1 | min | ||
A2 | min | ||
A3 | min | ||
B1 | min | ||
B2 | min | ||
B3 | min | ||
C1 | min | ||
C2 | min |
由此可知第二轮的最后结果为如下的三类:
{A1(2,10),B1(5,8),C2(4,9)}
{A3(8,4),B2(7,5),B3(6,4)}
{C1(1,2),A2(2,5)