Week8 非监督学习——聚类、PCA
1 什么是非监督学习?
无监督的学习方式:
样本不是
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),而只有x_i,能否只用x_i,根据输入与x_i的相似性来进行机器学习?可以,聚类就是无监督学习的很重要一部分。
上图所示就是无监督学习的一个简单例子。根据已有的样本点,将样本分为两类。这两类中的样本点可能有各自相似之处,通过分类后仔细研究就可以在大数据中找到相似数据之间的规律。
无监督学习常用的应用领域有:市场分割、社会关系网络分析、航天数据分析等等。
2 k均值聚类(k-Means)算法
2.1聚类的定义
聚类就是对大量未标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。它是无监督学习的典例。可以使用各种相似性作度量,搭配各种聚类算法,需要根据情况进行选择。
聚类的基本思想
1).给定一个有N个对象的数据集,构造数据的k个簇,k≤n。满足下列条件:
a.每个簇至少有一个对象;
b.每个对象属于且仅属于一个簇;
将满足上述条件的k个簇称作一个合理划分。
2).基本思想:对于给定的类别数目k,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。
2.2 k均值聚类算法
I).算法步骤
假定输入样本为
x
(
i
)
m
{x^{(i)} }_m
x(i)m,(注意,聚类算法中不需要增加常数1的特征x_0),则算法步骤为:
1).选择初始的k个类别中心
μ
1
,
μ
2
…
μ
k
μ_1,μ_2…μ_k
μ1,μ2…μk(k值和初始中心按自选方法进行选择)
2).对于每个样本
x
(
i
)
x^{(i)}
x(i),将其标记为距离类别中心最近的类别,即:
l
a
b
e
l
i
=
arg
min
1
≤
j
≤
k
∣
∣
x
(
i
)
−
μ
j
∣
∣
label_i=\arg\min\limits_{1≤j≤k}||x^{(i)}-μ_j ||
labeli=arg1≤j≤kmin∣∣x(i)−μj∣∣
3).将每个类别中心更新为隶属该类别的所有样本的均值, c_j是第j类的个数:
μ
j
=
1
∣
c
j
∣
∑
i
∈
c
j
x
(
i
)
μ_j=\frac{1}{|c_j|}\sum_{i∈c_j}x^{(i)}
μj=∣cj∣1i∈cj∑x(i)
4).重复最后两步,直到类别中心的变换小于某阈值。
可选终止条件:迭代次数/簇中心变化率/最小平方误差MSE等等。
当数据里不同类的的方差相差很大或者数量相差很大时,k-means算法可能效果不是非常好。
II). K-Means的公式化(为什么k-means算法是可收敛的?
记K个簇的中心为
μ
1
,
μ
2
,
…
,
μ
k
μ_1,μ_2,…,μ_k
μ1,μ2,…,μk,每个簇的样本数目为
N
1
,
N
2
,
…
N
k
N_1,N_2,…N_k
N1,N2,…Nk。使用平方误差作为目标函数:
J
(
μ
1
,
μ
2
,
…
,
μ
k
)
=
1
2
∑
j
=
1
K
∑
i
=
1
N
j
(
x
(
i
)
−
μ
j
)
2
J(μ_1,μ_2,…,μ_k)=\frac{1}{2}\sum_{j=1}^K\sum_{i=1}^{N_j}(x^{(i)}-μ_j)^2
J(μ1,μ2,…,μk)=21j=1∑Ki=1∑Nj(x(i)−μj)2
该函数为关于μ_1,μ_2,…,μ_k$的凸函数,其驻点为:
∂
J
∂
μ
j
=
−
2
∑
i
=
1
N
j
(
x
(
i
)
−
μ
j
)
=
0
↔
μ
j
=
1
N
j
∑
i
=
1
N
j
x
(
i
)
\frac{∂J}{∂μ_j}=-2\sum_{i=1}^{N_j}(x^{(i)}-μ_j)=0↔μ_j=\frac{1}{N_j}\sum_{i=1}^{N_j}x^{(i)}
∂μj∂J=−2i=1∑Nj(x(i)−μj)=0↔μj=Nj1i=1∑Njx(i)
也就是算法中的第3步,所以k-means算法的本质其实是对其目标函数的梯度下降法。
这其实是批量梯度下降算法。如果将批量梯度下降算法改成随机梯度下降,就可以得到Mini-batch k-Means算法,这样可以增加算法的效率,但是会略微牺牲准确率,需要权衡使用随机梯度下降的随机量。代码中只需要加入一行,对当前使用的样本进行随机数判断,如果随机数(0~1)小于设定的概率(比如0.8)那就选用该样本,否则就不使用。
III).k均值算法的损失函数
记
μ
1
,
μ
2
,
…
,
μ
k
μ_1,μ_2,…,μ_k
μ1,μ2,…,μk为算法最终选择的K个聚类中心,每个簇的样本数目为
N
1
,
N
2
,
…
N
k
N_1,N_2,…N_k
N1,N2,…Nk。使用平方误差作为损失函数:
J
(
μ
1
,
μ
2
,
…
,
μ
k
)
=
1
2
∑
j
=
1
K
∑
i
=
1
N
j
(
x
(
i
)
−
μ
j
)
2
J(μ_1,μ_2,…,μ_k)=\frac{1}{2}\sum_{j=1}^K\sum_{i=1}^{N_j}(x^{(i)}-μ_j)^2
J(μ1,μ2,…,μk)=21j=1∑Ki=1∑Nj(x(i)−μj)2
利用上述函数,就可以评价k均值算法的聚类效果如何。
注意,该损失函数相对于
x
(
i
)
x^{(i)}
x(i)来说是凸函数,因此一定能找到全局最优解。但是由于初始聚类中心的选择不同,损失函数就会改变,全局最优解也会因此改变,所以,初始聚类中心是可以影响算法最终效果的。
IV).如何选择初始聚类中心?
1).吴恩达老师课程中提供的方式比较简单,就是确定聚类个数K后,随机在所有样本中选择K个样本,作为初始聚类中心。注意,k均值算法虽然能保证收敛,但是其收敛的结果却是和初始聚类中心的数量和选择密切相关的。因此,选择不同的聚类中心,最终得到的结果好坏是不同的。因此,通常需要多次运行k均值算法(100~1000次左右),每次都随机初始化聚类中心,最终选择损失值最小的作为结果。这种方法在K数量不大(<=10)的时候效果不错,但是如果K数量较大,那么这种方法不仅效率低,而且改善不会很明显。
2).这时,可以采用二分k-means算法,就是在原始初值分类完后,分别求每个类别的MSE,然后在MSE较大的类别里取两个点作初值,在MSE很小的两个类别里只取1个点作初值,以此类推,再重新作一次k-means算法。重复上述步骤若干次,最终可以得到较好的结果。但是这种方式其实不太好写代码,通常是用以下方式选初值:先随机选第一个样本作聚类中心,然后求所有样本到该聚类中心的距离,根据距离的远近分配权值,距离越远选择的权值越大,然后再选第二个聚类中心。再从所有样本中更新到两个聚类中心距离的远近的权值,从而选择第三个聚类中心,以此类推。
V).如何选择K值?
1).肘部法则
先遍历K=1,2,…,。绘制聚类总数K和损失函数J的函数关系图,如下图。如果该关系图出现如下左图中的肘部形状,那么可以将K选择为肘部位置的数值(图中的3)。
但通常来说,最终画出的关系图是类似于如上图右的样子,没有明显的肘部形状。这时候就要考虑方法2了。
2).根据实际情况进行选择
在实行聚类算法前,通常问题都有一定的背景条件。这时候,就可以根据项目背景或项目要求来选择K值。比如在衬衫尺寸的样本数据中,我们通常会选择3~5个聚类中心,因为衬衫尺码通常可以分为XS,S,M,L,XL等型号。
VI).K-Means算法的思考:
a.如果数组1,2,3,4,100的均值为22,和大部分数据都不同。这时候取中位数3比较合适,就改编成K中位数算法。
b.该算法默认样本属于高斯分布(k中位数算法属于拉普拉斯分布),这样得到的簇其实都是类似于圆的簇,如果样本分布和高斯分布相差很多,那么就效果可能就不好。
c.聚类和降维(PCA)是异曲同工的。
d.聚类前,进行适当的数据处理是很有效的。如果能保证数据的特征时,用某种处理把数据的区分度加大,有利于聚类的进行。
VII).如何度量数据的相似性?(拓展)
通常,用来度量样本特征与聚类中心相似程度的指标有如下几种,可根据情况选用:
1).闵可夫斯基距离(常用欧氏距离,p=2)
d
i
s
t
(
X
,
Y
)
=
(
∑
i
=
1
n
∣
x
i
−
y
i
∣
p
)
1
p
dist(X,Y)=(\sum_{i=1}^n|x_i-y_i|^p)^{\frac{1}{p}}
dist(X,Y)=(i=1∑n∣xi−yi∣p)p1
2).杰卡德相似系数(Jaccard)
J
(
A
,
B
)
=
∣
A
∩
B
∣
∣
A
∪
B
∣
J(A,B)=\frac{|A∩B|}{|A∪B|}
J(A,B)=∣A∪B∣∣A∩B∣
3).余弦相似度(cosine similarity)
c
o
s
(
θ
)
=
a
T
b
∣
a
∣
∣
b
∣
cos(θ)=\frac{a^T b}{|a||b|}
cos(θ)=∣a∣∣b∣aTb
4).Pearson相似系数
ρ
X
Y
=
c
o
v
(
X
,
Y
)
σ
X
σ
Y
=
E
[
(
X
−
μ
X
)
(
Y
−
μ
Y
)
]
σ
X
σ
Y
=
∑
i
=
1
n
(
X
−
μ
X
)
(
Y
−
μ
Y
)
∑
i
=
1
n
(
X
−
μ
X
)
2
∑
i
=
1
n
(
Y
−
μ
Y
)
2
ρ_{XY}=\frac{cov(X,Y) }{ σ_Xσ_Y}=\frac{E[(X-μ_X)(Y-μ_Y)] }{ σ_Xσ_Y}=\frac{\sum_{i=1}^n(X-μ_X)(Y-μ_Y) }{ \sqrt{\sum_{i=1}^n(X-μ_X)^2}\sqrt{\sum_{i=1}^n(Y-μ_Y)^2}}
ρXY=σXσYcov(X,Y)=σXσYE[(X−μX)(Y−μY)]=∑i=1n(X−μX)2∑i=1n(Y−μY)2∑i=1n(X−μX)(Y−μY)
μ
X
=
0
,
μ
Y
=
0
μ_X=0,μ_Y=0
μX=0,μY=0时,就是余弦相似度。
5).相对熵(K-L距离)
D
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
log
p
(
x
)
q
(
x
)
=
E
p
(
x
)
log
p
(
x
)
q
(
x
)
,
p
(
x
)
,
q
(
x
)
分
别
是
不
同
样
本
的
分
布
概
率
密
度
D(p||q)=\sum_x p(x) \log \frac{p(x) }{q(x)}=E_{p(x)}\log \frac{p(x) }{q(x)},p(x),q(x)分别是不同样本的分布概率密度
D(p∣∣q)=x∑p(x)logq(x)p(x)=Ep(x)logq(x)p(x),p(x),q(x)分别是不同样本的分布概率密度
一般来说,D(p||q)≠D(q||p),所以该距离不对称,只有在p和q同分布的时候才相等。
(KL散度和最大似然估计的关系)
假设已知样本
x
i
{x_i}
xi,它满足的分布p(x),但是通常p(x)都无法很容易确定,而且不是简单的概率分布。所以我们需要找到一个简单的分布q(x)让它尽量接近p(x),所以就有:
m
i
n
D
(
p
∣
∣
q
)
=
m
i
n
∑
x
p
(
x
)
log
p
(
x
)
q
(
x
)
=
m
i
n
∑
x
(
p
⋅
l
n
p
−
p
⋅
l
n
q
)
minD(p||q)=min\sum_x p(x)\log \frac{p(x) }{q(x)}=min\sum_x (p·lnp-p·lnq)
minD(p∣∣q)=minx∑p(x)logq(x)p(x)=minx∑(p⋅lnp−p⋅lnq)
因为已知样本
x
i
{x_i}
xi,所以分布p(x)是常量,再根据熵的定义,上式可以化为:
min
D
(
p
∣
∣
q
)
=
min
(
−
H
(
x
)
−
∑
x
l
n
q
p
)
=
max
∑
x
l
n
q
p
=
max
l
n
∏
x
q
(
x
)
p
(
x
)
\minD(p||q)=\min(-H(x)-\sum_x lnq^p)=\max \sum_x lnq^p =\max ln∏_x q(x)^{p(x)}
minD(p∣∣q)=min(−H(x)−x∑lnqp)=maxx∑lnqp=maxlnx∏q(x)p(x)
ln可有可无,
∴
min
D
(
p
∣
∣
q
)
=
max
∏
x
q
(
x
)
p
(
x
)
∴\min D(p||q)=\max ∏_x q(x)^{p(x) }
∴minD(p∣∣q)=max∏xq(x)p(x)
即KL散度本质上和最大似然估计是一样的。其实
∑
x
p
⋅
l
n
q
\sum_x p·lnq
∑xp⋅lnq也是交叉熵,也就是交叉熵求最大值)
6).Hellinger距离
D
α
(
p
∣
∣
q
)
=
2
1
−
α
2
(
1
−
∫
p
(
x
)
1
+
α
2
q
(
x
)
1
−
α
2
d
x
)
,
p
,
q
的
含
义
同
上
D_α(p||q)=\frac{2}{ 1-α^2}(1-\int p(x)^{\frac{1+α}{2}}q(x)^{\frac{1-α }{2}}dx),p,q的含义同上
Dα(p∣∣q)=1−α22(1−∫p(x)21+αq(x)21−αdx),p,q的含义同上
Hellinger距离是对称的,可以在α=0的时候证明。
α
=
±
1
α=±1
α=±1时,
D
α
(
p
∣
∣
q
)
≈
D
(
p
∣
∣
q
)
D_α (p||q)≈D(p||q)
Dα(p∣∣q)≈D(p∣∣q)。
2.3 其他聚类算法(拓展)
有时间再补充
Canopy、层次聚类法、密度聚类法、相似度传递算法(AP算法)、谱聚类、标签传递算法等
2.4 聚类的衡量指标(拓展)
也不一定只适用于聚类里的衡量,也能用于其他算法。
1).均一性(Homogeneity)
h
=
{
1
,
i
f
H
(
C
)
=
0
1
−
H
(
C
│
K
)
H
(
C
)
,
o
t
h
e
r
w
i
s
e
h=\begin{cases} 1,if \quad H(C)=0\\ 1-\frac{H(C│K)}{H(C)} ,otherwise \end{cases}
h={1,ifH(C)=01−H(C)H(C│K),otherwise
均一性就是每个簇里只有一个类别的样本,没有别的类别样本。类别本身信息熵H©。
2).完整性(Completeness)
c
=
{
1
,
i
f
H
(
K
)
=
0
1
−
H
(
K
│
C
)
H
(
K
)
,
o
t
h
e
r
w
i
s
e
c=\begin{cases} 1,if \quad H(K)=0\\ 1-\frac{H(K│C)}{H(K)} ,otherwise \end{cases}
c={1,ifH(K)=01−H(K)H(K│C),otherwise
完整性就是同类别样本被归类到相同簇中。
3).V-measure(均一性和完整性的加权平均)
v
β
=
(
1
+
β
)
⋅
h
⋅
c
β
2
⋅
h
+
c
v_β=\frac{(1+β)·h·c}{β^2·h+c}
vβ=β2⋅h+c(1+β)⋅h⋅c
4).ARI
数据集S共有N个样本,两次聚类结果分别是:
X
=
X
1
,
X
2
,
…
,
X
r
;
Y
=
Y
1
,
Y
2
,
…
Y
s
X={X_1,X_2,…,X_r };Y={Y_1,Y_2,…Y_s }
X=X1,X2,…,Xr;Y=Y1,Y2,…Ys
X,Y的元素个数为:
a
=
a
1
,
a
2
,
…
a
r
a={a_1,a_2,…a_r }
a=a1,a2,…ar,
b
=
b
1
,
b
2
,
…
b
s
b={b_1,b_2,…b_s }
b=b1,b2,…bs,记
n
i
j
=
∣
X
i
∩
Y
j
∣
n_{ij}=|X_i∩Y_j |
nij=∣Xi∩Yj∣,则:
A
R
I
=
I
n
d
e
x
−
E
I
n
d
e
x
M
a
x
I
n
d
e
x
−
E
I
n
d
e
x
=
∑
i
,
j
C
n
i
j
2
−
[
(
∑
i
C
a
i
2
)
(
∑
j
C
b
j
2
)
]
/
C
n
2
1
2
[
(
∑
i
C
a
i
2
)
+
(
∑
j
C
b
j
2
)
]
−
[
(
∑
i
C
a
i
2
)
(
∑
j
C
b
j
2
)
]
/
C
n
2
ARI=\frac{Index-EIndex }{ MaxIndex-EIndex}=\frac{\sum_{i,j}C_{n_ij}^2-[(\sum_i C_{a_i}^2)(\sum_j C_{b_j}^2)]/{C_n^2 }} { \frac{1}{2}[(\sum_i C_{a_i}^2)+(\sum_j C_{b_j}^2)]-[(\sum_i C_{a_i}^2)(\sum_j C_{b_j}^2)]/C_n^2}
ARI=MaxIndex−EIndexIndex−EIndex=21[(∑iCai2)+(∑jCbj2)]−[(∑iCai2)(∑jCbj2)]/Cn2∑i,jCnij2−[(∑iCai2)(∑jCbj2)]/Cn2
5).AMI
符号含义与ARI相同,根据信息熵,有:
互
信
息
:
M
I
(
X
,
Y
)
=
∑
i
=
1
r
∑
j
=
1
s
P
(
i
,
j
)
log
P
(
i
,
j
)
P
(
i
)
P
(
j
)
,
正
则
化
互
信
息
:
N
M
I
(
X
,
Y
)
=
M
I
(
X
,
Y
)
H
(
X
)
H
(
Y
)
互信息:MI(X,Y)=\sum_{i=1}^r \sum_{j=1}^s P(i,j)\log \frac{P(i,j) }{ P(i)P(j)},正则化互信息:NMI(X,Y)=\frac{MI(X,Y) }{\sqrt{H(X)H(Y)}}
互信息:MI(X,Y)=i=1∑rj=1∑sP(i,j)logP(i)P(j)P(i,j),正则化互信息:NMI(X,Y)=H(X)H(Y)MI(X,Y)
其中,
P
(
i
,
j
)
=
n
i
j
N
P(i,j)=\frac{n_{ij}}{N}
P(i,j)=Nnij。
X服从超几何分布,求互信息期望:
E
[
M
I
]
=
∑
x
P
(
X
=
x
)
M
I
(
X
,
Y
)
E[MI]=\sum_x{P(X=x)}MI(X,Y)
E[MI]=x∑P(X=x)MI(X,Y)
∴
A
M
I
(
X
,
Y
)
=
M
I
(
X
,
Y
)
−
E
[
M
I
(
X
,
Y
)
]
max
{
H
(
X
)
,
H
(
Y
)
}
−
E
[
M
I
(
X
,
Y
)
]
∴AMI(X,Y)=\frac{MI(X,Y)-E[MI(X,Y)] }{\max\{H{(X),H(Y)\}-E[MI(X,Y)]}}
∴AMI(X,Y)=max{H(X),H(Y)}−E[MI(X,Y)]MI(X,Y)−E[MI(X,Y)]
ARI和AMI都需要知道样本可以分为几个类别,如果不知道的时候,就用下述指标。
6).轮廓系数(Silhouette)
计算样本i到同簇其他样本的平均距离
a
i
a_i
ai,
a
i
a_i
ai越小,说明样本i越应该被聚类到该簇。将
a
i
a_i
ai称为样本i的簇内不相似度。簇C中所有样本的
a
i
a_i
ai的均值称为簇C的簇不相似度。
计算样本i到其他某簇
C
j
C_j
Cj的所有样本的平均距离
b
i
j
b_{ij}
bij,称为样本i为簇
C
j
C_j
Cj的不相似度,定义为样本i的簇间不相似度:
b
i
=
min
{
b
i
1
,
b
i
2
,
…
,
b
i
K
}
b_i=\min\{b_i1,b_i2,…,b_{iK}\}
bi=min{bi1,bi2,…,biK}。
b
i
b_i
bi越大,说明样本i越不属于其他簇。
由上,定义样本i的轮廓系数:
s
(
i
)
=
b
(
i
)
−
a
(
i
)
max
{
a
(
i
)
,
b
(
i
)
}
=
{
1
−
a
(
i
)
b
(
i
)
,
a
(
i
)
<
b
(
i
)
0
,
a
(
i
)
=
b
(
i
)
b
(
i
)
a
(
i
)
−
1
,
a
(
i
)
>
b
(
i
)
)
s(i)=\frac{b(i)-a(i)}{\max \{ a(i),b(i) \} } = \begin{cases} 1-\frac{a(i)}{b(i)},a(i)<b(i)\\ 0,a(i)=b(i)\\ \frac{b(i)}{a(i)} -1,a(i)>b(i)) \end{cases}
s(i)=max{a(i),b(i)}b(i)−a(i)=⎩⎪⎨⎪⎧1−b(i)a(i),a(i)<b(i)0,a(i)=b(i)a(i)b(i)−1,a(i)>b(i))
s
i
s_i
si接近1,则说明样本i聚类合理;
s
i
s_i
si接近-1,则说明样本i更应该分类到别的簇;若
s
i
≈
0
s_i≈0
si≈0,则说明样本i在两个簇的边界上。
所有样本的
s
i
s_i
si的均值称为聚类结果的轮廓系数,是该聚类是否合理、有效的度量。
3 降维
3.1什么是降维?降维有什么用?
降维:在保持数据信息基本不变(信息实际还是有所损失)的前提下,将数据样本的特征从高维(n维)降至低维(k维,k<n)的方法,就叫降维。
如下图,将两维的数据压缩在一维(投影到绿色直线上)中。
降维的应用:
1).数据压缩:将高维压缩为低维,就可以节约数据的存储空间。另外,在监督学习中,如果数据维数很高(如图像等),算法运行效率很低或是算法使用内存太大,则可以通过降维的方式改善算法。
2).数据可视化:高维数据是无法进行可视化的,最多只能几个特征之间分别可视化。通过降维的手段,可以将高维数据进行一定的可视化。但要注意,降维后数据的信息损失量不能过大,如果过大,则可能可视化后找到的规律也不可靠。
3.2 主成分分析问题(PCA,Principal Component Analysis)
1).什么是PCA?
PCA是最常见的降维算法。PCA的目标是,找到k个基向量
u
(
1
)
,
u
(
2
)
,
…
,
u
(
k
)
u^{(1)},u^{(2)},…,u^{(k)}
u(1),u(2),…,u(k),将n维数据降至k维。即将样本
x
=
(
x
1
,
x
2
,
…
,
x
n
)
x=(x_1,x_2,…,x_n)
x=(x1,x2,…,xn)用
z
=
(
z
1
,
z
2
,
…
,
z
k
)
z=(z_1,z_2,…,z_k)
z=(z1,z2,…,zk)替代。
2).PCA 和线性回归的区别?
两者有本质不同,以二维为例。下图左是线性回归,其误差是y轴方向上样本与直线的差值;而下图右是PCA,其误差是样本投影到直线的距离。另外,线性回归的拟合曲线在二维样本中不一定是直线,而PCA由于降维成1维,其得到的一定是直线。
对于高维数据来说,线性回归的误差是和样本标签y相关的;而PCA的误差与样本标签无关,仅仅与样本特征x有关。
3).PCA算法步骤
假设PCA要把数据
X
=
(
x
1
,
x
2
,
…
,
x
n
)
X=(x_1,x_2,…,x_n)
X=(x1,x2,…,xn)从n维降至k维。
i.均值归一化:计算所有特征的均值
μ
j
μ_j
μj,然后令
x
j
=
x
j
−
μ
j
x_j=x_j-μ_j
xj=xj−μj。如果特征的取值范围不在一个数量级,通常还需要进行特征缩放,即除以每个特征各自的标准差
σ
2
σ^2
σ2;
ii.计算协方差矩阵Σ
Σ
=
1
m
∑
i
=
1
n
(
x
(
i
)
)
(
x
(
i
)
)
T
=
1
m
X
T
X
Σ=\frac{1}{m}\sum_{i=1}^n(x^{(i)})(x^{(i)})^T=\frac{1}{m}X^TX
Σ=m1i=1∑n(x(i))(x(i))T=m1XTX
iii.计算协方差矩阵的特征向量
通常可以在matlab/octave等数学库里,用奇异值分解(SVD)来快速求解:
[
U
,
S
,
V
]
=
s
v
d
(
Σ
)
[U,S,V]=svd(Σ)
[U,S,V]=svd(Σ)
奇异值分解得到的矩阵U,每一列就是一个特征向量。如果我们希望将数据从n维降至k维,只需要选取前k个特征向量,获得一个
n
×
k
n×k
n×k的矩阵,记为
U
r
e
d
u
c
e
U_{reduce}
Ureduce,然后通过下式就可以得到降维后的新特征样本:
z
(
i
)
=
U
r
e
d
u
c
e
T
×
x
(
i
)
z^{(i)}=U_{reduce}^T×x^{(i)}
z(i)=UreduceT×x(i)
4).如何从压缩的数据还原会原数据?
利用PCA算法得到的矩阵
U
r
e
d
u
c
e
U_{reduce}
Ureduce进行逆运算,就可以得到对应n维的“原始数据”。
x
a
p
p
r
o
x
(
i
)
=
U
r
e
d
u
c
e
×
z
(
i
)
x_{approx}^{(i)}=U_{reduce}×z^{(i)}
xapprox(i)=Ureduce×z(i)
注意,这里的
x
a
p
p
r
o
x
(
i
)
x_{approx}^{(i)}
xapprox(i)只是近似还原为
x
(
i
)
x^{(i)}
x(i),还原后的数据和原始数据略有不同。这个差异的部分就是PCA损失的信息。
5).如何选择压缩的维数k?
当我们使用PCA算法得到矩阵
U
r
e
d
u
c
e
U_{reduce}
Ureduce和新特征样本
z
(
i
)
z^{(i)}
z(i)后,可以用该矩阵将所有新特征样本
z
(
i
)
z^{(i)}
z(i)还原,得到
x
a
p
p
r
o
x
(
i
)
x_{approx}^{(i)}
xapprox(i)。然后就可以计算PCA算法的信息损失比:
信
息
损
失
比
=
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
x
a
p
p
r
o
x
(
i
)
∣
∣
2
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
∣
∣
2
=
1
−
∑
i
=
1
k
S
i
i
∑
i
=
1
n
S
i
i
信息损失比=\frac{\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_{approx}^{(i)}||^2 }{ \frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2}=1-\frac{\sum_{i=1}^kS_{ii} }{ \sum_{i=1}^nS_{ii}}
信息损失比=m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2=1−∑i=1nSii∑i=1kSii
其中,我们可以用奇异值分解得到的矩阵S(是一个对角线矩阵,其余位置为0),更加快速地计算信息损失比,
S
i
i
S_{ii}
Sii表示矩阵S的第i个对角线元素。
然后,通常我们在进行PCA前会预估一个信息损失比,然后选择满足小于该信息损失比的最小k值,即可作为压缩后的维数。
1
−
∑
i
=
1
k
S
i
i
∑
i
=
1
n
S
i
i
≤
设
定
的
信
息
损
失
比
(
通
常
为
0.01
,
0.05
,
0.1
)
1-\frac{\sum_{i=1}^kS_{ii}}{ \sum_{i=1}^nS_{ii}}≤设定的信息损失比(通常为0.01,0.05,0.1)
1−∑i=1nSii∑i=1kSii≤设定的信息损失比(通常为0.01,0.05,0.1)
6).PCA算法的一些注意点
i. 如果使用PCA进行降维,再用新特征进行机器学习,那么要注意,在使用模型进行预测的时候,要先将待预测样本根据已有的
U
r
e
d
u
c
e
U_{reduce}
Ureduce(不是新的)进行降维,再输入到模型中。这个过程中,只需要对训练集执行一次PCA算法,得到
U
r
e
d
u
c
e
U_{reduce}
Ureduce矩阵。对验证集和测试集均只需要直接使用矩阵
U
r
e
d
u
c
e
U_{reduce}
Ureduce即可,无需再调用PCA算法。
ii. PCA的错误使用方法,是用PCA来解决过拟合问题。虽然本质上,PCA可以减少样本的特征数量,似乎也可以起到防止过拟合的作用。但是,因为PCA过程样本信息或多或少的损失了,且损失的部分无法控制,可能会损失样本很重要的信息,因此,用PCA来防止过拟合是很不好的行为。因为正则化既可以保留完整信息,又能防止过拟合,为什么要绕弯路选择信息损失的方式呢?
iii.接上述第ii点,在分析解决问题前,不应该死板默认需要使用PCA或其他降维算法。因为降维就意味着信息损失。只有在必须的情况下,比如由于特征数量太大,机器学习算法效率真的很低或者计算机的内存无法满足特征数量等情况下,才会考虑使用PCA。尽管使用PCA通常能获得好的结果,但不应该定式思维将其作为机器学习过程中必不可少的一部分。原则上,能不需要降维,就尽量不要降维。当然,对问题分析不清楚,降维进行可视化还是可以的。