文章目录

  • 【一】 PCA(Principal Component Analysis,主要成分分析)
    • 【1.1】 斜方差公式(Cov\bm {Cov}Cov)
    • 【1.2】 构建斜方差矩阵 C\bm CC
    • 【1.3】 构建斜方差矩阵 D\bm DD
    • 【1.4】 推导过程(S\bm SS → P\bm PP)
    • 【1.5】 PCA 代码使用(Sklearn)
  • 【二】 LDA(Linear Discriminant Analysis,线性差异分析)
    • 【2.1】 基本定义(简单的例子,两个类别)
    • 【2.2】 推导过程(求导过程略)
    • 【2.3】 LDA 代码使用(Sklearn)
  • 【三】 SVD(Singular Value Decomposition,奇异值分解)
    • 【3.1】 Eigen-Decomposition(特征分解)
    • 【3.2】 举例说明(图解)
    • 【3.3】 SVD 代码使用(Sklearn)

【一】 PCA(Principal Component Analysis,主要成分分析)

PCA 的目标 : 将 D\bm DD 维向量降为 M\bm MM 维
① 保留区分能力最强的 MMM 个特征:每一维特征自己的 方差 都较大
② 这 MMM 维特征之间的相关性较小:不同维度的 斜方差 较小

【1.1】 斜方差公式(Cov\bm {Cov}Cov)

Cov(X,Y)Cov(X,Y)Cov(X,Y):可以通俗的理解为:两个变量 (X,Y)(X,Y)(X,Y) 在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何?

Cov(X,Y)=E[(X−μx)⋅(Y−μy)]s.tμx,μy为均值\bm \red {Cov(X,Y)} = E\,[\,(X-\mu _ { x }) \cdot (Y- \mu_{ y }) \,] \;\;\;\; s.t \;\; \mu _ { x }, \mu_{ y } \; 为均值Cov(X,Y)=E[(X−μx​)⋅(Y−μy​)]s.tμx​,μy​为均值

【1.2】 构建斜方差矩阵 C\bm CC

C=[Cov(X,X)Cov(X,Y)Cov(X,Z)Cov(Y,X)Cov(Y,Y)Cov(Y,Z)Cov(Z,X)Cov(Z,Y)Cov(Z,Z)]\bm \red {C} = \left[ \begin{array} { l l l } { Cov(X,X) } & { Cov(X,Y) } & { Cov(X,Z) } \\ { Cov(Y,X) } & { Cov(Y,Y) } & { Cov(Y,Z) } \\ { Cov(Z,X) } & { Cov(Z,Y) } & { Cov(Z,Z) } \end{array} \right]C=⎣⎡​Cov(X,X)Cov(Y,X)Cov(Z,X)​Cov(X,Y)Cov(Y,Y)Cov(Z,Y)​Cov(X,Z)Cov(Y,Z)Cov(Z,Z)​⎦⎤​

【1.3】 构建斜方差矩阵 D\bm DD
  1. 设原始数矩阵 XM∗N\bm {X_{M*N}}XM∗N​(MMM 表示特征维数,NNN 表示数据量)的斜方差矩阵为 CM∗M\bm {C_{M*M}}CM∗M​,
  2. 我们现在想要将 XM∗NX_{M*N}XM∗N​ 降维成 YK∗N\bm {Y_{K*N}}YK∗N​
  3. 也就是说,我们要寻找一种线性变换,一个矩阵 PK∗M\bm {P_{K*M}}PK∗M​,使得 YK∗N=PK∗M⋅XM∗NY_{K*N}=P_{K*M} \cdot X_{M*N}YK∗N​=PK∗M​⋅XM∗N​
  4. 设 YK∗NY_{K*N}YK∗N​ 的斜方差矩阵为 DK∗K\bm {D_{K*K}}DK∗K​,是个对角矩阵,且对角线上的值越大越好
