监督学习
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
训练集:{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}
针对一组有标记的训练数据,提出一个适当的假设,找出决策边界,借此区分正负标记数据。

无监督学习
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
训练集:{x(1),x(2),,x(m)}
面对一组无标记的训练数据,数据之间不具有任何相关联的标记,将未标记的数据送入特定的算法,分析出数据的结构,例如聚类。

K均值(Kmeans)算法是现在最为广泛使用的聚类算法。

有一些未标记的数据如下图所示,想将这些数据分成两个簇
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
首先随机选择两个点,称为聚类中心:
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
K均值算法是一个迭代方法,做两件事:

  1. 簇分配,即遍历所有的样本,依据每个点更接近哪个中心,来将数据点分配到不同的聚类中心,如下图:
    Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
  2. 移动聚类中心,将聚类中心移动到该类所有点的均值处,如下图:
    Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
    循环以上两步,得到如下图结果:
    Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
    当聚类中心不再变化时,K均值算法收敛。

K均值算法接受两个输入:

  1. 参数K(表示聚类簇的个数);
  2. 训练集{x(1),x(2),,x(m)}x(i)Rn是个n维向量。

算法说明
随机初始化K个聚类中心μ1,μ2,,μKRn
Repeat{
for i= 1 to m
c(i):=距样本x(i)最近的聚类中心的索引(1K)
注:minkx(i)μkc(i)=k
for k= 1 to K
μk:=分配到第k个簇的所有点的平均值
例:c(1)=2,c(5)=2,c(6)=2,c(10)=2
μ2=14[x(1)+x(5)+x(6)+x(10)]
}
如果存在一个没有点分配给它的聚类中心,直接将该中心移除。

我们用μc(i)表示样本x(i)被分配到的簇的聚类中心。
K均值算法的优化目标:
J(c(1),,c(m),μ1,,μK)=1mi=1mx(i)μc(i)2
minc(1),,c(m)μ1,,μKJ(c(1),,c(m),μ1,,μK)
上面这个代价函数也叫失真代价函数。

K均值算法中:
第一步
for i= 1 to m
c(i):=距样本x(i)最近的聚类中心的索引(1K)
实际是在对代价函数进行关于参数c(1),,c(m)的最小化,保持μ1,,μK不变。
第二步
for k= 1 to K
μk:=分配到第k个簇的所有点的平均值
实际上是选择最小化代价函数的μ1,,μK

随机初始化聚类中心的方法

  1. 确保K<mK为类别数,m为训练样本数;
  2. 随机选取K个训练样本;
  3. μ1,,μK等于这K个训练样本,μ1,,μK表示K个聚类中心。

因为随机初始化的不同,K均值算法最终可能会得到不同的结果,只得到局部最优解。

假设存在数据如下图:
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
其全局最优解为:
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
由于随机初始化的不同,可能得到如下两种局部最优解:
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
如果想提高K均值算法找到全局最优解的几率,能做的是尝试多次随机初始化,运行多次K均值算法。
具体做法如下:
for i= 1 to 100
{
随机初始化K均值;
运行K均值算法,得到c(1),,c(m),μ1,,μK
计算代价函数J(c(1),,c(m),μ1,,μK)
}
选取J(c(1),,c(m),μ1,,μK)最小的聚类。

实际证明:若K较小(210),做多次随机初始化通常能保证找到一个较好的局部最优解,但若K非常大时,做多次随机初始化不太会有太大影响,可能会有稍好的结果,但不会好太多。

如何决定聚类数?
最常用的方法:通过看可视化的图或者看聚类算法的输出结果手动决定聚类的数目。

肘部法则(Elbow Method):
计算K取不同值时的代价函数J,用图表呈现,如下图:
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
找到拐点,即K=3处,则类别数取3

但是,实际中经常得到的结果为下图:
Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】
没有清晰的肘点,畸变值是连续下降的。
所以肘部法则值得尝试,但不是在任何问题上都有好的表现。

还有一种考虑K值的方法:看不同的聚类数量能为后续目标提供多好的结果。

相关文章:

  • 2021-10-04
  • 2022-12-23
  • 2021-10-09
  • 2021-06-06
  • 2021-04-17
  • 2018-08-15
  • 2021-08-11
猜你喜欢
  • 2021-09-09
  • 2021-06-28
  • 2021-07-09
  • 2021-09-04
  • 2021-06-30
  • 2021-10-30
  • 2021-06-15
相关资源
相似解决方案