Coursea-吴恩达-machine learning学习笔记(十三)【week 8之Unsupervised Learning】

本文详细介绍了K均值聚类算法的工作原理及其优化目标。包括如何随机初始化聚类中心,通过迭代更新聚类中心及分配数据点来降低失真代价函数。此外,还探讨了如何通过多次随机初始化来提高找到全局最优解的概率,并讨论了确定最佳聚类数目的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监督学习
这里写图片描述
训练集:{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}
针对一组有标记的训练数据,提出一个适当的假设,找出决策边界,借此区分正负标记数据。

无监督学习
这里写图片描述
训练集:{x(1),x(2),,x(m)}{x(1),x(2),⋯,x(m)}
面对一组无标记的训练数据,数据之间不具有任何相关联的标记,将未标记的数据送入特定的算法,分析出数据的结构,例如聚类。

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

有一些未标记的数据如下图所示,想将这些数据分成两个簇
这里写图片描述
首先随机选择两个点,称为聚类中心:
这里写图片描述
KK均值算法是一个迭代方法,做两件事:

  1. 簇分配,即遍历所有的样本,依据每个点更接近哪个中心,来将数据点分配到不同的聚类中心,如下图:
    这里写图片描述
  2. 移动聚类中心,将聚类中心移动到该类所有点的均值处,如下图:
    这里写图片描述
    循环以上两步,得到如下图结果:
    这里写图片描述
    当聚类中心不再变化时,K均值算法收敛。

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

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

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

  3. 我们用μc(i)μc(i)表示样本x(i)x(i)被分配到的簇的聚类中心。
    KK均值算法的优化目标:
    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)minc(1),⋯,c(m)μ1,⋯,μKJ(c(1),⋯,c(m),μ1,⋯,μK)
    上面这个代价函数也叫失真代价函数。

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

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

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

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

    假设存在数据如下图:
    这里写图片描述
    其全局最优解为:
    这里写图片描述
    由于随机初始化的不同,可能得到如下两种局部最优解:
    这里写图片描述
    这里写图片描述
    如果想提高KK均值算法找到全局最优解的几率,能做的是尝试多次随机初始化,运行多次K均值算法。
    具体做法如下:
    for i= 1 to 100for i= 1 to 100
    {{
    随机初始化KK均值;
    运行KK均值算法,得到c(1),,c(m),μ1,,μK
    计算代价函数J(c(1),,c(m),μ1,,μK)J(c(1),⋯,c(m),μ1,⋯,μK)
    }}
    选取J(c(1),,c(m),μ1,,μK)J(c(1),⋯,c(m),μ1,⋯,μK)最小的聚类。

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

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

    肘部法则(Elbow Method):
    计算KK取不同值时的代价函数J,用图表呈现,如下图:
    这里写图片描述
    找到拐点,即K=3K=3处,则类别数取33

    但是,实际中经常得到的结果为下图:
    这里写图片描述
    没有清晰的肘点,畸变值是连续下降的。
    所以肘部法则值得尝试,但不是在任何问题上都有好的表现。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值