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

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

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

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

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

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

    1. 参数K(表示聚类簇的个数);

      • 训练集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } x(i)Rn x ( i ) ∈ R n 是个 n n 维向量。

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

    我们用 μc(i) μ c ( i ) 表示样本 x(i) x ( i ) 被分配到的簇的聚类中心。
    K 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) min c ( 1 ) , ⋯ , c ( m ) μ 1 , ⋯ , μ K J ( c ( 1 ) , ⋯ , c ( m ) , μ 1 , ⋯ , μ K )
    上面这个代价函数也叫失真代价函数。

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

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

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

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

    假设存在数据如下图:
    这里写图片描述
    其全局最优解为:
    这里写图片描述
    由于随机初始化的不同,可能得到如下两种局部最优解:
    这里写图片描述
    这里写图片描述
    如果想提高 K K 均值算法找到全局最优解的几率,能做的是尝试多次随机初始化,运行多次K均值算法。
    具体做法如下:
    for i= 1 to 100 f o r   i =   1   t o   100
    { {
    随机初始化 K K 均值;
    运行 K K 均值算法,得到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 ) 最小的聚类。

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

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

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值