背景参考:
1、提取主成分
- 对样本进行PCA分析,查看不同变量贡献率,确定主要的指标。
我们可以通过下列代码获取需要的所有数据:
import numpy as np
from sklearn.decomposition import PCA
# 创建一个数据
np.random.seed(0)
data = np.random.random((100,5))
y = np.random.randint(0,6,100)
# 进行pca
pca = PCA()
x_new = pca.fit_transform(data)
# 获取每个特征对于每个主成分的贡献率
explained_variance_ratio = pca.explained_variance_ratio_
print("排序的贡献率:",explained_variance_ratio)
# 获取每个特征对于每个主成分的特征值(排序了的)
explained_variance = pca.explained_variance_
print("排序的特征值:",explained_variance)
# 获取每个特征对于每个主成分的特征值(未排序的)
cov_matrix = np.cov(data.T) # 计算协方差矩阵
eigen_values, eigen_vectors = np.linalg.eig(cov_matrix) # 计算特征值和特征向量
print("未排序的特征值:",eigen_values)
# 获取载荷系数,即特征向量
components = pca.components_
print("排序的载荷系数,即特征向量:\n",components) # 行代表主成分,即第一行为第一主成分
我们获得输出如下:
排序的贡献率: [0.2679184 0.22563357 0.20109877 0.16265843 0.14269083]
排序的特征值: [0.11390347 0.09592639 0.08549561 0.06915299 0.06066392]
未排序的特征值: [0.11390347 0.09592639 0.08549561 0.06066392 0.06915299]
排序的载荷系数,即特征向量:
[[ 0.2792074 0.32459124 0.54648931 0.5063108 0.51154917]
[ 0.38799128 -0.41011012 0.47386964 -0.6498715 0.18543747]
[-0.48817892 0.14380819 -0.23333252 -0.33626022 0.75728829]
[-0.11980573 -0.83842108 -0.10090177 0.45633566 0.25352175]
[-0.72030127 -0.05309911 0.64200605 -0.00179817 -0.25723834]]
2、计算各个变量的权重系数
- 从上述结果中我们可以看出,前4个主成分的贡献率达到了85.73%,因此我们可以说所有指标基本可以由前四个主成分对应的指标代替(通过未排序的特征值确定是那几个指标)。
- 随后我们计算这四个主成分的线性组合公式。计算这四个主成分的线性组合公式,我们需要计算他们的系数。
-
确定主成分在各线性组合中的系数。
在之前,我们先假设这5个变量分别是:a1、a2、a3、a4、a5。他们的系数分别是: λ 1 \lambda _{1} λ1、 λ 2 \lambda _{2} λ2、 λ 3 \lambda _{3} λ3、 λ 4 \lambda _{4} λ4、 λ 5 \lambda _{5} λ5。
公式: 系数 = 载荷系数 / 对应主成分的特征值的开方
即: λ i = L i j V i ,其中: L i j 代表第 i 个主成分中第 j 个载荷的数值, V i 代表第 i 个主成分的特征值。 \lambda _{i}= \frac{L_{ij}}{\sqrt{V_{i}}} , 其中:L_{ij}代表第i个主成分中第j个载荷的数值,V_{i}代表第i个主成分的特征值。 λi=ViLij,其中:Lij代表第i个主成分中第j个载荷的数值,Vi代表第i个主成分的特征值。
例如第一主成分的线性组合公式:
λ 1 = 0.2792074 0.11390347 = 0.82729 \lambda _{1}=\frac{0.2792074}{\sqrt{0.11390347}} = 0.82729 λ1=0.113903470.2792074=0.82729
λ 2 = 0.32459124 0.11390347 = 0.96176 \lambda _{2}=\frac{0.32459124}{\sqrt{0.11390347}} = 0.96176 λ2=0.113903470.32459124=0.96176
λ 3 = 0.54648931 0.11390347 = 1.61924 \lambda _{3}=\frac{0.54648931}{\sqrt{0.11390347}} = 1.61924 λ3=0.113903470.54648931=1.61924
λ 4 = 0.5063108 0.11390347 = 1.50019 \lambda _{4}=\frac{0.5063108}{\sqrt{0.11390347}} = 1.50019 λ4=0.113903470.5063108=1.50019
λ 5 = 0.51154917 0.11390347 = 1.51572 \lambda _{5}=\frac{0.51154917}{\sqrt{0.11390347}} = 1.51572 λ5=
-