大家好,欢迎来到IT知识分享网。
目录
1.4.1主成分分析(PrincipalComponentAnalysis,PCA)
1.4.3独立成分分析(Independent Component Analysis, ICA)
一、算法概述
1.1什么是降维
降维的概念:
①降维(Dimensionality Reduction,DR)是指采用线性或者非线性的映射方法将高维空间的样本映射到低维空间中。
②降维获得低维空间的数据等价表示,实现高维数据的可视化呈现。
1.2为什么要降维
降维的作用:
②通过降维可以寻找数据内部的本质结构特征。
③降维可以得到原始数据的简化表示以加速后续处理或者改进输出结果,即降维可以得到原始数据的简化表示以加速后续处理或者改进输出结果,因此它已经成为很多算法数据进行预处理的重要手段。
1.3降维实现原理
在降维过程中,会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响。同时,在高维数据中,必然有一些特征是不带有效的信息的(比如噪音),或者有一些特征带有的信息和其他一些特征是重复的(比如一些特征可能会线性相关)。
我们希望能够找出一种办法来帮助我们衡量特征上所带的信息量,让我们在降维的过程中,能够既减少特征的数量,又保留大部分有效信息——将那些带有重复信息的特征合并,并删除那些带无效信息的特征等等——逐渐创造出能够代表原特征矩阵大部分信息的,特征更少的,新特征矩阵。
1.4降维的方法
1.4.1主成分分析(PrincipalComponentAnalysis,PCA)
1.4.2因子分析(Factor Analysis)
因子分析是一种统计方法,用于揭示观察变量之间的潜在结构或模式。其基本思想是,观察变量可以通过较少数量的未观察的变量,称为因子,来解释或表示。这些因子是隐含在观察变量背后的共性因素,能够帮助理解数据中的相关性和变量之间的复杂关系。
1.4.3独立成分分析(Independent Component Analysis, ICA)
独立成分分析是一种信号处理和统计方法,旨在从多个随机变量的混合中分离出独立的非高斯信号成分。其核心思想是,将混合信号分解为几个相互独立的信号源,这些信号源具有最大的互信息(相互信息量)。
二、主成分分析法(PCA)
2.1主成分分析(PCA)基本思路
-通过协方差分析,建立高维空间到低维空间的线性映射/矩阵
-保留尽可能多的样本信息
-压缩后的数据对分类、聚类尽量不产生影响,甚至有所提升
2.2PCA算法的实现步骤
2.3协方差矩阵
方差描述一个数据的离散程度:
协方差描述两个数据的相关性,接近1就是正相关,接近-1就是负相关,接近0就是不相关。
二维的例子:
三维的例子:
协方差矩阵
n个特征,m个样本。n行m列:
n行m列乘m行n列->n行n列:
通过数据集的协方差矩阵及其特征值分析,我们可以得到协方差矩阵的特征向量和特征值,我们需要保留k个维度的特征就选取最大的k个特征值。
四、算法应用
4.1人脸识别降维
1.查看原图
from sklearn.datasets import fetch_lfw_people # 导入fetch_lfw_people数据集模块 from sklearn.decomposition import PCA # 导入PCA(主成分分析)模块 import matplotlib.pyplot as plt # 导入绘图模块 import numpy as np # 导入numpy库 # 使用fetch_lfw_people函数加载数据集,要求每个人至少有60张图片 # faces = fetch_lfw_people(min_faces_per_person=60) # print(faces.data.shape) faces = fetch_lfw_people(data_home="D:\\Download\\", download_if_missing=False, min_faces_per_person=60) # 从本地目录加载数据集 X = faces.data # 获取图像数据 # print(faces.data.shape) # 输出(1348,2914),表示共有1348张图像,每张图像有2914个特征 # print(faces.images.shape) # 输出(1348, 62, 47),表示共有1348张图像,每张图像的尺寸为62x47 # 创建子图,3行8列,设置图像大小和不显示坐标轴 fig, axes = plt.subplots(3, 8, figsize=(8, 4), subplot_kw={"xticks": [], "yticks": []}) # 对axes对象进行处理 for i, ax in enumerate(axes.flat): # 遍历展平后的axes对象 ax.imshow(faces.images[i, :, :], cmap="gray") # 在当前子图上显示灰度图像 plt.show() # 显示图形
2.进行降维后的图像
pca = PCA(150).fit(X) # 使用PCA对数据集X进行拟合,保留150个主成分 V = pca.components_ # 获取PCA模型的主成分(特征向量) V.shape # 输出主成分矩阵的形状,应为(150, 2914),表示150个主成分每个有2914个特征 # 创建子图,3行8列,设置图像大小和不显示坐标轴 fig, axes = plt.subplots(3, 8, figsize=(8, 4), subplot_kw={"xticks": [], "yticks": []}) # 在子图上显示每个主成分(特征向量) for i, ax in enumerate(axes.flat): ax.imshow(V[i, :].reshape(62, 47), cmap="gray") # 将展平的主成分重塑为62x47的图像并显示灰度图 plt.show() # 显示图形
使用PCA对人脸数据集进行降维处理,并展示了前150个主成分(特征向量)的灰度图像。
3.逆变换还原图像
from sklearn.datasets import fetch_lfw_people from sklearn.decomposition import PCA import matplotlib.pyplot as plt faces = fetch_lfw_people(data_home="D:\\Download\\", download_if_missing=False, min_faces_per_person=60) X = faces.data pca = PCA(n_components=150) # 使用PCA进行降维,保留150个主成分 X_dr = pca.fit_transform(X) # 对数据进行拟合和降维 X_inverse = pca.inverse_transform(X_dr) # 对降维后的数据进行逆变换,恢复原始维度 # 创建子图,2行10列,设置图像大小和不显示坐标轴 fig, ax = plt.subplots(2, 10, figsize=(10, 2.5), subplot_kw={"xticks": [], "yticks": []}) # 在子图中显示原始图像和逆变换后的图像 for i in range(10): ax[0, i].imshow(faces.images[i, :, :], cmap="binary_r") # 显示原始图像 ax[1, i].imshow(X_inverse[i].reshape(62, 47), cmap="binary_r") # 显示逆变换后的图像 plt.tight_layout() # 调整子图布局,使其更紧凑 plt.show() # 显示图形

可以明显看出,这两组数据可视化后,由降维后再通过inverse_transform转换回原维度的数据画出的图像和原数据画的图像大致相似,但原数据的图像明显更加清晰。这说明inverse_transform并没有实现数据的完全逆转。这是因为,在降维的时候,部分信息已经被舍弃了,X_dr中往往不会包含原数据100%的信息,所以在逆转的时候,即便维度升高,原数据中已经被舍弃的信息也不可能再回来了。所以,降维不是完全可逆的。Inverse_transform的功能,是基于X_dr中的数据进行升维,将数据重新映射到原数据所在的特征空间中,而并非恢复所有原有的数据。但同时,我们也可以看出,降维到300以后的数据,的确保留了原数据的大部分信息,所以图像看起来,才会和原数据高度相似,只是稍稍模糊罢了。
五、总结
5.1PCA算法的优点
5.2PCA算法的缺点
5.3PCA的应用:
5.4PCA的局限性:
-线性假设: PCA基于线性变换,可能无法很好地处理非线性关系
-敏感性: 对异常值敏感,可能受到极端值的影响。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117351.html


