【机器学习】第十三章 主成分分析PCA

目录

13.1 前言

13.2 PCA的基本介绍

13.2.1 基本原理:

13.2.2 PCA的算法流程:

13.2.3 目标:

13.2.4 两种思想优化:

13.2.5 优点和缺点:

13.2.6 应用场景:

13.3 python实现PCA降维

13.4 实例(python代码实现)

问题:

实现思想:

完整代码:

运行结果及其解释:

13.4 总结


13.1 前言

PCA,即主成分分析法,主要用于对数据的降维,可以通过线性变换将原始数据投影到新的坐标系上实现降维,使其数据更加便于理解,其中这些新的坐标轴称为主成分,按照其对应的方差大小依次排列,第一主成分对应方差最大,第二主成分对应方差次大,以此类推。

什么是降维?

降维是指通过保留一些重要特征并去除冗余特征,减少数据特征的维度的过程

为什么要进行PCA降维处理?
(1)高维数据增加了运算难度,故可以降低许多算法的计算开销
(2)高维数据使得算法的泛化能力变弱,故可以提高泛化能力
(3)可以增加数据的可读性,使得数据集更加便于使用
(4)去除噪声

13.2 PCA的基本介绍

13.2.1 基本原理:

它通过线性变换将原始的高维数据投影到为低维空间中,并且要使得投影后的数据方差最大 (如下图,投影到M比投影到N好 )

13.2.2 PCA的算法流程:

包括以下步骤:
(1)对数据进行去中心化处理,使得坐标轴位于数据中心


(2)计算数据集的均值\bar{x}
(3)计算协方差矩阵S=\frac{1}{n}\sum_{i=1}^{n}(x_{i}-\bar{x})(x_{i}-\bar{x})^{T},反映了特征之间的关联程度,是PCA的基础
(4)计算协方差的特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量,即特征向量表示了数据变换后的新坐标轴方向,而特征值则表示了在这个方向上的方差大小
(5)将特征值按照从大到小的顺序排序,选取最大的k个
(6)将样本点投影到选取的特征向量上,得到降维后的数据

13.2.3 目标:

确保降维后的数据所损失的信息量应该尽可能的少,并且压缩后的数据要尽可能的对分类,聚类不产生影响

13.2.4 两种思想优化:

最近重构性

       样本投影到低维超平面的距离要尽可能的小

最大可分性:

       样本投影到低维空间后要尽可能的分开

13.2.5 优点和缺点:

优点:
(1)降维效果显著:PCA能够有效地降低数据维度,同时保留数据集中的大部分有用信息
(2)数据可视化:将数据降至更低维度,可以帮助更好的理解数据
(3)去除噪声:PCA可以去除数据中的随机噪声
(4)无监督学习:PCA是一种无监督学习算法,不需要类别标签
缺点:
(1)需要线性假设:PCA需要对数据进行假设是线性的,故对于非线性的数据,PCA可能无法有效地提取特征
(2)对样本数量敏感性:如果样本数量远小于特征数量,PCA的性能可能会受到影响
(3)损失重要信息:有的时候并不一定需要进行降维处理,故降维处理可能会损失一些有用的信息

13.2.6 应用场景:

(1)图像处理:用于人脸识别、图像压缩等任务,即通过PCA对图像数据进行降维处理,将关键特征提取出来
(2)文本分析:即通过PCA对文本特征向量进行降维,高维文本数据变得可视化

13.3 python实现PCA降维

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

rng = np.random.RandomState(1)
X = np.dot(rng.rand(2, 2), rng.randn(2, 200)).T
plt.scatter(X[:, 0], X[:, 1])
plt.axis('equal')

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
print(pca.components_)
print(pca.explained_variance_)

def draw_vector(v0, v1, ax=None):
    ax = ax or plt.gca()
    arrowprops=dict(arrowstyle='->',
                    linewidth=2,
                    shrinkA=0, shrinkB=0)
    ax.annotate('', v1, v0, arrowprops=arrowprops)

