欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【数学建模】熵权法和主成分分析的结合

【数学建模】熵权法和主成分分析的结合

2025/3/26 7:05:00 来源:https://blog.csdn.net/weixin_43764974/article/details/140748011  浏览:    关键词:【数学建模】熵权法和主成分分析的结合

文章目录

      • 熵权法
      • 主成分分析
      • 熵权法和主成分分析的结合
      • 示例代码
      • 代码解释

熵权法(Entropy Weight Method, EWM)和主成分分析(Principal Component Analysis, PCA)是两种常用的数据处理和分析方法。

熵权法用于确定指标的权重,而主成分分析用于降维和提取主要特征。

一文读懂 主成分分析 与 因子分析

熵权法

熵权法是一种客观赋权方法,通过计算各指标的熵值,来确定各指标的重要性。熵值越小,说明该指标的信息量越大,权重也越大。

步骤:

  1. 标准化处理

    • 将原始数据进行标准化处理,使得数据值在0到1之间。

    z i j = x i j − min ⁡ ( x j ) max ⁡ ( x j ) − min ⁡ ( x j ) z_{ij} = \frac{x_{ij} - \min(x_j)}{\max(x_j) - \min(x_j)} zij=max(xj)min(xj)xijmin(xj)

    其中, x i j x_{ij} xij是原始数据, z i j z_{ij} zij是标准化后的数据。

  2. 计算熵值

    • 计算每个指标的熵值。

    e j = − 1 ln ⁡ ( n ) ∑ i = 1 n p i j ln ⁡ ( p i j ) e_j = -\frac{1}{\ln(n)} \sum_{i=1}^{n} p_{ij} \ln(p_{ij}) ej=ln(n)1i=1npijln(pij)

    其中, p i j = z i j ∑ i = 1 n z i j p_{ij} = \frac{z_{ij}}{\sum_{i=1}^{n} z_{ij}} pij=i=1nzijzij是标准化数据的比例。

  3. 计算权重

    • 根据熵值计算每个指标的权重。

    w j = 1 − e j ∑ j = 1 m ( 1 − e j ) w_j = \frac{1 - e_j}{\sum_{j=1}^{m} (1 - e_j)} wj=j=1m(1ej)1ej

    其中, w j w_j wj是指标的权重。

主成分分析

主成分分析是一种降维技术,通过线性变换将原始数据转化为一组新的不相关变量(主成分),这些主成分能够解释原始数据的主要变异。

步骤:

  1. 标准化处理

    • 将原始数据进行标准化处理,使得每个指标的均值为0,方差为1。
  2. 计算协方差矩阵

    • 计算标准化数据的协方差矩阵。
  3. 特征值分解

    • 对协方差矩阵进行特征值分解,得到特征值和特征向量。
  4. 计算主成分

    • 根据特征向量和标准化数据计算主成分。

熵权法和主成分分析的结合

结合熵权法和主成分分析,可以先用熵权法计算各指标的权重,再用主成分分析进行降维,提取主要特征。

示例代码

以下示例代码展示了如何在Python中结合熵权法和主成分分析进行数据分析。

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import MinMaxScaler# 生成样本数据
data = pd.DataFrame({'A': np.random.rand(10),'B': np.random.rand(10),'C': np.random.rand(10),'D': np.random.rand(10)
})# 熵权法计算权重
def entropy_weight(data):# 数据标准化scaler = MinMaxScaler()data_norm = scaler.fit_transform(data)# 计算熵值P = data_norm / data_norm.sum(axis=0)E = -np.nansum(P * np.log(P + 1e-12), axis=0) / np.log(len(data))D = 1 - E# 计算权重W = D / D.sum()return Wweights = entropy_weight(data)
print("熵权法计算的权重:", weights)# 主成分分析
def pca_with_weights(data, weights, n_components=2):# 数据标准化scaler = MinMaxScaler()data_norm = scaler.fit_transform(data)# 结合权重data_weighted = data_norm * weights# PCA降维pca = PCA(n_components=n_components)principal_components = pca.fit_transform(data_weighted)return principal_components, pcaprincipal_components, pca = pca_with_weights(data, weights)
print("主成分:", principal_components)
print("解释方差比:", pca.explained_variance_ratio_)# 结果可视化
import matplotlib.pyplot as pltplt.figure(figsize=(10, 6))
plt.scatter(principal_components[:, 0], principal_components[:, 1])
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('熵权法结合主成分分析')
plt.show()

代码解释

  1. 数据生成:生成一个包含4个指标的数据集。
  2. 熵权法计算权重:标准化数据,计算熵值,并计算每个指标的权重。
  3. 主成分分析:使用计算出的权重对数据进行加权,然后进行主成分分析,提取主要特征。
  4. 结果可视化:将主成分分析的结果进行可视化。

通过这种方法,可以在考虑各指标重要性的基础上,提取主要特征,提高数据分析的准确性和可靠性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词