【1.4】 推导过程(S\bm SS → P\bm PP)

① 先求出矩阵 SSS,使得 SCSTSCS^TSCST 是一个对角矩阵,并且使其对角元素从大到小排列

Var(Z1)=E[(Z1−Z1‾)2]=1n∑i=1n(a1Txi−a1Tx‾)2Var(Z_1) = E\,[ \,(Z_1 - \overline { Z_1 })^2 \, ] = \frac { 1 } { n } \sum _ { i = 1 } ^ { n } ( a _ { 1 } ^ { T } x _ { i } - a _ { 1 } ^ { T } \overline x ) ^ { 2 }Var(Z1​)=E[(Z1​−Z1​​)2]=n1​i=1∑n​(a1T​xi​−a1T​x)2

=1n∑i=1na1T(xi−x‾)(xi−x‾)Ta1=a1TSa1whereS=1n∑i=1n(xi−x‾)(xi−x‾)T= \frac { 1 } { n } \sum _ { i = 1 } ^ { n } a _ { 1 } ^ { T } ( x _ { i } - \overline { x } ) ( x _ { i } - \overline { x } ) ^ { T } a_1 = \bm \red {a _ { 1 } ^ { T } S a _ { 1 }}\;\;\; where \;\; \bm \red S = \frac { 1 } { n } \sum _ { i = 1 } ^ { n } ( x _ { i } - \overline { x } ) ( x _ { i } - \overline { x } ) ^ { T }=n1​i=1∑n​a1T​(xi​−x)(xi​−x)Ta1​=a1T​Sa1​whereS=n1​i=1∑n​(xi​−x)(xi​−x)T

② 我们只需要从矩阵 SSS 的前 KKK 行组成的矩阵 PPP

D=1N−1YYT=1N−1(PX)(PX)T=1N−1PXXTPT\bm \red D = \frac { 1 } { N - 1 } Y Y ^ { T } = \frac { 1 } { N - 1 } ( P X ) ( P X ) ^ { T } = \frac { 1 } { N - 1 } P X X ^ { T } P ^ { T }D=N−11​YYT=N−11​(PX)(PX)T=N−11​PXXTPT

=P(1N−1XXT)PT=PCPT= P ( \frac { 1 } { N - 1 } X X ^ { T } ) P ^ { T } = P C P ^ { T }=P(N−11​XXT)PT=PCPT

【1.5】 PCA 代码使用(Sklearn)
from sklearn.decomposition import PCA
'''
:param (参数)
n_components: 要保留的特征维度数, 如果未设置n_components, 则保留所有特征维度
copy: 表示是否在运行算法时, 将原始训练数据复制一份. 若为True, 则运行PCA算法后, 原始训练数据的值不会有任何改变, 因为是在原始数据的副本上进行运算
whiten: 白化, 使得每个特征具有相同的方差
'''
pca = PCA(n_components=None, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)
'''
:attributes (属性)
components_: 返回具有最大方差的成分
n_components_: 返回所保留的成分个数 n
explained_variance_ratio_: 返回 所保留的 n 个成分各自的方差百分比
'''
'''
:object (方法)
pca.fit(X): PCA 是个无监督学习算法
pca.fit_transform(X): 用 X 来训练 PCA 模型, 同时返回降维后的数据
pca.inverse_transform(NEW_X): 将降维后的数据转换成原始数据
pca.transform(X): 将数据 X 转换成降维后的数据. 当模型训练好后, 对于新输入的数据, 都可以用 transform 方法来降维
'''

【二】 LDA(Linear Discriminant Analysis,线性差异分析)

【2.1】 基本定义(简单的例子,两个类别)

初始化

  • 假设样本原始的坐标为一个向量
    x\bm \red xx
  • 投影后样本的坐标为(这里的 yyy 是个标量,一个值)
    y=wTx\bm \red y = w^Txy=wTx

