降维:主成分分析PCA以及Fisher线性判别(LDA)要点

从应用的角度看,对于无监督的任务使用PCA,对于有监督的任务使用LDA。
总结: PCA利用的是投影之后数据的方差最大,寻找的是使得投影之后方差最大的方向.使用主成分来表示原始数据,从而去除冗余的维度.
LDA是选择投影之后类内方差小,类间方差大的方向,用到了类别标签信息.
上述求解都是由最大的d个特征值对应的特征向量来得到所需的投影方向的~~
1\PCA投影方向就是协方差矩阵得最大特征值的特征向量~
2\LDA投影方向就是矩阵Sw-1*Sb(Sb类间离散度矩阵.Sw是类内离散度矩阵)最大的特征值对应得特征向量

PCA

PCA的作用就是在降维,PCA降维的目的:对原始数据进行特征提取,对于处于高维特征的向量,内部存在很多冗余噪声,通过降维来获取数据内部的特性,从而提升特征表达能力降低训练复杂度

因为信号的方差越大越好,说明蕴含了越多的信息。我们想降维,如果是三维转二维,那么就是要用二维中的一根轴去表示三维的信息,使得所有的样本点在轴上的投影方差越大越好。

目的----最大化投影方差,使得数据在主轴上的投影的方差最大。

步骤:
1、首先去中心化–中心化的意义是后面投影之后的均值是0,方便计算也对表达有所帮助。
2、 计算协方差矩阵—计算特征值,取最大的前D个—得到特征向量
3、通过特征向量进行映射,得到投影后的坐标向量。就从N维转换到了D维。
在这里插入图片描述

from sklearn.preprocessing import StandardScaler
# Input:
#  X: ndarray[N,C]
#  cout: float
#
def PCA(X, cout):
    channels = X.shape[-1]

    #数据标准化,去均值
    X_std = StandardScaler().fit_transform(X)
    #构造协方差矩阵
    Cov_mat = np.cov(X_std.T)
    #使用Numpy包的linalg.eig模块求解特征值,特征向量
    eig_vals,eig_vects = np.linalg.eig(Cov_mat)

    #将特征值与特征向量组合成元组,并按照特征值进行排序
    eig_pairs = [((np.abs(eig_vals[i])),eig_vects[:,i]) for i in range(len(eig_vects))]
    eig_pairs.sort(key = lambda x:x[0],reverse = True)

    #选取前三个特征向量构成特征矩阵
    matrix_w = np.hstack([eig_pairs[i][1].reshape(channels,1) for i in range(cout)])

    #将原始数据映射到新的特征矩阵空间中
    new_data = X.dot(matrix_w)
    return new_data

Fisher线性判别(LDA)

LDA: 分类+降维
PCA:降维

Fisher 线性判别也是降维的手段,和PCA的区别就在于:PCA的目的是把数据实现投影后方差较大的方向上,没有考虑标签;而Fisher是一种有监督的降维算法,
在这里插入图片描述
如上图所示,PCA会选择y轴进行投影,投影之后的方差最大,但是两类数据会混合在一起,很难分类;LDA会选择x轴,因为投影到x轴,两类在降维的基础上,也可以实现分开。
下面LDA就是指代Fisher,一样。
LDA实现分类,在寻找向量投影的同时,考虑投影之后的类间信息和类内信息的关系。
核心思想—类内距离尽可能小,类间距离尽可能大。
1、类间距离最大化:
就是投影之后的两类的均值之间的距离最大化

2、类内距离最小化:
通过投影之后的各类别的方差最小化

3、结合以上两种条件得到的目标函数就是
变量是w,投影的轴。
f(w) = 类间均值距离 / 类内的方差之和
f(w)求最大,对其进行求导,得到最终的结果在这里插入图片描述
Sw代表的是类内的散度矩阵—也就是方差,SB代表的是类间的,也就是两个矩阵而已,下面推导给出,归结起来就是最后的w满足上述条件,投影方向就是特征值lanbda对应的特征向量w。再简化一下就是:
因为SbW其实就是类间的投影,所以确实和u1-u2方向一致,因为这里只需要求到单位向量w的方向,所以, 可以把方向转化为在这里插入图片描述
所以最终的求解只需要求导类别均值,以及类别的方差,就可以得到我们要的w—最佳的投影方向。

在这里插入图片描述
类间距离是由类中心的距离来决定的,类内距离是由类内方差来决定的~~
目标函数就是 类间距离/类内方差 越大越好~
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值