从零开始机器学习(十二)

简介

在非监督学习中,我们的数据没有附带任何标签,我们拿到的数据就是这样的:
在这里插入图片描述
也就是说,在非监督学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,然后我们告诉这个算法,快去为我们找找这个数据的内在结构给定数据。我们可能需要某种算法帮助我们寻找一种结构。图上的数据看起来可以分成两个分开的点集(称为簇),一个能够找到我圈出的这些点集的算法,就被称为聚类算法。

在这里插入图片描述
当然,还有其他类型的非监督学习算法,它们可以为我们找到其他类型的结构或者其他的一些模式,而不只是簇。

K均值算法

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
K-均值是一个迭代算法,它会做两件事,一个是簇分配 ( c l u s t e r   a s s i g n m e n t ) (cluster \ assignment) (cluster assignment), 第二个是移动聚类中心:随机选择的 K K K个随机的点,称为聚类中心cluster centroids), K K K是想要分的簇的个数。

对于数据集中的每一个数据,按照距离 K K K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。下图中分为两个簇,离随机的红色中心点近的被分为红簇,蓝色被分为蓝簇。

在这里插入图片描述

计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。下图计算红簇的中心点,把红色随机中心点的位置移动。 蓝色中心点也是这样操作。

在这里插入图片描述

重复把点分配给聚类中心, 移动聚类中心这两步,直至中心点不再变化。

μ 1 μ^1 μ1, μ 2 μ^2 μ2,…, μ k μ^k μk 来表示聚类中心,用 c ( 1 ) c^{(1)} c(1), c ( 2 ) c^{(2)} c(2),…, c ( m ) c^{(m)} c(m)来存储与第 i i i个实例数据最近的聚类中心的索引,K-均值算法的伪代码如下:

Repeat {

for i = 1 to m

c(i) := index (form 1 to K) of cluster centroid closest to x(i)

for k = 1 to K

μk := average (mean) of points assigned to cluster k

}

算法分为两个步骤,第一个for循环是赋值步骤,即:对于每一个样例 i i i,计算其应该属于的类。第二个for循环是聚类中心的移动,即:对于每一个类 K K K,重新计算该类的质心。

K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组群的情况下也可以。

K K K均值算法的优化目标

对几个变量再说明一下:
c ( i ) c^{(i)} c(i) x ( i ) x^{(i)} x(i)所在簇的索引, 比如 x ( i ) x^{(i)} x(i) --> 5, 那么 c ( i ) c^{(i)} c(i)=5.
μ c ( i ) \mu_{c^{(i)}} μc(i) 是簇中心点所在位置

K-均值的代价函数(又称畸变函数 Distortion function)为:
J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) = 1 m ∑ i = 1 m ∥ X ( i ) − μ c ( i ) ∥ 2 J(c^{(1)},...,c^{(m)},μ_1,...,μ_K)=\dfrac {1}{m}\sum^{m}_{i=1}\left\| X^{\left( i\right) }-\mu_{c^{(i)}}\right\| ^{2} J(c(1),...,c(m),μ1,...,μK)=m1i=1mX(i)μc(i)2

右边是每个样本到每个样本所属的聚类中心的距离的平方, 目标就是最小化下面的式子:
在这里插入图片描述

下面回归一下伪代码:
在这里插入图片描述

第一个循环是用于减小 c ( i ) c^{(i)} c(i)引起的代价,固定 μ ( i ) \mu^{(i)} μ(i). 而第二个循环则是用于减小 μ i {{\mu }_{i}} μi引起的代价。迭代的过程一定会是每一次迭代都在减小代价函数,不然便是出现了错误

随机初始化

在运行K-均值算法的之前,我们首先要随机初始化所有的聚类中心点,下面介绍怎样做:

  1. 我们应该选择 K < m K<m K<m,即聚类中心点的个数要小于所有训练集实例的数量

  2. 随机选择 K K K个训练实例,然后令 K K K个聚类中心分别与这 K K K个训练实例相等, 就是在数据中随机确定几个点, 然后作为聚类中心

K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况
在这里插入图片描述

为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。这种方法在 K K K较小的时候(2–10)还是可行的,但是如果 K K K较大,这么做也可能不会有明显地改善。

  • 如何选择K呢? 有个是依据肘部法则, 看下图, 就是瞎几把分, 然后画出损失图, 如果发现肘部就按那个来分, 发现不了就GG. 还有是依据经验. 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

live_for_myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值