类别 1

  • 类别 111 的中心点为:
    μ1=1N1∑x∈D1x\bm \red {\mu _ { 1 }} = \frac { 1 } { N _ { 1 } } \sum _ { x \in D _ { 1 } } xμ1​=N1​1​x∈D1​∑​x
  • 类别 111 投影后的中心点为:
    μ‾1=1N1∑x∈D1wTx=wTμ1\bm \red {\overline { \mu } _ { 1 } } = \frac { 1 } { N _ { 1 } }\sum _ { x \in D _ { 1 } } w ^ { T } x = w ^ { T } \mu _ { 1 }μ​1​=N1​1​x∈D1​∑​wTx=wTμ1​

类别 2

  • 类别 222 的中心点为:
    μ2=1N2∑x∈D2x\bm \red {\mu _ { 2 }} = \frac { 1 } { N _ { 2 } } \sum _ { x \in D _ { 2 } } xμ2​=N2​1​x∈D2​∑​x
  • 类别 222 投影后的中心点为:
    μ‾2=1N2∑x∈D2wTx=wTμ2\bm \red {\overline { \mu } _ { 2 } } = \frac { 1 } { N _ { 2 } }\sum _ { x \in D _ { 2 } } w ^ { T } x = w ^ { T } \mu _ { 2 }μ​2​=N2​1​x∈D2​∑​wTx=wTμ2​

最大化类间距离

max(∥μ‾1−μ‾2∥2)\bm \red {max(\| \overline { \mu } _ { 1 } - \overline { \mu } _ { 2 } \| ^ { 2 })}max(∥μ​1​−μ​2​∥2)

最小化类内距离

S‾12=∑y∈D1∥y−μ‾1∥2andS‾22=∑y∈D2∥y−μ‾2∥2somin(S‾12+S‾22)\bm \red {\overline { S } _ { 1 } ^ { 2 }} = \sum _ { y \in D _ { 1 } } \| y - \overline { \mu } _ { 1 } \| ^ { 2 } \;\;\;\; and \;\;\;\; \bm \red {\overline { S } _ { 2 } ^ { 2 }} = \sum _ { y \in D _ { 2 } } \| y - \overline { \mu } _ { 2 } \| ^ { 2 } \;\;\;\;\; so \;\;\;\;\; \bm \red {min(\overline { S } _ { 1 } ^ { 2 } + \overline { S } _ { 2 } ^ { 2 } ) }S12​=y∈D1​∑​∥y−μ​1​∥2andS22​=y∈D2​∑​∥y−μ​2​∥2somin(S12​+S22​)

最终目的就是:

J(w)=max∥μ‾1−μ‾2∥2S‾12+S‾22\bm \red {J ( w ) }= max\,\frac { \| \overline { \mu } _ { 1 } - \overline { \mu } _ { 2 } \| ^ { 2 } } { \overline { S } _ { 1 } ^ { 2 } + \overline { S } _ { 2 } ^ { 2 } }J(w)=maxS12​+S22​∥μ​1​−μ​2​∥2​

【2.2】 推导过程(求导过程略)

类间距离

SB=(μ1−μ2)(μ1−μ2)TS _ { B } = ( \mu _ { 1 } - \mu _ { 2 } ) ( \mu _ { 1 } - \mu _ { 2 } ) ^ { T }SB​=(μ1​−μ2​)(μ1​−μ2​)T

(μ‾1−μ‾2)2=(wTμ1−wTμ2)2=wT(μ1−μ2)(μ1−μ2)Tw=wTSBw=S‾B\bm \red {( \overline { \mu } _ { 1 } - \overline { \mu } _ { 2 } ) ^ { 2 }} = ( w ^ { T } \mu _ { 1 } - w ^ { T } \mu _ { 2 } ) ^ { 2 } = w ^ { T } ( \mu _ { 1 } - \mu _ { 2 } ) ( \mu _ { 1 } - \mu _ { 2 } ) ^ { T } w = w ^ { T } S _ { B } w = \overline { S } _ { B }(μ​1​−μ​2​)2=(wTμ1​−wTμ2​)2=wT(μ1​−μ2​)(μ1​−μ2​)Tw=wTSB​w=SB​

