机器学习(八)——PCA

8.1PCA概述

PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。

PCA 的数学推导可以从最大可分型最大重构性两方面进行,前者的优化条件为划分后方差最大,后者的优化条件为点到划分平面距离最小。

8.1.1PCA原理

PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

先假设用数据的两个特征画出散点图:

只保留特征一和特征二其中一个

通过上面对两个特征的映射结果可以发现保留特征1(右面)比较好,因为保留特征1,当把所有的点映射到x轴上以后,点和点之间的距离相对较大,也就是说,拥有更高的可区分度,同时还保留着部分映射之前的空间信息。
那么如果把点都映射到y轴上,发现点与点距离更近了,这不符合数据原来的空间分布。所以保留特征1相比保留特征2更加合适,但是这是最好的方案吗?

将所有的点都映射到一根拟合的斜线上,从二维降到一维,整体和原样本的分布并没有多大的差距,点和点之间的距离更大了,区分度也更加明显。

通过方差定义样本间的距离

                                                Var(x)=\frac{1}{m}\sum_{i=1}^m\left(x_i-\bar{x}\right)^2

8.1.2协方差矩阵

标准化后的数据用于计算协方差矩阵。协方差矩阵反映了数据集中各特征之间的线性关系。对于一个具有 ( n ) 个变量的样本集,协方差矩阵是一个 ( n \times n ) 的矩阵,其中每个元素表示两个变量之间的协方差。

在统计学中,方差是用来度量单个随机变量离散程度,而协方差则一般用来刻画两个随机变量相似程度 

                协方差:                ​​​​​​​        ​​​​​​​        ​​​​​​​  ​​​​​​​C=\frac{1}{m-1}X^TX

                详细为:         ​​​​​​​        \sigma(x,y)=\frac1{n-1}\sum_{i=1}^n(x_i-\overline{x})^2(y_i-\overline{y})^2

 

假设我们只有 a 和 b 两个变量,那么我们将它们按行组成矩阵 X: 

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        X=\left(\begin{array}{cccc}a_1&a_2&\cdots&a_m\\b_1&b_2&\cdots&b_m\end{array}\right)

然后

        ​​​​​​​        \frac{1}{m}XX^\mathsf{T}=\begin{pmatrix}\frac{1}{m}\sum_{i=1}^ma_i^2&\frac{1}{m}\sum_{i=1}^ma_ib_i\\\frac{1}{m}\sum_{i=1}^ma_ib_i&\frac{1}{m}\sum_{i=1}^mb_i^2\end{pmatrix}=\begin{pmatrix}Cov(a,a)&Cov(a,b)\\Cov(b,a)&Cov(b,b)\end{pmatrix}

我们可以看到这个矩阵对角线上的分别是两个变量的方差,而其它元素是 a 和 b 的协方差。两者被统一到了一个矩阵里。

8.1.3特征维度约减

特征约减的目的是将高维特征向量映射到低维子空间中

给定n个样本(每个样本维度为p维)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \{x_1,x_2,\ldots\ldots x_n\} 

通过特征变换/投影矩阵实现特征空间的压缩:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        G\in R^{p\times d}:x\in R^p\to y=G^Tx\in R^d(d<<p)

大多数机器学习算法在高维空间中表现不够鲁棒,查询速度与精度随着维度增加而降低.有价值的维度往往很少

8.2实现——PCA实现噪音过滤

降维的目的之一就是希望抛弃掉对模型带来负面影响的特征,而我们相信,带有效信息的特征的方差应该是远大于噪音的,所以相比噪音,有效的特征所带的信息应该不会在PCA过程中被大量抛弃。
inverse_transform能够在不恢复原始数据的情况下,将降维后的数据返回到原本的高维空间,即是说能够实现”保证维度,但去掉方差很小特征所带的信息“。利用inverse_transform的这个性质,我们能够实现噪音过滤

8.2.1数据集介绍

8.2.2代码实现

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

导入所需要的包 

digits = load_digits()

获取数据集,手动添加噪声点

def plot_digits(data) :
    """
    画手写数字的图
    :param data: data.shape 必须为 (m,64),m表示手写数字图的个数
    """
    fig , axes = plt.subplots(4,10
                               , figsize=(10,4)
                               , subplot_kw={"xticks" : [] , "yticks" : []}
                              )
    for i , ax in enumerate(axes.flat) :
        ax.imshow(data[i].reshape(8,8) , cmap="binary")
    plt.show()

是画出手写数字的图像

x = digits.data
plot_digits(x)

画出未添加噪音的原始数据集

rng = np.random.RandomState(42)	#规定np中的随机模式
#从原数据集digits.data中随机抽取的,符合正态分布的数据集,返回的noisy即为加了噪声后的数据集,第二个参数为方差的大小
noisy = rng.normal(digits.data , 2)
plot_digits(noisy)

从原始数据集 digits.data 中随机抽取符合正态分布的噪声数据集,并调用 plot_digits 函数将加了噪声后的手写数字图像显示出来

pca = PCA(n_components=0.5 , svd_solver="full")
x_new = pca.fit_transform(noisy)	#x_new.shape:(1797,6)原本64个特征,若只需要保留一半的信息量的话,只需要生成6个新特征就好了,就把维度从64降到了6

对带有噪声的手写数字数据进行降维处理,以保留原始数据中一半的信息量。

without_noisy = pca.inverse_transform(x_new)
plot_digits(without_noisy)

将降维后的数据再映射回原始高维特征空间,并且展示了去除噪音后的手写数字图像。

8.2.3运行结果

8.3总结

8.3.1PCA优点

  • 降维效果显著: PCA通过找到数据中方差最大的方向,能够在保留大部分信息的同时实现数据的降维,去除冗余信息,提高了计算效率。
  • 去相关性: PCA通过选择特征值较大的特征向量,实现了数据的去相关性,新的特征之间尽可能地不相关,有助于减少多重共线性对模型的影响。
  • 可解释性: PCA的结果是一组相互正交的主成分,这些主成分能够更好地反映数据的主要结构,具有较好的可解释性。
  • 适用性广泛: PCA不仅可以用于降维,还可以用于特征提取、数据可视化等多个领域,是一种通用的数据分析工具。

8.3.2PCA缺点

  • 线性关系假设: PCA基于线性变换,假设数据是线性相关的。对于非线性关系较强的数据,PCA可能不够有效,需要使用非线性降维方法。
  • 计算复杂度: 在计算协方差矩阵和特征值分解时,PCA的计算复杂度较高,特别是对于大规模数据集。近年来有一些基于随机采样的PCA方法用于加速计算。
  • 特征值分解有局限性,比如变换的矩阵必须是方阵。
  • 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的。
  • 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

8.3.3PCA算法功能

  •         降维:PCA可以将高维数据集降到更低的维度,减少数据存储和处理的开销。
  •         压缩:PCA可以将数据集表示为比原始数据集更紧凑的形式,可以用于数据压缩。
  •         特征提取:PCA可以从原始数据集中提取最重要的特征,这些特征可以用于构建更好的            模型。
  •         去噪:PCA可以帮助我们去除噪声,并且使数据集更具可分性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值