对机器学习中的降维算法(PCA)的理解

PCA主成分分析

什么是维度?

在python中,对nump数组来说,维度就是.shape返回的结果,返回几个数字就是几维。对于DataFrame来说,一个DataFrame就是一张表,一张表最多二维(m行,n列)。其中m行是m个样本,n列是每一个样本所对应的n 个特征,该表就可以看作样本的特征矩阵。对每一张表来说,维度指的是样本数量m或者特征数量,(一般指的是特征数量n),因此可以简单地理解为有几个特征就是几维。
降维算法中的“降维”(decomposition)指的就是降低特征矩阵中特征数量,从而降低算法的计算成本。

降维算法中的入门算法PCA和SVD

PCA和SVD都是通过分解特征矩阵来进行降维。*** 矩阵分解(Matrix decomposition)***—>将一个矩阵分解为多个形式简单的矩阵,方便理解矩阵的根本性质,同时用更简单的矩阵方便计算。矩阵分解在推荐系统,降维,深度学习方面应用广泛。其中也涉及大量数学原理,包括线性代数等等,所以机器学习中不可避免大量数学原理,所以要打好数理基础才能更好地理解算法的精髓!!!

下面进入今天的正题,PCA主成分分析。。。

  • 信息衡量指标
    在高维数据中,有一些特征表示的信息是无意义的(噪声),有一些特征的信息和其他特征是重复的,这决定了我们可以剔除或者合并这些特征,产生一个新的特征矩阵来达到降维的目的,这样做既减少特征的数量,又保留了大部分原始有效信息。
    那我们怎么来选择那些带有大量信息的特征呢?——>信息衡量指标。PCA使用的信息衡量指标就是样本方差 S 2 S^2 S2(方差越大,携带的信息就越大)

    S 2 = 1 n − 1 ∑ i = 1 n ( x i − x − ) 2 S^2= \frac{1}{n-1}\sum_{i=1}^n(x_i-x^-)^2 S2=n11i=1n(xix)2

    SVD的信息衡量指标是奇异值

思考? 为什么这里是n-1,而不是n?(这里就需要用到概率论中关于样本方差和数学期望的一系列知识咯!(前不久看概率论的时候正好遇到过这个问题哈哈哈)

因为随机变量X( x 1 , x 2 , x 3 , . . . . x i ) x_1,x_2,x_3,....x_i) x1,x2,x3,....xi)即样本的特征服从正态分布,这样可以让样本方差的数学期期望等于随机变量的方差,即 E S 2 = σ 2 ES^2=\sigma^2 ES2=σ2,这样才能得到样本方差 μ \mu μ无偏估计(大白话就是这样算出来的样本方差更准确)具体的数学推导过程这里就不写了。

  • 降维的几个步骤

    1. 输入原始数据(m,n),n维特征向量构成一个n维空间
    2. 决定降维后的特征数量 K
    3. 通过一系列变化,生成n个新的特征向量,构成一个新的n维空间V
    4. 计算出原始数据在新特征空间V上每个维度对应的值,形成新的特征向量。
    5. 选取前K个信息量最大的特征,将n 维空间降至K维。(这K个特征就是“主成分”)

    PCA和SVD都经过上述步骤实现降维,只不过信息衡量指标不同。

  1. PCA: X — — > Q ∑ Q − 1 ) X——>Q\sum Q^{-1}) X>QQ1)
    其中的数学运算是,产生协方差矩阵,将特征矩阵X分解为上述三个矩阵, ∑ \sum 是一个对称矩阵(对角线上的位置为方差,其余全为0)
  2. SVD: X — — > U ∑ V T ) X——>U\sum V^{T}) X>UVT)
    SVD使用奇异值分解来找出新的n维空间, ∑ \sum 是一个对称矩阵(对角线上的位置为奇异值,其余全为0)U和 v T v^{T} vT分别为左奇异和右奇异矩阵。

注意! 这里的右奇异矩阵 v T v^{T} vT就是新特征向量组成的n维空间,所以在SVD可以不计算协方差矩阵(因为要遍历所有样本的特征来计算信息衡量指标,涉及大型矩阵的计算,这个计算量十分巨大)。所以在sklearn中降维分为两部分:
1、使用奇异值分解来计算新的特征空间V。
2、将原始数据映射到新的特征空间上,得到新的特征矩阵。所以使用 SVD减少了计算量,但是选择特征的信息衡量指标还是使用的方差。

代码实例

sklearn中的PCA降维包含在类sklearn.decomposition.PCA 中。
参数:(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)

n_components——指定降至K维,需要人为设置,既不能太大(达不到降维的目的),也不能太小(数据信息损失太多)。可以通过画K的学习曲线选择合适的取值。
copy——是否创造原始数据的副本,为fale直接修改原来的数据,默认true
svd_solver——指定奇异值分解SVD的方法

下面用鸢尾花数据集测试

// 导入模块
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

data=load_iris()
X,y = iris.data,iris.target
X.shape  #查看维度,n_components在(0,min(X.shape))访问内取值

#调用PCA
pca = PCA(n_components=2  #指定维度,<=3时可以将降维后的数据可视化
         ,copy=true)
pca.fit(X)
X_=pca.transform(X)    #新矩阵
#简写
X_=pca(2)fit_transform(X)  

#查看降维后每个特征向量所带信息量的大小(可解释性方差)
pca.explained_variance_ 

#可解释性方差贡献率——新特征向量所带信息量占原始数据总信息量的比值
pca.explained_variance_ratio_  
#通过这两个属性可以发现前K个特征的信息量较大,即信息大部分集中在前K个特征上,所以这就是主成分

       
,

降维和特征选择

  • 相同:降维和特征选择都是特征工程技术,用于数据处理,为之后模型更好地学习服务。
  • 不同:特征选择是从原来的数据中选择信息量大的,选择后的特征依然是原来的数据,可以清楚地知道该特征是原来特征矩阵的那一部分;
    降维是对原始数据进行压缩,降维后的数据不具有可解释性,即是生成的新特征,不属于原来特征矩阵中的任何一个。所以降维后的数据不适合用于拟合特征和标签之间的关系的模型。因为降维后的特征和原来的标签之间的关系改变了。

降维是机器学习中的一个重要部分,属于“无监督学习”(无监督的算法在训练的时候只需要特征矩阵X,不需要标签)。降维和聚类算法,就是无监督学习的代表算法。当然,聚类也可以用于降维,将高维特征压缩到一列当中,常常用于图像,声音,视频等非结构化数据,可以大幅度压缩数据量。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值