类内距离

Si=∑x∈Di(x−μi)(x−μi)T这是方差矩阵S _ { i } = \sum _ { x \in D _ { i } } ( x - \mu _ { i } ) ( x - \mu _ { i } ) ^ T \;\;\;\;\; 这是方差矩阵Si​=x∈Di​∑​(x−μi​)(x−μi​)T这是方差矩阵

S‾i2=∑y∈Di∥y−μ‾i∥2=∑x∈Di∥wTx−wTμ1∥2=∑X∈DiwT(x−μi)(x−μi)Tw=wTSiw\overline { S } _ { i } ^ { 2 } = \sum _ { y \in D _ { i } } \| y - \overline { \mu } _ { i } \| ^ { 2 } = \sum _ { x \in D _ { i } } \| w ^ { T } x - w ^ { T } \mu _ { 1 } \| ^ { 2 } = \sum _ { X \in D _ { i } } w ^ { T } ( x - \mu _ { i } ) ( x - \mu _ { i } ) ^ { T } w = w ^ { T } S _ { i } wSi2​=y∈Di​∑​∥y−μ​i​∥2=x∈Di​∑​∥wTx−wTμ1​∥2=X∈Di​∑​wT(x−μi​)(x−μi​)Tw=wTSi​w

SW=S1+S2→S‾12+S‾22=wTS1w+wTS2w=wTSWwS _ { W } = S _ { 1 } + S _ { 2 } \;\;\;→\;\;\; \bm \red {\overline { S } _ { 1 } ^ { 2 } + \overline { S } _ { 2 } ^ { 2 } }= w ^ { T } S _ { 1 } w + w ^ { T } S _ { 2 } w = w ^ { T } S _ { W } w SW​=S1​+S2​→S12​+S22​=wTS1​w+wTS2​w=wTSW​w

J(w)J(w)J(w) 求导,过程略,直接给出结果

J(w)=max∥μ‾1−μ‾2∥2S‾12+S‾22=maxwTSBwwTSWw\bm \red {J ( w ) }= max\;\frac { \| \overline { \mu } _ { 1 } - \overline { \mu } _ { 2 } \| ^ { 2 } } { \overline { S } _ { 1 } ^ { 2 } + \overline { S } _ { 2 } ^ { 2 } } = max\;\frac { w ^ { T } S _ { B } w } { w ^ { T } S _ { W } w }J(w)=maxS12​+S22​∥μ​1​−μ​2​∥2​=maxwTSW​wwTSB​w​

w∗=arg⁡max⁡wJ(w)=arg⁡max⁡wwTSBwwTSWw=SW−1(μ1−μ2)\bm \red {w ^ { * } }= {\arg\max}_{w} \, J(w)= {\arg\max}_{w} \, \frac { w ^ { T } S _ { B } w } { w ^ { T } S _ { W } w } = \bm \red {S _ { W } ^ { - 1 } ( \mu _ { 1 } - \mu _ { 2 } )}w∗=argmaxw​J(w)=argmaxw​wTSW​wwTSB​w​=SW−1​(μ1​−μ2​)

