2022.02.11开始学习第十三章
2022.02.12继续学习
2022.02.14今天继续弄
2022.02.17事情终于忙完了,回来学习
2022.02.18继续弄第十三章
2022.02.21接连不断的事情要做,接着又开学了,又有了更多的事,遥遥无期,抽时间弄吧
2022.02.22弄完十三章
I n p u t : − K ( n u m b e r o f c l u s t e r s ) − T r a i n i n g s e t { x ( 1 ) , x ( 2 ) , . . . , x ( m ) } x ( i ) ∈ R n ( d r o p x 0 = 1 c o n v e n t i o n ) \begin{aligned} &Input:\\ &\qquad - K\ \ (number\ \ of\ \ clusters)\\ &\qquad - Training\ \ set\ \ \{x^{(1)},x^{(2)},...\ ,x^{(m)}\}\\\ \\ &\quad x^{(i)}\in\R^n(drop\ \ x_0=1\ \ convention) \end{aligned} Input:−K (number of clusters)−Training set {x(1),x(2),... ,x(m)}x(i)∈Rn(drop x0=1 convention)
目前为止,K 均值算法都基于图中的数据集(下图左),明显可以分为三个簇,然后用算法实现它。
但在实际中,K 均值算法也会基于这样的数据集(上图右),看起来不能很好地分为几个簇。举个例子,关于 T 恤尺寸的例子,假如 T 恤制造商已经找到了一些顾客,想把 T 恤卖给他们,现在已经收集到了一些这些人身高体重的样本数据,假设身高和体重高度相关,现在想确定 T 恤的尺寸,设计三种不同大小的 T 恤(小中大),可以执行 K 均值聚类算法,可能会将数据分为图示的三个簇,之后可以观察第一类人群的身高体重数据,然后设计出小号 T 恤,中号大号以此类推。
这有点类似于市场划分的例子,用 K 均值算法将市场划分为 3 个不同的部分,这样就可以分别设计产品(小号中号大号),分别去贴近这三个人群的需求。
有几种不同的方法可以用来随机初始化聚类中心。但是事实证明,通常下面的一种方法效果最好:
S
h
o
u
l
d
h
a
v
e
K
<
m
R
a
n
d
o
m
l
y
p
i
c
k
K
t
r
a
i
n
i
n
g
e
x
a
m
p
l
e
s
.
S
e
t
μ
1
,
.
.
.
,
μ
K
e
q
u
a
l
t
o
t
h
e
s
e
K
e
x
a
m
p
l
e
s
.
\begin{aligned} &Should\ \ have\ \ K<m\\\ \\ &Randomly\ \ pick\ \ K\ \ training\ \ examples.\\\ \\ &Set\ \ \mu_1,...\ ,\mu_K\ \ equal\ \ to \ \ these\ \ K\ \ examples. \end{aligned}
Should have K<mRandomly pick K training examples.Set μ1,... ,μK equal to these K examples.
当运行 K 均值算法时,应该把聚类中心数值 K 设置为比训练样本数量 m 小的值,通常用来初始化 K 均值聚类的方法是随机挑选 K 个训练样本,然后设定 μ1 到 μK,让它们等于这K个样本,下面是一个具体的例子:
假设 K 等于 2,并且想找到两个聚类,为了初始化聚类中心,随机挑选 2 个样本,理想情况下为上图左,但是有时也会是是上图右。
不同的聚类初始化状态决定了最终收敛于不同的结果,随机初始化状态不同 K 均值最后可能会得到不同的结果。具体而言,K 均值算法可能会落在局部最优。下图的数据看起来好像有 3 个聚类,如果运行 K 均值算法,假设最后得到一个比较好的局部最优,但事实上这应该是全局最优(下图 1),可能会得到这样的聚类结果,但是如果随机初始化得到的结果不好,就可能得到下面这些不同的局部最优值(下图 2、3):
例如上图 2,看上去蓝色的聚类捕捉到了左边的很多点,而红色和绿色的聚类则捕捉到了相对较少的点,这就是不好的局部最优,因为它将上面的两个聚类当做一个聚类,进一步将下面的聚类分割成了两个小的聚类,图 3 存在着同样的问题。
Random initialization: f o r i = 1 t o 100 { R a n d o m l y i n i t i a l i z e K – m e a n s . R u n K – m e a n s . G e t c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K . C o m p u t e c o s t f u n c t i o n ( d i s t o r t i o n ) J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) } P i c k c l u s t e r i n g t h a t g a v e l o w e s t c o s t J ( c ( 1 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) \begin{aligned} &\textbf{Random\ \ initialization:}\\ &for\ \ i=1\ \ to\ \ 100\{\\ &\qquad\qquad Randomly\ \ initialize\ \ K\text{\textendash}means.\\ &\qquad\qquad Run\ \ K\text{\textendash}means.Get\ \ c^{(1)},...\ ,c^{(m)},\mu_1,...\ ,\mu_K.\\ &\qquad\qquad Compute\ \ cost\ \ function(distortion)\\ &\qquad\qquad\qquad J(c^{(1)},...\ ,c^{(m)},\mu_1,...\ ,\mu_K)\\ &\qquad\qquad\}\\\ \\ &Pick\ \ clustering\ \ that\ \ gave\ \ lowest\ \ cost\ \ J(c^{(1)},...\ ,c^{(m)},\mu_1,...\ ,\mu_K) \end{aligned} Random initialization:for i=1 to 100{Randomly initialize K–means.Run K–means.Get c(1),... ,c(m),μ1,... ,μK.Compute cost function(distortion)J(c(1),... ,c(m),μ1,... ,μK)}Pick clustering that gave lowest cost J(c(1),... ,c(m),μ1,... ,μK)
现在人们的主要想法是手动选择聚类数目。选择聚类数量并不容易,很大程度上是因为通常在数据集中有多少个聚类是不清楚的。看这样一个数据集:
有些人可能会觉得上面的数据中有 4 个聚类(蓝色),而另一些人可能觉得是 2 个(红色)。观察类似这样的数据集,真实的聚类数相当地模棱两可,并非只有一个正确的答案。这就是无监督学习的一部分,数据没有标签,因此并不总是有一个明确的答案,也因为这个原因,用一个自动化的算法来选择聚类数量是很困难的。
当人们在讨论选择聚类数量的方法时,可能会谈到一个方法,叫做 “肘部法则(the Elbow Method)” ,其要做的是改变K,也就是聚类总数,先用一个类来聚类,这就意味着所有的数据都会分到一个类里,然后计算代价函数,即畸变函数 J,对应着下图(左)中曲线的起点。
随着聚类数量的增多,畸变值下降,可能会得到一条类似于下图(左)中的曲线。如果观察这条曲线,“肘部法则”所做的就是观察这个图,可以看到这条曲线有一个“肘部”,可以发现这种模式从 1 到 2,从 2 到 3,畸变值迅速下降,到了肘部(K=3),在此之后,畸变值就下降的非常慢,看上去,也许使用3个类来进行聚类是正确的,这时因为这个点是曲线的拐点(the elbow),一开始畸变值下降地很快直到 K 等于 3,再之后就下降得很慢,那么就选 K 等于 3。当应用“肘部法则”的时候,如果得到了一个像下图(左)这样的图,那么这将是一种用来选择聚类个数的合理方法。
事实证明,“肘部法则”并不那么常用,原因之一是在实际运用到聚类问题上时,往往最后会得到一条看上去相当模糊的曲线(上图右),如果观察上面这个图,也许没有一个清晰的拐点,看上去畸变值是连续下降的,可能是3、4、5。
在实际操作中,图像如果看起来像之前那个带拐点的非常好了,它会给一个清晰的答案,但是也有很多时候,最终得到的图像是上面那个没有清晰拐点的,这种情况下,用这个方法来选择聚类数目是很困难的。
小结:“肘部法则”是一个值得尝试的方法,但是不能期望它能够解决任何问题。
最后还有另外一种选择 K 值的思路。通常人们使用 K 均值聚类是为了得到一些聚类用于后面的目的,或者说下游目的(downstream purpose)。也许想用 K 均值聚类来做市场分割(就像之前说的 T 恤尺寸的例子),或者来更好地组织计算机集群,或者为了别的目的。如果后续目的,如市场分割,能给我们一个评估标准,那么决定聚类的数量更好的方式是看哪个聚类数量能更高地应用于后续目的。
用一个具体的例子来解释。还是来看T恤尺寸的例子,要决定是否需要 3 种 T 恤尺寸,因此选择 K 等于 3(小号、中号、大号),或者可以选择 K 等于 5(特小号、小号、中号、大号、特大号),所以可以有3种T恤尺寸或者5种,当然也可以有4种尺寸(这里为了简洁只展示 3 和 5 两种情况)。
分别用 K 等于 3 和 5 来跑 K 均值得到如下结果:
这个例子的一个好处就是,它给了我们另一种方法来选择我们想要的聚类数量究竟是 3、4 还是 5。具体而言,我们可以从 T 恤商业的角度来思考,并且问自己“如果我有 5 个分类,我的 T 恤能否很好地满足顾客的需求?我可以卖出多少 T 恤?客户是否会感到满意?”,其中真正有意义的是从 T 恤商业的角度去考虑。这个例子说明怎样用后续的下游目的,比如决定生产什么样的 T 恤作为评价标准来选择聚类数量。