# plot data
plt.scatter(X[:, 0], X[:, 1], alpha=0.3)
for length, vector in zip(pca.explained_variance_, pca.components_):
    v = vector * 3 * np.sqrt(length)
    draw_vector(pca.mean_, pca.mean_ + v)
plt.axis('equal')

plt.show()

运行结果及其分析:

解释:

(1)矩阵[[ 0.94446029 0.32862557] [-0.32862557 0.94446029]]表示PCA降维后的两个主成分向量,这两个向量分别对应于数据中的最大方差方向,即第一个主成分向量为[0.94446029, 0.32862557],第二个主成分向量为[-0.32862557, 0.94446029]
(2)[0.7625315, 0.0184779]表示第一个主成分解释了约76.25%的方差,第二个主成分解释了约1.84%的方差,即第一个主成分占比更重要

解释:即上图表示使用PCA对二维数据进行降维,绘制了原始数据的散点图,并在图上绘制了主成分向量。其中散点图展示了原始数据在PCA降维后的两个主成分上的分布,箭头表示主成分向量,描述了数据中的最大方差方向

13.4 实例(python代码实现)

问题:

       对sklearn库中的鸢尾花数据集(Iris dataset)进行PCA降维处理

实现思想:

       使用PCA对鸢尾花数据集进行降维,并将降维前后的数据进行可视化展示,详细如下:

(1)导入所需的库和模块

(2)加载鸢尾花数据集,并且将特征数据存储在变量X中,将标签数据存储在变量y中

(3)使用matplotlib.pyplot绘制原始数据的散点图,根据鸢尾花的种类(0、1、2)分别用不同的颜色表示,并添加图例和标题

(4)创建一个PCA对象,并且设置降维后的维度为2

(5)使用PCA对象的fit_transform方法对原始数据进行降维,将降维后的数据存储在变量X_reduced中,然后使用matplotlib.pyplot绘制降维后数据的散点图,同样根据鸢尾花的种类分别用不同的颜色表示,并添加图例和标题

完整代码:

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 可视化原始数据
plt.figure()
colors = ['pink', 'orange', 'purple']
lw = 3

for color, i, target_name in zip(colors, [0, 1, 2], iris.target_names):
    plt.scatter(X[y == i, 0], X[y == i, 1], color=color, alpha=.8, lw=lw, label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('Original IRIS dataset')

# 使用PCA降维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)

# 可视化降维后的数据
plt.figure()
colors = ['pink', 'orange', 'purple']
lw = 3

for color, i, target_name in zip(colors, [0, 1, 2], iris.target_names):
    plt.scatter(X_reduced[y == i, 0], X_reduced[y == i, 1], color=color, alpha=.8, lw=lw, label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('PCA of IRIS dataset')

plt.show()

运行结果及其解释:

解释:上述散点图显示的是原始的鸢尾花数据集,其中x轴和y轴分别代表数据集中的两个特征,点都代表数据样本,不同的颜色代表不同的鸢尾花种类。从图中可以看出,原始数据集中的不同种类的鸢尾花在这两个特征上有一定的区分度,但存在一些重叠

解释:上述散点图显示的是进行主成分分析(PCA)降维处理后的鸢尾花数据集,其中x轴和y轴分别代表经过PCA处理后的两个主成分,与前面一张图相比,降维后的数据在这两个主成分上呈现出更好的区分度,不同种类的鸢尾花被更清晰地分开,体现了PCA降维处理之后的效果

13.4 总结

       通过本次博客,我对主成分分析(PCA)有了更深的理解,知道了如何使用PCA对数据样本进行降维处理,降维技术使得数据变得加易于理解和使用,并且它们往往能够去除数据中的噪声,使得其他机器学习任务更加精确,故可以使用其进行数据的预处理。另一方面,PCA在对于非线性数据的处理上存在一定的局限性,降维效果不太好,并且且在处理大规模数据集时可能会遇到内存不足的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值