【2.3】 LDA 代码使用(Sklearn)
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
'''
:param (参数)
solver: 求LDA超平面特征矩阵使用的方法, 特征数非常多的时候推荐使用 svd, 特征数不多的时候推荐使用 eigen; 如果使用 svd, 则不能指定正则化参数 shrinkage 进行正则化
shrinkage: 正则化参数, 可以增强 LDA 分类的泛化能力, 如果仅仅只是为了降维, 则一般可以忽略这个参数. shrinkage 只在 solver 为最小二乘 'lsqr' 和 特征分解 'eigen' 时有效
priors: 类别权重, 可以在做分类模型时指定不同类别的权重, 进而影响分类模型建立. 降维时一般不需要关注这个参数
n_components: 进行 LDA 降维时降到的维数, 这个值必须小于 '类别数-1'. 如果我们不是用于降维,则这个值可以用默认的 None
'''
lda = LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
'''
:object (方法)
lda.fit(X,y): LDA 是个有监督学习算法, 可以传入 y
lda.fit_transform(X,y): 用 X 和 y 来训练 LDA 模型, 同时返回降维后的数据
lda.transform(X): 将数据 X 转换成降维后的数据. 当模型训练好后, 对于新输入的数据, 都可以用 transform 方法来降维
lda.predict(X): 返回数据 X 预测的类别
'''

【三】 SVD(Singular Value Decomposition,奇异值分解)

A:Input Data Matrix(输入矩阵)
U:Left Singular Vectors,Orthonormal Matrix(左奇异值矩阵,正交 (直角) 矩阵,UTU=UUT=IU^TU = UU^T = IUTU=UUT=I)
S:Singular Values,Diagonal Matrix(奇异值矩阵,对角矩阵)
V:Right Singular Vectors,Orthonormal Matrix(右奇异值矩阵,正交 (直角) 矩阵,VTV=VVT=IV^TV = VV^T = IVTV=VVT=I)

Am∗n=Um∗r⋅Sr∗r⋅Vn∗rT\bm {A _ { m * n } = U _ { m * r } \cdot S _ { r * r } \cdot V _ { n * r } ^T}Am∗n​=Um∗r​⋅Sr∗r​⋅Vn∗rT​

【3.1】 Eigen-Decomposition(特征分解)

A:Symmetric Matrix(对称矩阵)
X:Orthonormal Matrix(正交 (直角) 矩阵,XTX=XXT=IX^TX = XX^T = IXTX=XXT=I)
∧\bm \wedge∧:Diagonal Matrix(对角矩阵)

A=X∧XTA = X \bm\wedge X ^ { T }A=X∧XT
AAT=USVT(USVT)T=USVTVSTUT=USSTUTA A ^ { T } = U S V ^ { T } ( U S V ^ { T } ) ^ { T } = U S V ^ { T } V S ^ { T } U ^ { T } = U S S ^ { T } U ^ { T }AAT=USVT(USVT)T=USVTVSTUT=USSTUT

ATA=(USVT)TUSVT=VSTUT(USVT)=VSSTVTA ^ { T } A = ( U S V ^ { T } ) ^ { T } U S V ^ { T } = V S ^ { T } U ^ { T } ( U S V ^ { T } ) = V S S ^ { T } V ^ { T }ATA=(USVT)TUSVT=VSTUT(USVT)=VSSTVT

【3.2】 举例说明(图解)
【3.3】 SVD 代码使用(Sklearn)
from sklearn.utils.extmath import randomized_svd
'''
:param (参数)
X: 需要被分解的矩阵
n_components: 要提取的奇异值和向量的数量
n_oversamples: Additional number of random vectors to sample the range of M so as to ensure proper conditioning (不太能理解)
n_iter: 迭代次数, 它可以用来处理非常嘈杂的问题 (不太懂)
'''
U, Sigma, VT = randomized_svd(X, n_components=10, n_oversamples=10, n_iter='auto', power_iteration_normalizer='auto', transpose='auto', flip_sign=True, random_state=0)

