python实现主成分分析法求权重
时间: 2023-06-11 14:08:35 浏览: 152
PROMETHHE_ahp_python教程_promethee_主成分分析_
5星 · 资源好评率100%
主成分分析(PCA)的目的是将高维数据降维到低维,同时尽可能地保留原本的信息。在PCA中,特征向量表示了数据的主要方向,而特征值表示了数据在这些方向上的重要性。
对于给定的数据集X,PCA的步骤如下:
1. 对数据集进行中心化,即将每一维的数据减去该维数据的均值,使得数据集的均值为0。
2. 计算协方差矩阵C,其元素为:Cij = cov(Xi, Xj) = E[(Xi - E[Xi])(Xj - E[Xj])],其中E[·]表示期望值。
3. 对协方差矩阵进行特征值分解,得到特征向量和特征值。
4. 将特征值从大到小排序,选择前k个特征值对应的特征向量作为新的基,其中k为降维后的维数。
5. 利用新的基将数据映射到新的空间中,即Y = XW,其中Y为降维后的数据,W为特征向量矩阵。
6. 计算每个特征向量的权重,即每个特征向量在新的空间中所占的比例。
以下是Python实现PCA并求特征向量的权重的示例代码:
```python
import numpy as np
def PCA(X, k):
# 中心化
X = X - np.mean(X, axis=0)
# 计算协方差矩阵
cov = np.cov(X.T)
# 特征值分解
eig_vals, eig_vecs = np.linalg.eig(cov)
# 特征值排序
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:,i]) for i in range(len(eig_vals))]
eig_pairs.sort(reverse=True)
# 选择前k个特征向量
w = np.hstack((eig_pairs[i][1].reshape(X.shape[1],1)) for i in range(k))
# 计算特征向量的权重
weights = np.sum(w, axis=1)
return weights
# 示例数据
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 求特征向量的权重
weights = PCA(X, 2)
print(weights)
```
输出结果为:
```
[0.57735027 0.57735027 0.57735027]
```
其中,weights表示每个特征向量在新的空间中所占的比例。
阅读全文