本周主要讲的是聚类和降维。
聚类
聚类是一种无监督的学习,应用实例有把一堆文章按主题分类,将T恤的尺寸分成几类,例如SML号等。这里讲的是K-Means。
K-Means其实原理很简单,主要是三步:
- 初始化K类的初始中心点。
- 计算每一个样本点到K中心点的距离,找出最小的距离,就定这个点为第k类。
- 计算每一类所有样本的均值点,更新中心点。
- 重复2.3.直到算法收敛。
所以其实K-Means的优化目标就是:
其中2.3步分别优化的是J wrt
c
c
和J wrt
第一个好理解,就是固定了
c(i)
c
(
i
)
,然后找每个点距离最近的
c(i)
c
(
i
)
。然而第二个可能不是那么直观,其实主要是对于N个点来说,如果希望优化
1N∑(∥∥x(i)−μc(i)∥∥)
1
N
∑
(
‖
x
(
i
)
−
μ
c
(
i
)
‖
)
,那么就要找到他们的平均点。
这一点稍稍补充一下,给一个解析解:
假设
X
X
是某个点,是N个固定点,这个固定点按照列向量排列。那么其实:
那么就是:
用 矩阵的迹的相关导数性质:
那么:
这样第二步其实就是对 μk μ k 的优化。
方法二直接对上边那个求导数,就是 ∑(X−yi)=0 ∑ ( X − y i ) = 0 所以 X=1/N⋅∑yi X = 1 / N ⋅ ∑ y i
另外有几点:
1. 初始化的时候,最好随机选取几个样本点,这样也能快点收敛。
2. 如果类别比较少,比方说3~5类,可能容易收敛到局部最优,那么就多试几次,然后取cost最小就可以了。
3. 如何选取K呢?其实有一个elbow定理,就是对K=1,2,3.。。计算cost,会发现cost出现一个elbow的拐点。这个时候就取拐点就好了。但是有的时候可能没有拐点,那么可以从商业价值的方向考虑,例如衣服分几个尺寸比较好?这个就是商业问题了。
PCA
PCA用来降维。
也就是将各个样本向量往样本子空间进行投影,尽量往方差大的地方投。直观上是这么表述,数学上就是:
这个优化问题的解析解就是对样本特征的协方差矩阵进行奇异值分解。
不过首先还是得对样本的各个特征做一个归一化处理,否则会比较不公平,本来一些特征的方差相对较大,但是由于绝对数量小,导致无法作为主分量。
也就是
Σ=PTDP
Σ
=
P
T
D
P
,然后
Z=PTsX
Z
=
P
s
T
X
,
Ps
P
s
是前k个特征向量组成的P的子矩阵。
然后如果想投影回去,就是
X′=PssZ
X
′
=
P
s
s
Z
是
P
P
的逆矩阵,也就是的转置矩阵的前k个向量然后再转置的。具体为啥就不描述了,线性代数的内容。
说几个要点,