【ML】_00_02_降维算法相关推荐

  1. ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例

    ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA ...

  2. 【ML】经典降维算法 t-SNE

    降维算法将高维数据集 X={x1,x2,⋯,xm}\mathbb{X}=\{\bm{x_1},\bm{x_2},\cdots,\bm{x_m}\}X={x1​,x2​,⋯,xm​} 转换到二维和三维数 ...

  3. t-SNE:可视化效果最好的降维算法

    降维 1D,2D和3D数据可以可视化.但是在数据科学领域并不总是能够处理一个小于或等于3维的数据集,我们肯定会遇到使用高维数据的情况.对于数据科学专业人员来说,有必要对工作数据进行可视化和深入了解,以 ...

  4. 机器学习十大算法之Matlab-9降维算法

    机器学习十大算法之Matlab-9降维算法 降维算法 PCA算法 对数据集进行PCA后再重构 PCA降维-Matlab代码 例子1-系统pca做降维pca_mat.m 例子2-系统pca对简单数据集降 ...

  5. PCA、LDA、MDS、LLE、TSNE等降维算法的Python实现

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]网上关于各种降维算法的资料参差不齐,但大部分不提供源代码.近日,有人在 GitHub 上整理了一些经典降维算法的 Demo ...

  6. 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?

    什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果? 什么是维度诅咒? 随着维数(或特征)个数的增加,任意两个样本或者实例之间的平均距离也会增加,换句话说,在高维空间中,实例往往位于空间的边缘. ...

  7. sklearn LDA降维算法

    sklearn LDA降维算法 LDA(Linear Discriminant Analysis)线性判断别分析,可以用于降维和分类.其基本思想是类内散度尽可能小,类间散度尽可能大,是一种经典的监督式 ...

  8. PCA降维算法原理及代码实现(python和matlab)

    常见的数据降维算法有:奇异值分解(SVD).主成分分析(PCA).因子分析(FA).独立成分分析(ICA). PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值.特征向量. ...

  9. 10种常用降维算法源代码(python)

    最近发现一位同学整理了一些经典的降维算法,并用python实现常见降维算法的代码,特此推荐.作者:超爱学习 代码的github: https://github.com/heucoder/dimensi ...

最新文章

  1. linux中的apachectl是什么命令
  2. Manifest值冲突解决方法
  3. 计算机科学环境保护,CMU-如何利用计算机科学、机器学习和人工智能保护环境.pdf...
  4. 清华开源ResRep:剪枝SOTA!用结构重参数化实现CNN无损压缩 | ICCV 2021
  5. 通用Key-Value存储系统的存储管理策略解析
  6. VS2010连接MySql数据库时无法选择mysql database数据源
  7. 用SecureCRT在windows和CentOS间上传下载文件
  8. Python 学习笔记 - 11.模块(Module)
  9. java快速生成接口文档方法总结
  10. easydarwin ffmpeg
  11. 【图像去噪】基于BM3D算法实现图像去噪含Matlab源码
  12. iphone拍照标注转发微博应用--Gurgle 发布
  13. 如何用PowerPoint压缩ppt文件大小
  14. HomeBrew安装软件慢的简单有效解决方法
  15. [零刻]EQ12EQ12Pro安装原厂系统教程
  16. ios生成随机数方法
  17. oxooooooof4蓝屏_蓝屏代码0x000000f4怎么解决?
  18. 下载安装WinPcap
  19. 杭州威数智能科技有限公司 ——【无纸化会议行业先驱者】
  20. 一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。

热门文章

  1. java计算机毕业设计数据分析星辰网智能手机销售网站MyBatis+系统+LW文档+源码+调试部署
  2. 山西电力市场日前价格预测【2023-05-09】
  3. Picasa 3 更新
  4. 保险业务与系统——LOMA 290 保险公司运营——第十六讲——保险会计
  5. 复习日记-HTML+css+js+jquery
  6. Tubi 2022 年成绩单公开了
  7. 正在经历史上最大危机的乐视,这两天都被“黑”成了什么样?
  8. 关于IDEA启动Spring Boot项目出现Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext at j
  9. 2022年危险化学品经营单位主要负责人考试题模拟考试题库及在线模拟考试
  10. 基于scrapy+mongodb的智联招聘网站信息爬取