网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
\sum_j(j=0,1)
∑j(j=0,1) 为第
j
j
j 类样本的协方差矩阵。
其中
u
j
=
1
N
j
∑
x
ϵ
X
j
x
(
j
=
0
,
1
)
,
∑
j
=
∑
x
ϵ
X
j
(
x
−
u
j
)
(
x
−
u
j
)
T
(
j
=
0
,
1
)
u_j = \frac{1}{N_j} \sum_{\boldsymbol x\epsilon X_j}\boldsymbol x(j=0,1), \sum_j = \sum_{\boldsymbol x\epsilon X_j}(\boldsymbol x-u_j)(\boldsymbol x-u_j)^T(j=0,1)
uj=Nj1xϵXj∑x(j=0,1),j∑=xϵXj∑(x−uj)(x−uj)T(j=0,1)
假设投影直线是向量
w
\boldsymbol w
w,对任意样本
x
i
\boldsymbol x_i
xi,它在直线
w
w
w上的投影为
w
T
x
i
\boldsymbol w^Tx_i
wTxi,两个类别的中心点
u
0
u_0
u0, $u_1 $在直线
w
w
w 的投影分别为
w
T
u
0
\boldsymbol w^Tu_0
wTu0 、
w
T
u
1
\boldsymbol w^Tu_1
wTu1。
LDA的目标是让两类别的数据中心间的距离
∥
w
T
u
0
−
w
T
u
1
∥
2
2
| \boldsymbol w^Tu_0 - \boldsymbol w^Tu_1 |^2_2
∥wTu0−wTu1∥22 尽量大,与此同时,希望同类样本投影点的协方差
w
T
∑
0
w
\boldsymbol w^T \sum_0 \boldsymbol w
wT∑0w、
w
T
∑
1
w
\boldsymbol w^T \sum_1 \boldsymbol w
wT∑1w 尽量小,最小化
w
T
∑
0
w
−
w
T
∑
1
w
\boldsymbol w^T \sum_0 \boldsymbol w - \boldsymbol w^T \sum_1 \boldsymbol w
wT∑0w−wT∑1w 。
定义
类内散度矩阵
S
w
=
∑
0
∑
1
=
∑
x
ϵ
X
0
(
x
−
u
0
)
(
x
−
u
0
)
T
∑
x
ϵ
X
1
(
x
−
u
1
)
(
x
−
u
1
)
T
S_w = \sum_0 + \sum_1 = \sum_{\boldsymbol x\epsilon X_0}(\boldsymbol x-u_0)(\boldsymbol x-u_0)^T + \sum_{\boldsymbol x\epsilon X_1}(\boldsymbol x-u_1)(\boldsymbol x-u_1)^T
Sw=0∑+1∑=xϵX0∑(x−u0)(x−u0)T+xϵX1∑(x−u1)(x−u1)T
类间散度矩阵
S
b
=
(
u
0
−
u
1
)
(
u
0
−
u
1
)
T
S_b = (u_0 - u_1)(u_0 - u_1)^T
Sb=(u0−u1)(u0−u1)T
据上分析,优化目标为
arg
max
w
J
(
w
)
=
∥
w
T
u
0
−
w
T
u
1
∥
2
2
w
T
∑
0
w
w
T
∑
1
w
=
w
T
(
u
0
−
u
1
)
(
u
0
−
u
1
)
T
w
w
T
(
∑
0
∑
1
)
w
=
w
T
S
b
w
w
T
S
w
w
\mathop{\arg\max}_\boldsymbol w J(\boldsymbol w) = \frac{| \boldsymbol w^Tu_0 - \boldsymbol w^Tu_1 |^2_2}{\boldsymbol w^T \sum_0\boldsymbol w + \boldsymbol w^T \sum_1\boldsymbol w} = \frac{\boldsymbol wT(u_0-u_1)(u_0-u_1)T\boldsymbol w}{\boldsymbol w^T(\sum_0 + \sum_1)\boldsymbol w} = \frac{\boldsymbol w^TS_b\boldsymbol w}{\boldsymbol w^TS_w\boldsymbol w}
argmaxwJ(w)=wT∑0w+wT∑1w∥wTu0−wTu1∥22=wT(∑0+∑1)wwT(u0−u1)(u0−u1)Tw=wTSwwwTSbw
根据广义瑞利商的性质,矩阵
S
w
−
1
S
b
S^{-1}_{w} S_b
Sw−1Sb 的最大特征值为
J
(
w
)
J(\boldsymbol w)
J(w) 的最大值,矩阵
S
w
−
1
S
b
S^{-1}_{w} S_b
Sw−1Sb 的最大特征值对应的特征向量即为
w
\boldsymbol w
w。
LDA算法流程总结
LDA算法降维流程如下:
输入:数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D = { (x_1,y_1),(x_2,y_2), … ,(x_m,y_m) }
D={(x1,y1),(x2,y2),…,(xm,ym)},其中样本
x
i
x_i
xi 是n维向量,
y
i
ϵ
{
C
1
,
C
2
,
.
.
.
,
C
k
}
y_i \epsilon {C_1, C_2, …, C_k}
yiϵ{C1,C2,…,Ck},降维后的目标维度
d
d
d 。
输出:降维后的数据集
D
‾
\overline{D}
D 。
步骤:
- 计算类内散度矩阵
S
w
S_w
Sw。
2. 计算类间散度矩阵
S
b
S_b
Sb 。
3. 计算矩阵
S
w
−
1
S
b
S^{-1}_wS_b
Sw−1Sb 。
4. 计算矩阵
S
w
−
1
S
b
S^{-1}_wS_b
Sw−1Sb 的最大的 d 个特征值。
5. 计算 d 个特征值对应的 d 个特征向量,记投影矩阵为 W 。
6. 转化样本集的每个样本,得到新样本
P
i
=
W
T
x
i
P_i = W^Tx_i
Pi=WTxi 。
7. 输出新样本集
D
‾
=
{
(
p
1
,
y
1
)
,
(
p
2
,
y
2
)
,
.
.
.
,
(
p
m
,
y
m
)
}
\overline{D} = { (p_1,y_1),(p_2,y_2),…,(p_m,y_m) }
D={(p1,y1),(p2,y2),…,(pm,ym)}
LDA和PCA区别
异同点 | LDA | PCA |
---|---|---|
相同点 | 1. 两者均可以对数据进行降维;2. 两者在降维时均使用了矩阵特征分解的思想;3. 两者都假设数据符合高斯分布; | |
不同点 | 有监督的降维方法; | 无监督的降维方法; |
降维最多降到k-1维; | 降维多少没有限制; | |
可以用于降维,还可以用于分类; | 只用于降维; | |
选择分类性能最好的投影方向; | 选择样本点投影具有最大方差的方向; | |
更明确,更能反映样本间差异; | 目的较为模糊; |
LDA优缺点
优缺点 | 简要说明 |
---|---|
优点 | 1. 可以使用类别的先验知识;2. 以标签、类别衡量差异性的有监督降维方式,相对于PCA的模糊性,其目的更明确,更能反映样本间的差异; |
缺点 | 1. LDA不适合对非高斯分布样本进行降维;2. LDA降维最多降到分类数k-1维;3. LDA在样本分类信息依赖方差而不是均值时,降维效果不好;4. LDA可能过度拟合数据。 |
主成分分析(PCA)
主成分分析(PCA)思想总结
- PCA就是将高维的数据通过线性变换投影到低维空间上去。
- 投影思想:找出最能够代表原始数据的投影方法。被PCA降掉的那些维度只能是那些噪声或是冗余的数据。
- 去冗余:去除可以被其他向量代表的线性相关向量,这部分信息量是多余的。
- 去噪声,去除较小特征值对应的特征向量,特征值的大小反映了变换后在特征向量方向上变换的幅度,幅度越大,说明这个方向上的元素差异也越大,要保留。
- 对角化矩阵,寻找极大线性无关组,保留较大的特征值,去除较小特征值,组成一个投影矩阵,对原始样本矩阵进行投影,得到降维后的新样本矩阵。
- 完成PCA的关键是——协方差矩阵。协方差矩阵,能同时表现不同维度间的相关性以及各个维度上的方差。协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。
- 之所以对角化,因为对角化之后非对角上的元素都是0,达到去噪声的目的。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉,即去冗余。
图解PCA核心思想
PCA可解决训练数据中存在数据特征过多或特征累赘的问题。核心思想是将m维特征映射到n维(n < m),这n维形成主元,是重构出来最能代表原始数据的正交特征。
假设数据集是m个n维,
(
x
(
1
)
,
x
(
2
)
,
⋯
,
x
(
m
)
)
(\boldsymbol x^{(1)}, \boldsymbol x^{(2)}, \cdots, \boldsymbol x^{(m)})
(x(1),x(2),⋯,x(m))。如果
n
=
2
n=2
n=2,需要降维到
n
′
=
1
n'=1
n′=1,现在想找到某一维度方向代表这两个维度的数据。下图有
u
1
,
u
2
u_1, u_2
u1,u2两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据集的呢?
从图可看出,
u
1
u_1
u1比
u
2
u_2
u2好,为什么呢?有以下两个主要评价指标:
- 样本点到这个直线的距离足够近。
- 样本点在这个直线上的投影能尽可能的分开。
如果我们需要降维的目标维数是其他任意维,则:
- 样本点到这个超平面的距离足够近。
- 样本点在这个超平面上的投影能尽可能的分开。
PCA算法推理
下面以基于最小投影距离为评价指标推理:
假设数据集是m个n维,
(
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
)
(x^{(1)}, x{(2)},…,x{(m)})
(x(1),x(2),…,x(m)),且数据进行了中心化。经过投影变换得到新坐标为
w
1
,
w
2
,
.
.
.
,
w
n
{w_1,w_2,…,w_n}
w1,w2,…,wn,其中
w
w
w 是标准正交基,即
∥
w
∥
2
=
1
| w |_2 = 1
∥w∥2=1,
w
i
T
w
j
=
0
w^T_iw_j = 0
wiTwj=0。
经过降维后,新坐标为
{
w
1
,
w
2
,
.
.
.
,
w
n
}
{ w_1,w_2,…,w_n }
{w1,w2,…,wn},其中
n
′
n'
n′ 是降维后的目标维数。样本点
x
(
i
)
x^{(i)}
x(i) 在新坐标系下的投影为
z
(
i
)
=
(
z
1
(
i
)
,
z
2
(
i
)
,
.
.
.
,
z
n
′
(
i
)
)
z^{(i)} = \left(z^{(i)}_1, z^{(i)}_2, …, z^{(i)}_{n'} \right)
z(i)=(z1(i),z2(i),…,zn′(i)),其中
z
j
(
i
)
=
w
j
T
x
(
i
)
z^{(i)}_j = w^T_j x^{(i)}
zj(i)=wjTx(i) 是
x
(
i
)
x^{(i)}
x(i) 在低维坐标系里第 j 维的坐标。
如果用
z
(
i
)
z^{(i)}
z(i) 去恢复
x
(
i
)
x^{(i)}
x(i) ,则得到的恢复数据为
x
^
(
i
)
=
∑
j
=
1
n
′
x
j
(
i
)
w
j
=
W
z
(
i
)
\widehat{x}^{(i)} = \sum^{n'}_{j=1} x^{(i)}_j w_j = Wz^{(i)}
x
(i)=∑j=1n′xj(i)wj=Wz(i),其中
W
W
W为标准正交基组成的矩阵。
考虑到整个样本集,样本点到这个超平面的距离足够近,目标变为最小化
∑
i
=
1
m
∥
x
^
(
i
)
−
x
(
i
)
∥
2
2
\sum^m_{i=1} | \hat{x}^{(i)} - x^{(i)} |^2_2
∑i=1m∥x^(i)−x(i)∥22 。对此式进行推理,可得:
∑
i
=
1
m
∥
x
^
(
i
)
−
x
(
i
)
∥
2
2
=
∑
i
=
1
m
∥
W
z
(
i
)
−
x
(
i
)
∥
2
2
=
∑
i
=
1
m
(
W
z
(
i
)
)
T
(
W
z
(
i
)
)
−
2
∑
i
=
1
m
(
W
z
(
i
)
)
T
x
(
i
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
∑
i
=
1
m
(
z
(
i
)
)
T
(
z
(
i
)
)
−
2
∑
i
=
1
m
(
z
(
i
)
)
T
x
(
i
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
−
∑
i
=
1
m
(
z
(
i
)
)
T
(
z
(
i
)
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
−
t
r
(
W
T
(
∑
i
=
1
m
x
(
i
)
(
x
(
i
)
)
T
)
W
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
−
t
r
(
W
T
X
X
T
W
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
\sum^m_{i=1} | \hat{x}^{(i)} - x^{(i)} |^2_2 = \sum^m_{i=1} | Wz^{(i)} - x^{(i)} |^2_2 \ = \sum^m_{i=1} \left( Wz^{(i)} \right)^T \left( Wz^{(i)} \right) - 2\sum^m_{i=1} \left( Wz^{(i)} \right)^T x^{(i)} + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = \sum^m_{i=1} \left( z^{(i)} \right)^T \left( z^{(i)} \right) - 2\sum^m_{i=1} \left( z^{(i)} \right)^T x^{(i)} + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = - \sum^m_{i=1} \left( z^{(i)} \right)^T \left( z^{(i)} \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = -tr \left( W^T \left( \sum^m_{i=1} x^{(i)} \left( x^{(i)} \right)^T \right)W \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = -tr \left( WTXXTW \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)}
i=1∑m∥x^(i)−x(i)∥22=i=1∑m∥Wz(i)−x(i)∥22=i=1∑m(Wz(i))T(Wz(i))−2i=1∑m(Wz(i))Tx(i)+i=1∑m(x(i))Tx(i)=i=1∑m(z(i))T(z(i))−2i=1∑m(z(i))Tx(i)+i=1∑m(x(i))Tx(i)=−i=1∑m(z(i))T(z(i))+i=1∑m(x(i))Tx(i)=−tr(WT(i=1∑mx(i)(x(i))T)W)+i=1∑m(x(i))Tx(i)=−tr(WTXXTW)+i=1∑m(x(i))Tx(i)
在推导过程中,分别用到了
x
‾
(
i
)
=
W
z
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
(
i
)
=
∑
i
=
1
m
(
z
(
i
)
)
T
(
z
(
i
)
)
−
2
∑
i
=
1
m
(
z
(
i
)
)
T
x
(
i
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
−
∑
i
=
1
m
(
z
(
i
)
)
T
(
z
(
i
)
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
−
t
r
(
W
T
(
∑
i
=
1
m
x
(
i
)
(
x
(
i
)
)
T
)
W
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
=
−
t
r
(
W
T
X
X
T
W
)
∑
i
=
1
m
(
x
(
i
)
)
T
x
(
i
)
\sum^m_{i=1} | \hat{x}^{(i)} - x^{(i)} |^2_2 = \sum^m_{i=1} | Wz^{(i)} - x^{(i)} |^2_2 \ = \sum^m_{i=1} \left( Wz^{(i)} \right)^T \left( Wz^{(i)} \right) - 2\sum^m_{i=1} \left( Wz^{(i)} \right)^T x^{(i)} + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = \sum^m_{i=1} \left( z^{(i)} \right)^T \left( z^{(i)} \right) - 2\sum^m_{i=1} \left( z^{(i)} \right)^T x^{(i)} + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = - \sum^m_{i=1} \left( z^{(i)} \right)^T \left( z^{(i)} \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = -tr \left( W^T \left( \sum^m_{i=1} x^{(i)} \left( x^{(i)} \right)^T \right)W \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)} \ = -tr \left( WTXXTW \right) + \sum^m_{i=1} \left( x^{(i)} \right)^T x^{(i)}
i=1∑m∥x^(i)−x(i)∥22=i=1∑m∥Wz(i)−x(i)∥22=i=1∑m(Wz(i))T(Wz(i))−2i=1∑m(Wz(i))Tx(i)+i=1∑m(x(i))Tx(i)=i=1∑m(z(i))T(z(i))−2i=1∑m(z(i))Tx(i)+i=1∑m(x(i))Tx(i)=−i=1∑m(z(i))T(z(i))+i=1∑m(x(i))Tx(i)=−tr(WT(i=1∑mx(i)(x(i))T)W)+i=1∑m(x(i))Tx(i)=−tr(WTXXTW)+i=1∑m(x(i))Tx(i)
在推导过程中,分别用到了
x
‾
(
i
)
=
W
z
[外链图片转存中…(img-gSstZkPO-1715816251610)]
[外链图片转存中…(img-dzuwwaH1-1715816251611)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新