本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片
机器学习 | Coursera
吴恩达机器学习系列课程_bilibili
13 聚类算法
13-1 无监督学习
无监督学习的数据集是一堆不带标签的数据,他们没有
y
y
y的值,只有
x
x
x的值
13-2 K均值(K-means)算法
K均值算法的第一步(簇分配):确定两个聚类中心(图中蓝色叉和红色叉),遍历每一个样本(图中绿点),判断离哪个聚类中心更近,将样本分为两个簇,分完之后如下图
K均值算法的第二步(移动聚类中心):计算每一簇中所有点的均值,并将聚类中心移动到该均值处,移动后如下图
然后再重复第一步判断每一个样本离哪个聚类中心近,并改变他的颜色(分类),改变后再重复第二步。
这样不断重复,得到最终结果
这样就可以说K均值已经聚合了
输入一个
K
K
K表示想要将数据分为几类,输入不带标签的训练集
设训练集是一个n维向量(按照惯例不考虑
x
0
=
1
x_0=1
x0=1这一项)
如上图
用
K
K
K表示想要将数据分为
K
K
K类
用
μ
k
\mu_k
μk表示第
k
k
k个聚类中心的位置(他是一个向量/矩阵),随机初始化获得
用
c
(
i
)
c^{(i)}
c(i)表示样本中第
i
i
i个点距离最近的那个聚类中心的下标,即第
i
i
i个样本距离第
c
(
i
)
c^{(i)}
c(i)个聚类中心最近,即第
i
i
i个样本属于第
c
(
i
)
c^{(i)}
c(i)个聚类中心,求法如上图中蓝色笔迹
求完上述值后,计算每一个聚类中心包含的点的均值,赋值给对应的
μ
k
\mu_k
μk,此时已经得到新的聚类中心的位置
如果有一个没有点的聚类中心,一般直接移除,这样最后会得到K-1类;但如果确实是需要分为K类,那么就将那个没有点的聚类中心重新随机初始化
如上图,有时K均值算法也运用于不能很明显的分类的数据集,如收集了很多人的身高、体重作为数据集,可以看出这些数据基本是连续的,要将其分为S、M、L三类,用聚类算法,也能分为三类。聚类算法也可用于市场的分割
13-3 优化目标
μ
c
(
i
)
\mu_{c^{(i)}}
μc(i)表示第
i
i
i个样本所属聚类中心的位置
K均值聚类算法的代价函数(优化目标函数)为
J
(
c
(
1
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
)
=
1
m
∑
i
=
1
m
∥
x
(
i
)
−
μ
c
(
i
)
∥
2
J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_K)=\frac{1}{m}\sum_{i=1}^m\Vert x^{(i)}-\mu_{c^{(i)}}\Vert^2
J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∥x(i)−μc(i)∥2
表示的是每一个样本的位置与它所属的聚类中心位置作差,取范数,再平方,所有共m个样本加起来再求平均数
这个代价函数有时也称为失真代价函数(the distortion cost function)或K均值算法的失真
13-4 随机初始化(K均值聚类算法)
- 从训练集中随机挑选
K
K
K个样本,让第一到第K的聚类中心等于刚刚随机出来的
K
K
K个样本
如上图,由于是随机挑选的聚类中心,所以结果可能是全局最优(如上图上面的坐标系),也可能落在局部最优上(如上图下面两个坐标系)
所以,采用多次随机初始化的方法寻找全局最优
如上图,多次随机初始化的方法为:
运行50-1000次K均值聚类算法,可以得到许多不同的代价函数的值,取最小的那个就是最优的聚类
如果K=2到10,那么多次随机初始化可以明显改进聚类算法效果,如果大于10,多次运行可能不会有特别明显的改善
13-5 如何选择聚类数量K
一般是手动选择
- 如上图,运用肘部法则,坐标系x轴为聚类数量K,坐标系y轴为代价函数的值,绘制曲线后,如左侧的坐标系,能看到曲线在K=3处由很高的斜率转为了很低的斜率,这一点认为是“肘部”,选择K=3是合适的,但也有可能曲线是如右边坐标系的图像,不能明确地找出合适的聚类数量
或者另外一种方法,根据下游目的来手动选择聚类数量