目录
PCA主成分分析介绍
PCA主成分分析概念
主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习算法,用于降维和数据可视化。其目标是通过线性变换将高维数据集投影到低维空间中,同时尽可能保留原始数据的信息。
PCA的基本思想是找到数据中的主要成分或特征,即那些能够解释数据方差最大部分的特征。这些主成分是数据中协方差最大的方向,也就是数据变化最大的方向。通过计算数据的协方差矩阵,可以得到一组正交的特征向量,它们称为主成分。这些主成分按照其对数据方差解释的贡献程度进行排序。
在降维过程中,可以选择保留前几个主成分,将数据投影到这些主成分构成的子空间中。这样做可以减少数据的维度,同时尽量保留原始数据的信息。降维后的数据在可视化、特征选取、数据压缩等方面有广泛应用。
总而言之,通过PCA,可以发现数据中的隐藏模式、相关性或异常值,进而用于数据预处理、特征工程和可视化等任务。
PCA主成分分析的优缺点与应用场景
优点:
-
数据降维:PCA可以将高维数据降低到较低的维度,减少数据集的复杂性和存储空间。
-
特征提取:PCA通过提取最相关的特征,能够保留数据的主要信息,过滤掉噪声和冗余信息。
-
无监督学习:PCA是一种无监督学习方法,不需要预先标记的训练样本,适用于大多数数据集。
-
数据可视化:PCA可以将高维数据投影到二维或三维空间,方便可视化观察数据的分布和结构。
-
处理相关性:PCA能够找到数据中的相关性,将相关特征合并为新的维度,简化数据分析过程。
缺点:
-
对异常值敏感:PCA对异常值比较敏感,可能会影响结果的准确性。
-
数据线性关系:PCA假设数据呈线性关系,不适用于非线性数据集。
-
解释性差:PCA得到的主成分是原始特征的线性组合,可解释性相对较差。
应用场景:
-
数据压缩和降维:通过PCA可以减少数据的维度,提高计算效率,并在不显著降低信息质量的情况下进行数据压缩。
-
特征选择和特征工程:PCA可以用于选择最具代表性的特征,并去除冗余信息,为后续机器学习任务提供更好的输入。
-
数据可视化:通过PCA将高维数据投影到二维或三维空间,可以帮助人们更直观地理解数据的分布、聚类等特征。
-
数据预处理:PCA可以用于数据预处理,例如去除噪声、标准化数据、处理缺失值等。
PCA主成分分析相关知识
特征维度约减(降维)
特征维度约减是PCA主成分分析中的一个核心目标,即将原始数据的维度从高维度降低到低维度。通过特征维度约减,可以消除或减少数据中的冗余信息,提取出最具代表性的特征,从而简化数据的表示和处理。
为什么要进行特征维度约减
1.大多数机器学习算法在高维空间中表现不够鲁棒
如:查询速度与精度随着维度增加而降低 .
2.有价值的维度往往很少
如:在基因序列中对于特定疾病有价值的点位十分有限
3.可视化 : 高位数据在 2D 或 3D 空间中的可视化
4.维度约减 : 高效的存储与检索
5.噪声消除 : 提升分类或识别精度
维度约减的方法
介绍:
无监督学习是指在没有标签信息的情况下,从数据中学习数据的内在结构、模式和关系的机器学习方法。常用的无监督学习算法包括聚类、降维、密度估计等。聚类算法将数据分成若干组,每一组内部的数据相似度高,组与组之间的相似度低;降维算法则将高维数据映射到低维空间中,以便于数据的可视化和处理;密度估计算法则根据数据的分布情况,估计出数据的概率密度函数。
监督学习是指在已知标签信息的情况下,从数据中学习一个预测模型,用于对新数据进行分类或回归。常用的监督学习算法包括分类和回归。分类算法通过学习样本的特征和类别标签之间的关系,建立一个分类模型,用于对新样本进行分类;回归算法则通过学习样本的特征和目标值之间的关系,建立一个回归模型,用于对新样本的目标值进行预测。
半监督学习是介于监督学习和无监督学习之间的一种学习方式,它利用大量未标记的数据和少量有标记的数据,提高模型的泛化能力。在半监督学习中,我们通常使用无监督学习算法来学习数据的内部结构,从而产生更好的特征表示;然后,使用有标记的数据来训练监督学习模型,以便提高模型的精度。
主成分分析(PCA)
• 主成分分析 (PCA) 基本思路
1.通过协方差分析,建立 高维空间到低维空间的线性映射 / 矩阵
2.保留尽可能多的样本信息
3.压缩后的数据对分类、聚类尽量不产生影响,甚至有所提升
• 将原始高维向量通过投影矩阵,投射到低维空间
– 这些向量称为 主成分 (PCs), 具有无关性、正交的特点。重要的是这些向量的数量要远小于高维空间的维度。
PCA算法流程:
PCA主成分分析代码实现:
import numpy as np
import matplotlib.pyplot as plt
# 生成随机二维数据集
X = np.random.rand(100, 2)
# 中心化处理
X_centered = X - np.mean(X, axis=0)
# 归一化处理
X_normalized = X_centered / np.std(X_centered, axis=0)
# 计算协方差矩阵
cov_matrix = np.cov(X_normalized.T)
# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
# 按特征值从大到小排序
sorted_indices = np.argsort(eigenvalues)[::-1]
sorted_eigenvalues = eigenvalues[sorted_indices]
sorted_eigenvectors = eigenvectors[:, sorted_indices]
# 选择前k个主成分
k = 2
selected_eigenvectors = sorted_eigenvectors[:, :k]
# 降维投影
X_reduced = X_normalized.dot(selected_eigenvectors)
# 绘制降维后的数据
plt.scatter(X_reduced[:, 0], X_reduced[:, 1])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA')
plt.show()
运行结果:
可以看到,结果能够正确地绘制降维后的数据的散点图,并显示两个主成分。
当我们将k,设置为1时
即:
# 选择前k个主成分
k = 1
selected_eigenvectors = sorted_eigenvectors[:, :k]
运行结果:
够看到一条直线的降维结果。对于其他任意维数的数据集,降维后也将是一条直线。
总结:
通过PCA,可以发现数据中的隐藏模式、相关性或异常值,进而用于数据预处理、特征工程和可视化等任务。总之,PCA是一种常用且有效的降维和特征提取技术,广泛应用于数据分析、机器学习和模式识别等领域。
PCA是一种有效的数据降维方法,可以在减少特征数量的同时保留数据的重要信息。通过实验和分析降维后的数据,可以更好地理解数据并找到更合适的特征表示方式