无监督学习(K-means聚类 & 降维PCA)
首先,简单说明一下无监督学习:训练样本的标记信息未知, 目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础,此类学习任务中研究最多、应用最广的是"聚类" (clustering),聚类目的在于把相似的东西聚在一起,主要通过计算样本间和群体间距离得到。深度学习和PCA都属于无监督学习的范畴。
在之前的博客里有简单的说明监督学习与无监督学习的关系。
(一)K-means聚类
K-means是一种将输入数据划分成 k k k个簇的简单的聚类算法。K-means反复提炼初始评估的类中心。K-means能够发现 K K K个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。簇的个数 K K K是我们自己定义的,每一个簇通过其质心,即该簇中所有点的中心来描述。
(1)K-means算法的原理
基本思想:对给定的样本集,事先确定聚类簇数 K K K,让簇内的样本尽可能紧密分布在一起,使簇间的距离尽可能大。K-means算法试图使集群数据分为 n n n组独立数据样本,使 n n n组集群间的方差相等,试图使全部类内总方差最小。
在实际应用中可能会经过很多次迭代仍然达不到最优的聚类簇数(即,每次划分结果保持不变),甚至因为数据的关系,根本就达不到这个终止条件,实际应用中通常采用的方法是设置一个最大迭代次数,当达到最大迭代次数时,终止计算。
K-means试图使类内总方差最小:
V
=
∑
i
=
1
k
∑
x
j
∈
c
i
(
x
j
−
μ
i
)
2
V=\sum_{i=1}^{k}\sum_{x_{j}\in c_{i}}^{ }(x_{j}-\mu _{i})^{2}
V=i=1∑kxj∈ci∑(xj−μi)2 其中,
x
j
x_{j}
xj是输入数据,并且是矢量。该算法是启发式提炼算法,在很多情形下都适用,但是不能保证得到最优的结果。为了避免初始化类中心时没选取好类中心初值所造成的影响,该算法通常会初始化不同的类中心进行多次运算,然后选择方差
V
V
V最小的结果。
K-means算法的过程,如下图所示。
(2)K-Means算法的步骤
输入:样本集
{
x
(
1
)
,
x
(
2
)
,
⋯
,
x
(
m
)
}
\left \{ x^{(1)},x^{(2)},\cdots ,x^{(m)} \right \}
{x(1),x(2),⋯,x(m)},簇的数目
k
k
k,最大迭代次数
N
N
N。
输出:簇划分(
K
K
K个簇,使平方误差最小)。
步骤如下:
- 以随机或猜测的方式初始化聚类中心
μ
i
,
i
=
1
,
⋯
,
k
μ_{i},i=1,\cdots ,k
μi,i=1,⋯,k;
(ps:采用随机的方法实现简单,但是簇的质量往往比较差,所以有好几种关于中心选取的解决方案,比如先使用层次聚类进行聚类,从层次聚类中提取K个簇,并用这些簇的质心作为初始质心。也有通过使类内总方差最小的方式,选择方差最小的类中心。) - 将每个数据点归并到离它距离最近的聚类中心所属的聚类
c
(
i
)
∈
1
,
⋯
,
k
c^{(i)}\in 1,\cdots,k
c(i)∈1,⋯,k;
(ps:常用的距离度量方法包括:欧几里得距离和余弦相似度。两者都是评定个体间差异的大小的。欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化。余弦相似度倾向给出更优解。)【也称为“簇分配”】
用下面这个公式计算,当前所属的簇的索引编号为: c ( i ) = m i n k ∣ ∣ x ( i ) − μ k ∣ ∣ 2 c^{(i)}=\underset{k}{min}||x^{(i)}−μ_{k}||^{2} c(i)=kmin∣∣x(i)−μk∣∣2 其中 x ( i ) x^{(i)} x(i)表示无标签的样本点, μ k μ_{k} μk表示簇中心。 - 对所有属于该类的数据点求平均,将平均值作为新的聚类中心;【也称为“移动聚类中心”】
- 重复步骤2. 和步骤3. 直到聚类中心不再发生变化或者达到最大迭代次数;
- 输出最终的聚类中心和 K K K个簇划分。
需要注意的是,计算的单位需要一致。如果K-Means聚类中选择欧几里德距离计算距离,数据集又出现了单位不一致的情况,就一定要进行数据的标准化(normalization),就是将数据按比例缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行计算和比较。
标准化(normalization)方法最常用的有两种形式:
- min-max标准化(离差标准化):对原始数据进行线性变换,是结果落到 [ 0 , 1 ] [0,1] [0,1]区,转换方法为:
X ′ = ( X − m i n ) ( m a x − m i n ) X'=\frac{(X-min)}{(max-min)} X′=(max−min)(X−min)其中max为样本数据最大值,min为样本数据最小值。- z-score标准化(标准差标准化):处理后的数据符合标准正态分布(均值为0,方差为1),转换公式: X ′ = X − μ 1 N ∑ i = 1 N ( x i − μ ) 2 X'=\frac{X-μ}{\sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\mu )^{2}}} X′=N1∑i=1N(xi−μ)2X−μ 其中公式中数值 x 1 x_{1} x1, x 2 x_{2} x2, x 3 x_{3} x3,… x N x_{N} xN(皆为实数),平均值(算术平均值)为 μ μ μ。
(3)K-means算法的损失函数
损失函数变量的定义:
- 假设有K个簇, c ( i ) c^{(i)} c(i)表示样本 x ( i ) x^{(i)} x(i)当前所属的簇的索引编号, c ( i ) ∈ 1 , 2 , ⋯ , k c^{(i)}\in 1,2,\cdots,k c(i)∈1,2,⋯,k。
- μ k μ_{k} μk表示第 k k k个聚类中心的位置,其中 k ∈ 1 , 2 , 3 , 4... K k∈1,2,3,4...K k∈1,2,3,4...K。
- μ c ( i ) μ_{c(i)} μc(i) 表示样本 x ( i ) x^{(i)} x(i)所属簇的中心的位置坐标。
优化目标:
损失函数为每个样本到其所属簇的中心的距离和的平均值 ,优化函数的输入参数是每个样本所属的簇的编号
c
(
i
)
c^{(i)}
c(i)和每个簇中心的坐标
μ
k
μ_{k}
μk, 这两个都是在聚类过程中不断变化的变量。损失函数也被称为畸变函数(Distortion function)。
根据上面的变量,K-means算法的损失函数公式为: J ( c ( 1 ) , ⋯ , c ( m ) , μ 1 , ⋯ , μ K ) = 1 m ∑ i = 1 m ∥ x ( i ) − μ c ( i ) ∥ 2 J(c^{(1)},\cdots ,c^{(m)},\mu _{1},\cdots ,\mu _{K})=\frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)}-\mu _{c^{(i)}} \right \|^{2} J(c(1),⋯,c(m),μ1,⋯,μK)=m1i=1∑m∥∥∥x(i)−μc(i)∥∥∥2
m i n c ( 1 ) , ⋯ , c ( m ) , μ 1 , ⋯ , μ K J ( c ( 1 ) , ⋯ , c ( m ) , μ 1 , ⋯ , μ K ) \underset{c^{(1)},\cdots ,c^{(m)},\mu _{1},\cdots ,\mu _{K}}{min}J(c^{(1)},\cdots ,c^{(m)},\mu _{1},\cdots ,\mu _{K}) c(1),⋯,c(m),μ1,⋯,μKminJ(c(1),⋯,c(m),μ1,⋯,μK)
- 对于K-means算法中的簇分配(将每个样本点分配到距离最近的簇) 的步骤实际上就是在最小化代价函数 J J J,即在 μ 1 , μ 2 , . . . , μ K μ_{1},μ_{2},...,μ_{K} μ1,μ2,...,μK固定的条件下调整 c ( 1 ) , c ( 2 ) , . . . , c ( m ) c^{(1)},c^{(2)},...,c^{(m)} c(1),c(2),...,c(m)的值使得损失函数的值取到最小。
- 对于K-means算法中的 移动聚类中心(将聚类中心移动到分配样本簇的平均值处) ,即在 c ( 1 ) , c ( 2 ) , . . . , c ( m ) c^{(1)},c^{(2)},...,c^{(m)} c(1),c(2),...,c(m)固定的条件下调整 μ 1 , μ 2 , . . . , μ K μ_{1},μ_{2},...,μ_{K} μ1,μ2,...,μK的值使得损失函数的值取到最小。
(4)K-means算法聚类中心的随机初始化
在运行 K-Means 算法之前,首先要随机初始化所有的聚类中心点,步骤如下:
- 应该选择 K < m K<m K<m,即聚类中心点的个数要小于所有训练集实例的数量。
- 随机选择 K K K 个训练实例,然后令 K K K 个聚类中心分别与这 K K K 个训练实例相等。
随机初始化的局限性:
下面两种都是随机初始化后的结果,观察发现随机初始化容易把初始化聚类中心分到相近的样本中。这种初始化方式是有一定的局限性的。
K-means算法存在一个问题在于,它有可能会停留在一个局部最小值处,这往往取决于初始化的状态。如下图所示,图①属于随机初始化较好的聚类结果,而下面两个图则是随机初始化不好导致局部的最优解。
改进初始化方式——进行多次随机初始化:
为了解决这个问题,需要多次运行K-means算法,每一次都重新进行随机初始化,比较多次运行K-means的结果,最终选择损失函数最小的结果。例如,当
K
K
K的值不大(2~10),可以循环100次,每次随机选
K
K
K个聚类中心,计算其损失函数。最后选择一个代价值最小的分类方式。
但是这种方法在
K
K
K 较小(2~10)的时候是可行的,但是如果
K
K
K 较大,这么做也可能不会有明显地改善。(不同初始化方式得到的结果趋于一致)
(5)K-means算法聚类数K的选择
其实,在无监督算法中,没有所谓最好的选择聚类数的方法,往往是需要结合实际问题进行人工选择的。选择时需要考虑的是运行K-means算法聚类的动机是什么,才可以选择能最好服务于该问题的聚类数目。
通常,选择聚类数目时所使用的方法称为 “肘部法则”(第一种方法)。
这个方法的步骤是:改变聚类数
K
K
K,然后进行聚类操作,并计算损失函数。如下图所示,绘制出来的图形存在拐点,该点即为推荐的聚类数。(观察发现,在拐点处以后的聚类数,随着数目的增大也不会对损失函数的下降带来很大的影响,因此通常选择拐点作为聚类数。)
但是,也会产生例外。如下图所示,损失函数随着
K
K
K的增大平缓下降(即拐点不明显),此时通过肘部法则来选择聚类数
K
K
K就不是一个很好的方法了。
第二种选择聚类数
K
K
K值的方法是,看哪个聚类数目能更好地适应后续的目的。比如:市场分割、网络集群优化等,看下一步的操作提供的一些评价指标,来决定所选择的聚类数目。
例如,将T恤的尺码进行聚类,左图是将所有样本分成3类(S,M,L),右图将所有样本分成5类(XS,S,M,L,XL),两种聚类方式都是可行的。这两种聚类方式是根据用户的满意程度或者市场的销售额来决定最后的聚类数目。
(6)K-means算法的优缺点
优点:
- 原理易懂,易于实现,可以并行计算,并且对于很多别的问题不需要任何调整就能够直接使用;
- 当簇间的区别较明显时,聚类效果较好;
- 算法的可解释度比较强。
缺点:
- 当样本集规模大时,收敛速度会变慢;
- 对孤立点数据敏感,少量噪声就会对平均值造成较大影响;
- K K K的取值十分关键,对不同数据集, K K K选择没有参考性,需要大量实验。
(二)降维 & PCA
首先,说明一下降维与PCA的关系。
- 降维,就是将数据由原来的 n n n个特征缩减为 k k k个特征(可能从 n n n个里面直接选取 k k k个,也可能根据这 n n n个特征重新组合成 k k k个特征)。降维起到数据压缩的作用(由于压缩,会导致数据的丢失)。
- PCA(主成分分析法),属于降维的一种方法。 它的主要思想是:根据原始的 n n n个特征(向量为 n n n维),重新组合出 k k k个特征,并且这 k k k个特征能最大量度地涵盖原始的数据特征(也可能导致数据丢失)。有一个结论是:当某一维的方差越大时,它所包含的信息量也越大,说明它越重要;反之,则相反。PCA的主要工作是重构出 k k k个特征,使其所包含的信息量最大。
(1)降维
提问:为什么需要降维?作用是什么?
解释:
- 实际应用中的数据一般是高维的,对于高维的数据很难有直观的认识,如果把数据的维度降低到二维或者三维,并且保证数据点的关系与原高维空间里的关系保持不变或近似,就可以进行可视化,用肉眼来观察数据。数据经过降维以后,如果保留了原有数据的主要信息,那么就可以用降维的数据进行机器学习模型的训练与预测,时间效率也大大增加。
- 进行降维操作,第一个作用是压缩数据,减少数据量(可能会丢失一定的信息量),使用较少的计算机内存或者磁盘空间;第二个作用是加快学习算法的效率;第三个作用是数据的可视化, 以便对数据进行观察和探索。
下面举两个例子来说明降维的作用。
第一个例子,数据压缩,将数据从二维降到一维。如下图所示,将平面上(二维)的点映射到一条直线或向量上(一维),其丢失的信息量就是:每个点到直线上的距离。因为降维之后,就认为所有点都在直线上了。
以及 数据从三维降至二维。 如下图所示,将空间上的点投影到一个平面上。
需要注意的是,这两个例子都选取了与原始数据尽可能“接近”的直线或平面,使得其保存下来的信息量是最大的。
这样的降维处理可以用于把任何维度的数据降至任何想要的维度,比如说可以把1000维度的数据降至100维。
第二个例子是,说明降维对数据的可视化起到的作用。在许多学习问题中,如果能够将数据可视化,那么便能找到一种更好的解决方案,降维则是帮助解决问题的一种手段。
假设有许多不同国家的数据,每一个特征向量都有50个特征(比如,GDP、人均GDP、平均寿命等等)。如果要将这50维的数据进行可视化是不可能的,那么就需要通过降维的方法将其降至二维,就可以可视化这些数据了,如下图所示(分别是降至二维的结果与二维数据可视化的结果)。
这样做的问题在于降维算法只负责减少维数,而新产生的特征的意义就需要自己去发现了。
(2)PCA算法推导
主成分分析(Principe component analysis,PCA)是一种广泛应用于不同领域的无监督线性数据转换技术,作用是降维。
PCA的目标:
是在高维数据中找到最大方差的方向,并将数据映射到一个维度不大于原始数据的新的子空间上。PCA可以基于特征之间的关系识别出数据内在模式。
PCA的基本思想:
- 去除平均值
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值排序
- 保留前N个最大的特征值对应的特征向量
- 将数据转换到上面得到的N个特征向量构建的新空间中(实现了特征压缩)
PCA的原理:
- 找出第一个主成分的方向,也就是数据方差最大的方向。
- 找出第二个主成分的方向,也就是数据方差次大的方向,并且该方向与第一个主成分方向正交(orthogonal, 如果是二维空间就叫垂直)。
- 通过这种方式计算出所有的主成分方向。
- 通过数据集的协方差矩阵及其特征值分析,我们就可以得到这些主成分的值。
- 一旦得到了协方差矩阵的特征值和特征向量,我们就可以保留最大的 N 个特征。这些特征向量也给出了 N 个最重要特征的真实结构,我们就可以通过将数据乘上这 N 个特征向量 从而将它转换到新的空间上。
PCA的原理推导:
- 最大方差理论(PCA的理论基础)
在信号处理中,通常认为信号具有较大的方差而噪声具有较小的方差,信号与噪声之比称为信噪比,信噪比越大意味着数据质量也就越好。在上图中,样本在 x ′ x' x′的投影方差较大,在 y ′ y' y′的投影方差较小,认为纵轴( y ′ y' y′轴)上的投影是由噪声引起的。
因此,认为最好的 k k k维特征是将 n n n维样本点转换为 k k k维后,每一维上的样本方差都很大,故投影方向就可以确定为样本数据方差最大的方向。对于高维的数据来说,投影方向要选择多个,按照最大方差理论,第一个投影方向为方差最大的方向,第二个方向为方差次大的方向,第三个……,直到已经选择的投影方向的数量满足需求。如果按照这种方式去选择,会存在一个问题,就是这些维度之间是近似线性相关的,可以从集合中的坐标系去理解。显然,由它们所组成的坐标系的夹角很小,这样不能完全表征数据的所有特征,为了让任意两个维度能够尽可能多的表征数据的特征,需要选择独立的维度。
举一个例子,假设现在要将一个具有五维的数据降至三维:
首先,找到方差最大的方向,选择此方向作为第一个维度;
然后,在与第一步确定的方向正交的方向上,找到方差最大的作为第二个维度;
最后,在与第一步和第二步所选择方向正交的方向上,找到方差最大的作为第三个维度。 这样将五维的数据降维至三维。
在高维度的空间中,就需要通过代数的方法来依次寻找这些坐标轴的方向,第一坐标轴方向就是第一主成分的方向(首次找到方差最大的方向),第二坐标轴方向就是第二主成分的方向,以此类推,使得原始数据在新的坐标轴上对应每一个特征的方差是逐渐减少的,丢掉一些方差很小的主成分方向上的坐标,就完成了PCA计算。
- PCA的数学推导
第一步:构建线性变换
提问:为什么需要对样本进行线性变换呢?
解释:线性变换的过程应用在这里,需要从几何角度的两个方面进行理解。第一,是重新确定单位基向量,第二,是原始样本集所表示的向量在新的单位基向量上投影。
[ y 1 y 2 ⋮ y p ] = [ u 11 u 12 ⋯ u 1 p u 21 u 22 ⋯ u 2 p ⋮ ⋮ ⋮ ⋮ u p 1 u p 2 ⋯ u p p ] [ x 1 x 2 ⋮ x p ] ⋯ ⋯ ① \begin{bmatrix} y_{1}\\ y_{2}\\ \vdots \\ y_{p} \end{bmatrix}=\begin{bmatrix} u_{11} & u_{12} & \cdots & u_{1p}\\ u_{21} & u_{22} & \cdots & u_{2p}\\ \vdots & \vdots & \vdots & \vdots \\ u_{p1} & u_{p2} & \cdots & u_{pp} \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \\ x_{p} \end{bmatrix}\cdots \cdots ① ⎣⎢⎢⎢⎡y1y2⋮yp⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡u11u21⋮up1u12u22⋮up2⋯⋯⋮⋯u1pu2p⋮upp⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡x1x2⋮xp⎦⎥⎥⎥⎤⋯⋯① 1). 重新确定单位基向量:如上式矩阵中的每一行即为重新确定的单位基向量(p维),类比于上图的二维平面,就是确定图中的 x ′ x' x′和 y ′ y' y′。
2). 原始样本集所表示的向量在新的单位基向量上投影:如上式中 y 1 y_{1} y1, y 2 y_{2} y2到 y p y_{p} yp,就是数据原始样本集中的每一个样本分别在1).中所确定的单位基向量上投影所得到的由重新确定的单位基向量所组成的坐标系下的向量每个维度的坐标值。
通过表达式①可以表述上面的1).和2).,而1).中重新确定的基向量符合方差最大的要求,那么如何使得其满足方差最大的要求呢?答案在第二步(求解最大方差)中。
假设原始样本数据维度是
p
p
p,则可以写为
X
=
(
x
1
,
x
2
,
⋯
,
x
p
)
T
X=(x_{1},x_{2},\cdots,x_{p})^{T}
X=(x1,x2,⋯,xp)T,这里
X
X
X表示某一样本数据。又假设样本集中有
N
N
N个样本,则样本集的均值、方差分别为:
μ
=
E
(
X
)
=
X
1
+
X
2
+
⋯
+
X
N
N
⋯
⋯
②
\mu =E(X)=\frac{X_{1}+X_{2}+\cdots +X_{N}}{N}\cdots \cdots ②
μ=E(X)=NX1+X2+⋯+XN⋯⋯②
Σ
=
1
N
−
1
(
X
−
μ
)
(
X
−
μ
)
T
⋯
⋯
③
\Sigma =\frac{1}{N-1}(X-\mu )(X-\mu )^{T}\cdots \cdots③
Σ=N−11(X−μ)(X−μ)T⋯⋯③ 对原始样本进行如下线性变换:
y
1
=
u
11
x
1
+
u
12
x
2
+
⋯
+
u
1
p
x
p
=
u
1
T
X
y
2
=
u
21
x
1
+
u
22
x
2
+
⋯
+
u
2
p
x
p
=
u
2
T
X
⋯
⋯
y
p
=
u
p
1
x
1
+
u
p
2
x
2
+
⋯
+
u
p
p
x
p
=
u
p
T
X
⋯
⋯
④
\begin{matrix} y_{1}=u_{11}x_{1}+u_{12}x_{2}+\cdots +u_{1p}x_{p}=u_{1}^{T}X\\ y_{2}=u_{21}x_{1}+u_{22}x_{2}+\cdots +u_{2p}x_{p}=u_{2}^{T}X\\ \cdots \cdots \\ y_{p}=u_{p1}x_{1}+u_{p2}x_{2}+\cdots +u_{pp}x_{p}=u_{p}^{T}X \end{matrix}\cdots \cdots④
y1=u11x1+u12x2+⋯+u1pxp=u1TXy2=u21x1+u22x2+⋯+u2pxp=u2TX⋯⋯yp=up1x1+up2x2+⋯+uppxp=upTX⋯⋯④ 同时给出上述线性变换的矩阵形式(即公式①)
[
y
1
y
2
⋮
y
p
]
=
[
u
11
u
12
⋯
u
1
p
u
21
u
22
⋯
u
2
p
⋮
⋮
⋮
⋮
u
p
1
u
p
2
⋯
u
p
p
]
[
x
1
x
2
⋮
x
p
]
⋯
⋯
①
\begin{bmatrix} y_{1}\\ y_{2}\\ \vdots \\ y_{p} \end{bmatrix}=\begin{bmatrix} u_{11} & u_{12} & \cdots & u_{1p}\\ u_{21} & u_{22} & \cdots & u_{2p}\\ \vdots & \vdots & \vdots & \vdots \\ u_{p1} & u_{p2} & \cdots & u_{pp} \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \\ x_{p} \end{bmatrix}\cdots \cdots ①
⎣⎢⎢⎢⎡y1y2⋮yp⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡u11u21⋮up1u12u22⋮up2⋯⋯⋮⋯u1pu2p⋮upp⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡x1x2⋮xp⎦⎥⎥⎥⎤⋯⋯①
第二步:求解最大方差
新的数据
Y
=
(
y
1
,
y
2
,
⋯
,
y
p
)
T
Y=(y_{1},y_{2},\cdots,y_{p})^{T}
Y=(y1,y2,⋯,yp)T的方差与协方差满足下面的公式:
V
a
r
(
y
i
)
=
u
i
T
Σ
u
i
i
=
1
,
2
,
3
,
⋯
,
p
⋯
⋯
⑤
\begin{matrix} Var(y_{i})=u_{i}^{T}\Sigma u_{i} & i=1,2,3,\cdots ,p \end{matrix} \cdots \cdots ⑤
Var(yi)=uiTΣuii=1,2,3,⋯,p⋯⋯⑤
C
o
v
(
y
i
,
y
j
)
=
u
i
T
Σ
u
j
i
,
j
=
1
,
2
,
3
,
⋯
,
p
,
(
i
不
等
于
j
)
⋯
⋯
⑥
\begin{matrix} Cov(y_{i},y_{j})=u_{i}^{T}\Sigma u_{j} & i,j=1,2,3,\cdots ,p,(i不等于j) \end{matrix} \cdots \cdots ⑥
Cov(yi,yj)=uiTΣuji,j=1,2,3,⋯,p,(i不等于j)⋯⋯⑥ 假如希望
y
1
y_{1}
y1的方差达到最大,则该问题是一个约束优化的问题(二次优化问题)形式如下:
m
a
x
u
T
Σ
u
s
.
t
.
u
T
u
=
1
⋯
⋯
⑦
\begin{matrix} max & u^{T}\Sigma u\\ s.t. & u^{T}u=1 \end{matrix}\cdots \cdots ⑦
maxs.t.uTΣuuTu=1⋯⋯⑦ 其中,这里的
u
u
u表示的新坐标系下的基向量(即公式①中矩阵的每一行元素组成),限制条件为
u
T
u
=
1
u^{T}u=1
uTu=1 是为了使得基向量是单位向量,即长度为1。
关于二次型在约束条件下的极值问题(即求解公式⑦)有如下定理,即在 u T u = 1 u^{T}u=1 uTu=1
的条件下,一般二次型 Q ( x ) = x T Λ x Q(x)=x^{T}\Lambda x Q(x)=xTΛx 的最大、最小值的求法:
定理1:
假设 Λ \Lambda Λ是对称矩阵,令 m = m i n { x T Λ x : ∥ x ∥ = 1 } m=min\left \{x^{T}\Lambda x:\left \| x \right \|=1\right \} m=min{xTΛx:∥x∥=1}, M = m a x { x T Λ x : ∥ x ∥ = 1 } M=max\left \{x^{T}\Lambda x:\left \| x \right \|=1\right \} M=max{xTΛx:∥x∥=1},那么 M M M是 Λ \Lambda Λ的最大特征值 λ 1 \lambda _{1} λ1, m m m是 Λ \Lambda Λ的最小特征值,如果 x x x是对应 M M M的单位特征向量 u 1 u_{1} u1,那么 x T Λ x x^{T}\Lambda x xTΛx的值为 M M M,如果 x x x是对应 m m m的单位特征向量, x T Λ x x^{T}\Lambda x xTΛx的值为 m m m。
定理2:
假设 Λ \Lambda Λ, λ 1 \lambda _{1} λ1和 u 1 u_{1} u1如定理1所示,在条件 x T x = 1 x^{T}x=1 xTx=1 和
x T u 1 = 0 x^{T}u_{1}=0 xTu1=0 的限制下, x T Λ x x^{T}\Lambda x xTΛx最大值是第二大特征值 λ 2 \lambda _{2} λ2,且这个最大值,可以在对应 λ 2 \lambda _{2} λ2的特征向量 u 1 u_{1} u1处取到。
推论:
假设 Λ \Lambda Λ是一个 n ∗ n n*n n∗n的对称矩阵,且其正交对角化为 Λ = P D P − 1 \Lambda =PDP^{-1} Λ=PDP−1,将对话矩阵 D D D上的元素重新排列,使得 λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n \lambda_{1}\geq \lambda_{2}\geq \cdots \geq \lambda_{n} λ1≥λ2≥⋯≥λn,而且 P P P的列是其对应的单位特征向量 u 1 , u 2 , ⋯ , u n u_{1},u_{2},\cdots,u_{n} u1,u2,⋯,un,那么对 k − 2 , ⋯ , n k-2,\cdots,n k−2,⋯,n时,在条件 x T x = 1 x^{T}x=1 xTx=1
, x T u 1 = 0 x^{T}u_{1}=0 xTu1=0, ⋯ , x T u k = 0 \cdots, x^{T}u_{k}=0 ⋯,xTuk=0的限制下, x T Λ x x^{T}\Lambda x xTΛx的最大特征值 λ k \lambda _{k} λk,且这个最大值可以在 x = u k x=u_{k} x=uk取到。
由上面公式①~⑦的推导过程可以知道求解最大方差的问题转换为求解协方差矩阵 Σ \Sigma Σ的特征值与特征向量。
假设 u 1 u_{1} u1是 Σ \Sigma Σ最大特征值(设为 λ 1 \lambda_{1} λ1)的特征向量,此时 y 1 y_{1} y1为第一主成分,类似的希望 y 2 y_{2} y2的方差达到最大,并要求 C o v ( y 1 , y 2 ) = 0 Cov(y_{1},y_{2})=0 Cov(y1,y2)=0,由于 u 1 u_{1} u1是 λ 1 \lambda_{1} λ1的特征向量,所以选择的 u 2 u_{2} u2应该与 u 1 u_{1} u1正交,类似于前面的推导, u 2 u_{2} u2是 Σ \Sigma Σ的第二大特征值(设为 λ 2 \lambda_{2} λ2)的特征向量,称 y 2 y_{2} y2为第二主成分,以此类推得到后面的主成分。
(3)PCA降维步骤
由上面原理推导可知,求解数据集的主成分的过程就是求解样本集协方差矩阵的特征值与特征向量的过程。
下面结合例子来进行说明PCA降维的步骤。
给定一组数据集: Z = { z 1 , z 2 , z 3 , . . . . . . , z n } Z=\left \{z_{1},z_{2},z_{3},......,z_{n}\right \} Z={z1,z2,z3,......,zn},
z z z是一个列向量,每个 z z z代表一个特征,这里是 n n n个特征, z z z向量的长度代表样本个数。
假设数据集为: Z = ( Z 1 Z 2 ) = ( 1 1 2 4 2 1 3 3 4 4 ) Z=\begin{pmatrix} Z_{1}\\ Z_{2} \end{pmatrix}=\begin{pmatrix} 1 & 1& 2& 4& 2 \\ 1 & 3 & 3 & 4 & 4 \end{pmatrix} Z=(Z1Z2)=(1113234424) 其中, ( 1 1 ) \begin{pmatrix} 1\\ 1\end{pmatrix} (11) 属于样本1, ( 1 3 ) \begin{pmatrix} 1\\ 3\end{pmatrix} (13) 属于样本2,以此类推,共有五个样本。
第一步,将样本数据中心化或者均值归一化(为了简化计算,非必需)
求出每个特征的均值: μ i = 1 n ∑ i = 1 n z i \mu _{i}=\frac{1}{n}\sum_{i=1}^{n}z_{i} μi=n1i=1∑nzi
然后,数据减去均值后为: X = { z 1 − μ 1 , z 2 − μ 2 , . . . . . . , z n − μ n } X=\left\{z_{1}-\mu _{1},z_{2}-\mu _{2},......,z_{n}-\mu _{n}\right \} X={z1−μ1,z2−μ2,......,zn−μn}
每个特征的均值为:
Z
1
ˉ
=
2
Z
2
ˉ
=
3
\begin{matrix} \bar{Z_{1}}=2 & \bar{Z_{2}}=3 \end{matrix}
Z1ˉ=2Z2ˉ=3
去均值后的矩阵为:
X
=
(
X
1
X
2
)
=
(
−
1
−
1
0
2
0
−
2
0
0
1
1
)
X=\begin{pmatrix} X_{1}\\ X_{2} \end{pmatrix}=\begin{pmatrix} -1 &-1 &0 & 2 & 0\\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}
X=(X1X2)=(−1−2−10002101)
第二步,计算样本数据的协方差矩阵
协方差矩阵公式为:
Σ
=
1
m
−
1
∑
i
=
1
m
x
(
i
)
x
(
i
)
T
\Sigma =\frac{1}{m-1}\sum_{i=1}^{m}x^{(i)}x^{(i)^{T}}
Σ=m−11i=1∑mx(i)x(i)T 则有
Σ
=
1
m
−
1
X
X
T
=
1
4
(
−
1
−
1
0
2
0
−
2
0
0
1
1
)
(
−
1
−
2
−
1
0
0
0
2
1
0
1
)
=
(
3
2
1
1
3
2
)
\Sigma =\frac{1}{m-1}XX^{T}=\frac{1}{4}\begin{pmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}\begin{pmatrix} -1 & -2\\ -1 & 0\\ 0 &0\\ 2 & 1\\ 0 & 1 \end{pmatrix}=\begin{pmatrix} \frac{3}{2} & 1\\ 1 & \frac{3}{2} \end{pmatrix}
Σ=m−11XXT=41(−1−2−10002101)⎝⎜⎜⎜⎜⎛−1−1020−20011⎠⎟⎟⎟⎟⎞=(231123)
第三步,求出协方差矩阵的特征值与正交单位特征向量
特征值: λ 1 = 1 2 \lambda _{1}=\frac{1}{2} λ1=21,对应的特征向量为: μ 1 = ( − 1 2 1 2 ) \mu _{1}=\begin{pmatrix} -\frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix} μ1=(−2121)
特征值: λ 2 = 5 2 \lambda _{2}=\frac{5}{2} λ2=25,对应的特征向量为: μ 2 = ( 1 2 1 2 ) \mu _{2}=\begin{pmatrix} \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix} μ2=(2121)
第四步,将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
(或者,取最大的 d d d个特征值所对应的特征向量 μ 1 , μ 2 , . . . , μ d \mu _{1},\mu _{2},...,\mu _{d} μ1,μ2,...,μd)
P
=
(
1
2
−
1
2
1
2
1
2
)
P=\begin{pmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}}& \frac{1}{\sqrt{2}} \end{pmatrix}
P=(2121−2121)
取
λ
2
=
5
2
\lambda _{2}=\frac{5}{2}
λ2=25为最大的特征值,对应的
μ
2
=
(
1
2
1
2
)
\mu _{2}=\begin{pmatrix} \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix}
μ2=(2121)为最大的特征向量。
第五步,对上述的协方差矩阵对角化,最后输出的投影矩阵 W = ( μ 1 , μ 2 , . . . , μ d ) W=(\mu _{1},\mu _{2},...,\mu _{d}) W=(μ1,μ2,...,μd)
P
T
∑
P
=
(
1
2
1
2
−
1
2
1
2
)
⋅
(
3
2
1
1
3
2
)
⋅
(
1
2
−
1
2
1
2
1
2
)
=
(
1
2
0
0
5
2
)
P^{T}\sum P=\begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\ -\frac{1}{\sqrt{2}}& \frac{1}{\sqrt{2}} \end{pmatrix}\cdot\begin{pmatrix} \frac{3}{2} & 1\\ 1 & \frac{3}{2} \end{pmatrix}\cdot \begin{pmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}}& \frac{1}{\sqrt{2}} \end{pmatrix}= \begin{pmatrix} \frac{1}{2} & 0\\ 0& \frac{5}{2} \end{pmatrix}
PT∑P=(21−212121)⋅(231123)⋅(2121−2121)=(210025)
最大特征值为
λ
1
=
1
2
\lambda _{1}=\frac{1}{2}
λ1=21,对应的特征向量为
μ
1
=
(
−
1
2
1
2
)
\mu _{1}=\begin{pmatrix} -\frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix}
μ1=(−2121),故第一主成分为:
y
1
=
(
−
1
2
,
1
2
)
(
−
1
−
1
0
2
0
−
2
0
0
1
1
)
=
(
−
1
2
1
2
0
−
1
2
1
2
)
y_{1}=\begin{pmatrix} -\frac{1}{\sqrt{2}} ,& \frac{1}{\sqrt{2}} \end{pmatrix}\begin{pmatrix} -1 &-1 &0 & 2 & 0\\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}=\begin{pmatrix} -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix}
y1=(−21,21)(−1−2−10002101)=(−21210−2121)
第二大特征值为 λ 2 = 5 2 \lambda _{2}=\frac{5}{2} λ2=25,对应的特征向量为 μ 2 = ( 1 2 1 2 ) \mu _{2}=\begin{pmatrix} \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix} μ2=(2121),故第二主成分为: y 2 = ( 1 2 , 1 2 ) ( − 1 − 1 0 2 0 − 2 0 0 1 1 ) = ( − 3 2 − 1 2 0 3 2 − 1 2 ) y_{2}=\begin{pmatrix} \frac{1}{\sqrt{2}} ,& \frac{1}{\sqrt{2}} \end{pmatrix}\begin{pmatrix} -1 &-1 &0 & 2 & 0\\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}=\begin{pmatrix} -\frac{3}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & \frac{3}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} y2=(21,21)(−1−2−10002101)=(−23−21023−21)
得到投影矩阵为
W
=
(
μ
2
)
W=(\mu _{2})
W=(μ2),即可以将样本点
X
X
X投影到
W
W
W平面,其投影是
Y
Y
Y:
Y
=
W
T
X
=
(
1
2
,
1
2
)
(
−
1
−
1
0
2
0
−
2
0
0
1
1
)
=
(
−
3
2
−
1
2
0
3
2
−
1
2
)
Y=W^{T}X=\begin{pmatrix} \frac{1}{\sqrt{2}} ,& \frac{1}{\sqrt{2}} \end{pmatrix}\begin{pmatrix} -1 &-1 &0 & 2 & 0\\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}=\begin{pmatrix} -\frac{3}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & \frac{3}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix}
Y=WTX=(21,21)(−1−2−10002101)=(−23−21023−21)
补充知识
线性代数中定理:对于任意 n n n阶实对称矩阵 A A A,必然存在 n n n阶正交矩阵 P P P,使得 P − 1 A P = P T A P = d i a g ( λ 1 , λ 2 , ⋯ , λ n ) P^{-1}AP=P^{T}AP=diag(\lambda _{1},\lambda _{2},\cdots ,\lambda _{n}) P−1AP=PTAP=diag(λ1,λ2,⋯,λn),其中 λ 1 , λ 2 , ⋯ , λ n \lambda _{1},\lambda _{2},\cdots ,\lambda _{n} λ1,λ2,⋯,λn为 A A A的全部特征值;矩阵 P P P为列向量组为 A A A的 n n n个标准正交的特征向量。
参考博文
这里就产生了一个疑问,压缩后,是否可以再还原数据呢? 答案是可以的,只是压缩时丢失的那部分数据找不回了,不能完全的恢复数据,只能够近似的还原数据。
重构数据的方式如下:
z
a
p
p
r
o
x
(
i
)
=
U
r
e
d
u
c
e
∗
x
i
z_{approx}^{(i)} = U_{reduce} * x_{i}
zapprox(i)=Ureduce∗xi 其中,
z
a
p
p
r
o
x
(
i
)
≈
z
z_{approx}^{(i)}\approx z
zapprox(i)≈z
说明: 上面使用的符号与下面图片中使用的符号是相反的,即图中使用
X
X
X代表原始数据集,
Z
Z
Z代表变换后的数据集,而上述步骤使用
Z
Z
Z表示原始数据,
X
X
X代表变换后的数据。
由图像可知:重构后,所有的点后落在了直线上,所以丢失的数据即为原始点与直线的距离。
(4)如何选取维数K
一般来说,K越小越好,K越小表明压缩的程度越高,但同时又要保证保留足够多的数据量。所以,选取最小的K,需要满足下面的条件:
-
均方投影误差为: 1 m ∑ i = 1 m ∥ x ( i ) − x a p p r o x ( i ) ∥ 2 \frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)}-x^{(i)}_{approx} \right \|^{2} m1∑i=1m∥∥∥x(i)−xapprox(i)∥∥∥2
-
训练集的方差为: 1 m ∑ i = 1 m ∥ x ( i ) ∥ 2 \frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)} \right \|^{2} m1∑i=1m∥∥x(i)∥∥2
-
比值计算为: 1 m ∑ i = 1 m ∥ x ( i ) − x a p p r o x ( i ) ∥ 2 1 m ∑ i = 1 m ∥ x ( i ) ∥ 2 ≤ 0.01 ( 可 变 值 ) \frac{\frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)}-x^{(i)}_{approx} \right \|^{2}}{\frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)} \right \|^{2}}\leq 0.01(可变值) m1∑i=1m∥∥x(i)∥∥2m1∑i=1m∥∥∥x(i)−xapprox(i)∥∥∥2≤0.01(可变值)
希望在均方投影误差与训练集方差的比例尽可能小的情况下选择尽可能小的值。若是这个比例小于1%,就意味着原本数据的偏差有99%都保留下来了;若是这个比例小于5%,那么原始数据的偏差有95%都被保留下来。
以下为其求解过程:
首先可以先令
k
=
1
k=1
k=1,然后进行PCA降维,获得
U
r
e
d
u
c
e
,
z
(
1
)
,
.
.
.
,
z
(
m
)
,
x
a
p
p
r
o
x
(
1
)
,
.
.
.
,
x
a
p
p
r
o
x
(
m
)
U_{reduce},z^{(1)},...,z^{(m)},x_{approx}^{(1)},...,x_{approx}^{(m)}
Ureduce,z(1),...,z(m),xapprox(1),...,xapprox(m),代入比值公式,计算比例是否小于1%,如果不是的话,再令
k
=
2
k=2
k=2,依次计算,直到找到使得比例小于1%的最小
k
k
k值。
(原因是各个特征之间通常情况存在某种相关性)。
还可以通过另一种方法进行求解(称为方法二):
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
m
S
i
i
∑
i
=
1
k
S
i
i
≤
0.01
(
可
变
值
)
\frac{\frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)}-x^{(i)}_{approx} \right \|^{2}}{\frac{1}{m}\sum_{i=1}^{m}\left \| x^{(i)} \right \|^{2}}=1-\frac{\sum_{i=1}^{m}S_{ii}}{\sum_{i=1}^{k}S_{ii}}\leq 0.01(可变值)
m1∑i=1m∥∥x(i)∥∥2m1∑i=1m∥∥∥x(i)−xapprox(i)∥∥∥2=1−∑i=1kSii∑i=1mSii≤0.01(可变值)
也即
∑
i
=
1
k
S
i
i
∑
i
=
1
m
S
i
i
≥
0.99
\frac{\sum_{i=1}^{k}S_{ii}}{\sum_{i=1}^{m}S_{ii}}\geq 0.99
∑i=1mSii∑i=1kSii≥0.99 该公式也说明有99%的数据被保留下来。
(5)PCA的作用
PCA的作用(即降维的作用)
- 可以减少内存空间
- 可以对算法进行提速
- 可以用于数据可视化
PCA的优缺点
优点:
- 降维使得原始数据的维度减少,能够降低在训练过程中的消耗,提高学习效率;
- PCA丢掉的原始数据信息,如果这些恰好是噪声,那就给运算结果带来了好处;
- 丢失原始数据的一些信息,与提高机器学习算法运算效率相比,是影响比较小的。
缺点:
- 若丢失的信息是比较重要的,那就不适合用PCA算法了;
- PCA 分析得到的主成分意义不明确,不具有可解释性。
需要注意的是,在进行降维之前,要先做数据预处理,通常要去均值,有时还需要将进行数据标准化(即,数据的方差结果处理为1)。
(6)使用PCA的注意事项
需要注意的是,PCA降维只在训练集上使用。如果有交叉验证集和测试集,也采用对训练集学习而来的
U
r
e
d
u
c
e
U_{reduce}
Ureduce。
提问:既然PCA那么好用,是不是就可以随便使用呢?
解释:这是不可以的,PCA是个辅助工具,使用与否,从功能上来说并没有太大的区别,主要的区别在于学习算法的效率。比如说,在使用线性回归或逻辑回归时,若运算时间很长或者占用内存过大,就需要利用PCA来提升一下算法的性能;若直接运行时效果比较好,那么就不需要使用PCA。
错误使用PCA的情况:
- 将PCA用于减少过拟合情况。这样做并不能正确处理过拟合的情况,是由于PCA只是近似地丢掉一些特征,没有考虑任何与结果变量有关的信息,因此可能会丢掉非常重要的特征。当产生过拟合情况时,可以使用正则化处理,这种方法会考虑结果变量,不会丢掉重要的信息。
- 默认将PCA作为机器学习过程的一部分。PCA虽在很多时候起到很好的效果,但是不一定将PCA作为学习的一部分,只需要在运算时间过长或者占用过多的内存时,才考虑使用PCA。