主成分分析法确定权重

本文介绍了如何利用Python实现主成分分析法来确定权重。首先概述了主成分分析法的基本原理,接着讲解了数据归一化的必要性和方法。然后通过PCA降维分析,确定影响权重的主要因素。最后,讨论了权重的归一化处理,以及如何获取相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在数模中,确定权重方法有很多种,比如主成分分析法、层次分析法、熵权法、相关系数作为权重等。
网上很多教程都是用spss计算权重,这里主要讲利用python通过主成分分析法确定权重。

主成分分析法概述

主成分分析法是一种线性的降维算法,通过将N维特征进行正交变换,得到相互独立的k维(k<N)数据,通过分析得出“主成分”,利用“主成分”确定影响权重。

数据归一化

为了消除不同变量的量纲的影响,在对数据进行主成分分析前,首先要对数据进行标准化,之所以要对数据进行标准化。
涉及m个样本,n个指标,第j个样本的第i个指标值为,将各个归一化值按如下公式进行归一化为:
在这里插入图片描述

from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
data = mms.fit_transform(data)
pca降维
from sklearn.decomposition import PCA
from sklearn import preprocessing
pca = PCA()
pca.fit(data)

先大致看一下各主成分的累计贡献值,确定k个主成分

pca.components_ #模型的各个特征向量 也叫成分矩阵
pca.explained_variance_  # 贡献方差,即特征根
pca.explained_variance_ratio_ #各个成分各自的方差百分比(贡献率)
pca = PCA(5) #确定5个主成分
pca.fit(data)
low_d = pca.transform(data)# low_d降维后的结果
确定权重
# 求指标在不同主成分线性组合中的系数
k1_spss = pca.components_ / np.sqrt(pca.explained_variance_.reshape(-1, 1))  #成分得分系数矩阵
j = 0
Weights = []
for j in range(len(k1_spss)):
    for i in range(len(pca.explained_variance_)):
        Weights_coefficient = np.sum(100 * (pca.explained_variance_ratio_[i]) * (k1_spss[i][j])) / np.sum(
            pca.explained_variance_ratio_)
    j = j + 1
    Weights.append(np.float(Weights_coefficient))
print('Weights',Weights)

#Weights [11.55267610875436, 22.403803988479392, 13.391066309212121, -2.3723300938403176, -0.5180775289478192]
权重归一化
Weights=pd.DataFrame(Weights)
Weights1 = preprocessing.MinMaxScaler().fit(Weights)
Weights2 = Weights1.transform(Weights)
print('Weights2',Weights2)

'''
Weights2 [[0.56203305]
 [1.        ]
 [0.63623309]
 [0.        ]
 [0.07484027]]
 '''

关注茶谈大数据回复【主成分代码】获取完整的代码
在这里插入图片描述

### Python 实现主成分分析法 (PCA) 来确定权重 以下是基于 PCA 方法计算变量权重的一个完整代码示例。该方法的核心在于利用特征值及其对应的贡献率来衡量各个原始变量的重要性。 #### 数据预处理 为了确保 PCA 结果的有效性,通常需要对数据进行标准化处理。这一步可以通过 `StandardScaler` 完成[^3]。 ```python import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA # 假设 X 是输入的 n×m 维数据矩阵,n 表示样本数量,m 表示特征数量 X = np.random.rand(100, 5) # 示例随机生成的数据 # 标准化数据 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 进行 PCA 分析 pca = PCA() pca.fit(X_scaled) ``` #### 特征值与特征向量 PCA 的核心是通过协方差矩阵分解得到特征值和特征向量。这些特征值反映了各主成分所占的信息比例[^4]。 ```python eigenvalues = pca.explained_variance_ # 获取特征值 eigenvectors = pca.components_ # 获取特征向量 print(f"Eigenvalues: {eigenvalues}") print(f"Eigenvectors:\n{eigenvectors}") ``` #### 贡献率与累积贡献率 每个主成分的贡献率由其对应的特征值决定。通过计算累积贡献率可以选择合适的主成分数目[^3]。 ```python variance_ratio = pca.explained_variance_ratio_ cumulative_variance_ratio = np.cumsum(variance_ratio) print(f"Variance Ratio: {variance_ratio}") print(f"Cumulative Variance Ratio: {cumulative_variance_ratio}") # 找到满足累计贡献率达到某个阈值(如95%)所需的主成分个数 num_components = np.argmax(cumulative_variance_ratio >= 0.95) + 1 print(f"Number of components to retain 95% variance: {num_components}") ``` #### 确定权重 在实际应用中,可以将第一个主成分作为主要信息来源,并根据其对应的特征向量分配权重给原变量[^5]。 ```python first_component_weights = abs(eigenvectors[0]) / sum(abs(eigenvectors[0])) print(f"Weights based on the first principal component: {first_component_weights}") ``` 以上代码展示了如何使用 PCA 提取主成分并进一步推导出变量权重的过程。需要注意的是,在某些场景下可能还需要考虑其他因素调整最终结果。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶冻茶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值