降维是指在保存数据特性的条件下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度。比如在分析有 100 个变量的数据时,与其直接分析数据,不如使用 5 个变量表示数据,如允许以使后续分析比较轻易
1.PCA 的作用:
PCA 是一种用于减少数据中的变量的算法。PCA 可以将相干的多变量数据以主成分简便地表现出来。
减少数据变量的方法有两种:一种是只选择重要的变量,不使用别的变量;另一种是基于原来的变量构造新的变量。PCA 使用的是后一种方法。
PCA 可发现对象数据的方向和重要度。
方向由构成新变量时对象数据变量的权重决定,而重要度与变量的偏差有关
PCA 采用以下步骤来寻找主成分
1.计算协方差矩阵。
协方差是一个衡量两个随机变量同步变革趋势的指标。假如两个变量同时增大大概同时减小(即同步变革),那么它们的协方差就是正的。假如一个变量增大时另一个变量减小,那么它们的协方差就是负的 对于你的数据,协方差矩阵可以资助你理解特性之间的关系。假如两个特性的协方差是正的,那么这两个特性可能有正相干关系。假如协方差是负的,那么这两个特性可能有负相干关系。假如协方差靠近于0,那么这两个特性可能没有(线性)关系。
在每个数据点取雷同值的变量并不重要,但是在每个数据点取不同值的变量能很好地表现数据整体的特点。
2.对协方差矩阵求解特性值题目,求出特性向量和特性值。
特性值题目是指对 n 维方形矩阵 A,寻找使得的 和 的题目。求解协方差矩阵的特性值题目在数学上等同于寻找使方差最大化的正交轴的题目.
分析一下:,左边表示一个矩阵和向量的乘积。
举个例子:
与矩阵相乘后,x1,x2分别变换为 (4, 4) 和 (5,2);
像这个例子一样,矩阵(A)可以变换向量(x1,x2)的巨细和方向.
但是 x1=(1,1)通过矩阵A的变换,并没有改变方向,矩阵A的变换 == x1 *常数4
但有的向量并不能通过这种变换改变方向,如许的向量叫作 矩阵A 的特性向量。这时向量的巨细在该变换下缩放的比例叫作特性值。
在 PCA 中,矩阵 A 就是协方差矩阵。PCA 对协方差矩阵求解特性值题目,并重复计算出特性值和特性向量的几种组合。这时按特性值巨细排序的特性向量分别对应于第一主成分、第二主成分……照此类推。
3.以数据表示各主成分方向。
假如我们使用针对每个主成分计算出的特性值除以特性值的总和,就能够以百分比来表示主成分的重要度,这个比例叫作贡献率,它表示每个主成分对数据的表明本领。从第一主成分开始依次相加,得到的贡献率叫作累计贡献率。
简单来个代码
- from sklearn.decomposition import PCA
- from sklearn.datasets import load_iris
- data = load_iris()
- n_components = 2 # 将减少后的维度设置为2
- model = PCA(n_components=n_components)
- model = model.fit(data.data)
- print(model.transform(data.data)) # 变换后的数据
- [[-2.68420713 0.32660731]
- [-2.71539062 -0.16955685]
- [-2.88981954 -0.13734561]
- ~ 略~
- [ 1.76404594 0.07851919]
- [ 1.90162908 0.11587675]
- [ 1.38966613 -0.28288671]]
复制代码
主成分在各个数据集上的累计贡献率
图中的横轴为主成分,纵轴为累计贡献率
此中 A 为变量之间存在相干性的数据的PCA 效果。这时的累计贡献率分别为 0.36、0.55。。。。。。
而 B 是对变量之间没有相干性的数据进行 PCA的效果,从图中可以看出,各个主成分的贡献率 险些雷同。可以说如许的数据不适合用 PCA 进行降维。
本质上讲,因子相干性比较高的时间,适合用pca降维
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |