主身分分析(Principal Component Analysis,简称PCA)是一种统计方法,它通过正交变换将一组可能相干的变量转换成一组线性不相干的变量,这些不相干变量称为主身分。PCA常用于降维、数据压缩和模式识别等范畴。
PCA的主要目标:
- 降维:减少数据会合的特性数量,同时尽量保存原始数据的变异性。
- 去相干:将原始数据转换为一组不相干的变量,便于后续分析。
PCA的工作原理:
- 尺度化数据:由于PCA受到数据尺度的影响,通常起首对数据进行尺度化处理,确保每个特性的均值为0,尺度差为1。
- 协方差矩阵计算:计算数据的协方差矩阵(对于尺度化数据,协方差矩阵即相干系数矩阵),以确定数据特性之间的相干性。
- 特性值和特性向量计算:计算协方差矩阵的特性值和对应的特性向量。特性值表现了每个主身分的方差贡献,而特性向量则表现了主身分的方向。
- 选择主身分:根据特性值的大小,选择最重要的几个主身分。通常选择累积贡献率到达肯定比例(如95%)的主身分。
- 构造新的空间:使用选定的主身分的特性向量作为基,构造新的空间,将原始数据投影到这个新空间中。
- 转换数据:将原始数据转换到由主身分定义的新坐标系中,实现降维。
PCA的应用场景:
- 图像压缩:在图像处理中,PCA可以用来减少图像数据的维度,同时尽量保存图像的重要信息。
- 语音识别:在语音识别系统中,PCA可以帮助减少特性空间的维度,进步识别效率。
- 金融分析:在金融市场分析中,PCA可以用来识别资产收益的主要驱动因素。
- 生物信息学:在基因表达数据分析中,PCA可以帮助识别数据中的主要变异模式。
注意事项:
- PCA假设主身分的分布是正态分布,如果数据不满意这一假设,可能必要其他方法。
- PCA对噪声敏感,如果数据中包含噪声,可能会影响主身分的提取。
- 选择保存的主身分数量是一个必要思量的问题,过多的主身分可能导致过拟合,过少则可能丢失重要信息。
实当代码
- # 导入matplotlib的pyplot模块,用于数据可视化
- import matplotlib.pyplot as plt
- # 从sklearn库中导入PCA算法,用于数据降维
- from sklearn.decomposition import PCA
- # 从sklearn.datasets模块导入iris数据集
- from sklearn.datasets import load_iris
- # 加载iris数据集,并将特征数据和标签分别赋值给x和y
- data = load_iris()
- y = data.target # 标签数据,表示不同种类的鸢尾花
- x = data.data # 特征数据,包含鸢尾花的测量数据
复制代码
- # 初始化PCA对象,设置降维后保留的主成分数目为2
- pca = PCA(n_components=2)
- # 使用PCA算法对原始数据x进行降维处理,并将降维后的数据存储在reduced_x中
- reduced_x = pca.fit_transform(x)
- # 初始化三个列表,用于存储不同类别数据在降维后的坐标
- red_x, red_y = [], [] # 用于存储类别0的数据
- blue_x, blue_y = [], [] # 用于存储类别1的数据
- green_x, green_y = [], [] # 用于存储类别2的数据
- # 遍历降维后的数据,根据标签y的值,将数据分配到对应的列表中
- for i in range(len(reduced_x)):
- if y[i] == 0: # 如果标签为0
- red_x.append(reduced_x[i][0]) # 将第一个主成分的值添加到red_x
- red_y.append(reduced_x[i][1]) # 将第二个主成分的值添加到red_y
- elif y[i] == 1: # 如果标签为1
- blue_x.append(reduced_x[i][0]) # 将第一个主成分的值添加到blue_x
- blue_y.append(reduced_x[i][1]) # 将第二个主成分的值添加到blue_y
- else: # 标签为2的情况
- green_x.append(reduced_x[i][0]) # 将第一个主成分的值添加到green_x
- green_y.append(reduced_x[i][1]) # 将第二个主成分的值添加到green_y
- # 使用matplotlib的scatter函数绘制散点图,可视化降维后的数据
- # 不同类别的数据使用不同的颜色和标记进行区分
- plt.scatter(red_x, red_y, c='r', marker='x') # 类别0的数据用红色'x'标记
- plt.scatter(blue_x, blue_y, c='b', marker='D') # 类别1的数据用蓝色'D'标记
- plt.scatter(green_x, green_y, c='g', marker='.') # 类别2的数据用绿色'.'标记
- # 显示图表
- plt.show()
复制代码 以上代码展示了怎样使用主身分分析(PCA)对数据进行降维,并使用matplotlib库进行数据可视化。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |