探索数据之美:优雅权重计算方法与Python实践

写在开头

在数据的世界里,我们常常需要通过各种方法为不同的数据点分配合理的权重。这是数据分析中至关重要的一环,它决定了模型的准确性和结果的可信度。本文将引导您探索数据分析中常用的权重计算方法,并通过清晰的Python代码实现,让您轻松驾驭权重的奥秘。

1.常见分类

方法

2.区别

权重信息评价:
权重

2.1第一类为AHP层次法和优序图法;

此类方法利用数字的相对大小信息进行权重计算;此类方法为主观赋值法,通常需要由专家打分或通过问卷调研的方式,得到各指标重要性的打分情况,得分越高,指标权重越大。

此类方法适合于多种领域。比如想构建一个员工绩效评价体系,指标包括工作态度、学习能力、工作能力、团队协作。通过专家打分计算权重,得到每个指标的权重,并代入员工数据,即可得到每个员工的综合得分情况。

2.2 第二类为熵值法(熵权法)

此类方法利用数据熵值信息即信息量大小进行权重计算。此类方法适用于数据之间有波动,同时会将数据波动作为一种信息的方法。

比如收集各地区的某年份的经济指标数据,包括产品销售率(X1)、资金利润率(X2)、成本费用利润率(X3)、劳动生产率(X4)、流动资金周转次数(X5),用熵值法计算出各指标权重,再对各地区经济效益进行比较。

2.3 第三类为CRITIC、独立性权重和信息量权重;

此类方法主要是利用数据的波动性或者数据之间的相关关系情况进行权重计算。

比如研究利用某省医院2011年共计5个科室的数据指标(共计6个指标数据)进行CRITIC权重计算,最终可得到出院人数、入出院诊断符合率、治疗有效率、平均床位使用率、病床周转次数、出院者平均住院日这6个指标的权重。如果希望针对各个科室进行计算综合得分,那么可以直接将权重与自身的数据进行相乘累加即可,分值越高代表该科室评价越高。

2.4 第四类为因子分析和主成分法;

此类方法利用了数据的信息浓缩原理,利用方差解释率进行权重计算。

比如对30个地区的经济发展情况的8项指标作主成分分析,主成分分析法可以将8个指标浓缩为几个综合指标(主成分),用这些指标(主成分)反映原来指标的信息,同时利用方差解释率得出各个主成分的权重。

3. 使用时注意事项

注意

4.详细描述及python中实现方法

以python3.10环境为例。

4.1 AHP层次法

4.1.1 计算过程

AHP(层次分析法,Analytic Hierarchy Process)是一种用于解决复杂决策问题、确定多层次结构中各因素的相对权重的方法。该方法通过构建判断矩阵、计算权重向量,层次分解和一致性检验等步骤,最终得到各因素的权重。

AHP计算权重的基本过程:

1). 构建层次结构:

  • 将问题分解为若干层次,包括目标层、准则层和子准则层。每个层次上的因素称为因子。

2). 构建判断矩阵:

  • 对于每个层次中的两两因子,专家根据其相对重要性给出判断矩阵。判断矩阵通常用 A A A 表示,其元素 a i j a_{ij} aij 表示因子 i i i 相对于因子 j j j 的相对重要性。

3). 计算权重向量:

  • 对于每个判断矩阵,计算其最大特征值 λ max ⁡ \lambda_{\max} λmax 和对应的特征向量 v \mathbf{v} v
  • 归一化特征向量,得到权重向量 w \mathbf{w} w。权重向量的每个元素表示对应因子的权重。
  • 对于判断矩阵 A A A,其权重向量为 w \mathbf{w} w,满足 A ⋅ w = λ max ⁡ ⋅ w A \cdot \mathbf{w} = \lambda_{\max} \cdot \mathbf{w} Aw=λmaxw

4). 层次分解:

  • 将权重向量按照层次结构逐级进行分解,得到最终的全局权重。

5). 一致性检验:

  • 对于每个判断矩阵,计算一致性指标 C I CI CI。如果 C I CI CI 大于某个阈值(通常为0.1),则需要进行一致性调整。一致性指标 C I CI CI 的计算公式为: C I = λ max ⁡ − n n − 1 CI = \frac{\lambda_{\max} - n}{n - 1} CI=n1λmaxn,其中 n n n 是判断矩阵的阶数。
  • 一致性比 C R CR CR 可用于进一步检验一致性,计算公式为 C R = C I R I CR = \frac{CI}{RI} CR=RICI,其中 R I RI RI 是随机一致性指标,根据矩阵的阶数查表获得。

以上是AHP权重计算的基本过程和数学公式。在实际应用中,通常使用计算工具来进行繁琐的计算。

4.1.2 Python代码实现

import numpy as npdef ahp_weight(matrix):eigvals, eigvecs = np.linalg.eig(matrix)weights = eigvecs[:, np.argmax(eigvals)]normalized_weights = weights / sum(weights)return normalized_weights

4.1.3 应用场景

假设我们在选择投资标的时,需要考虑收益、风险和流动性三个因素。我们可以通过AHP方法计算权重。

# 构建判断矩阵
matrix = np.array([[1, 2, 3],[1/2, 1, 2],[1/3, 1/2, 1]])# 计算权重
weights = ahp_weight(matrix)
print("权重分配结果:", weights)

4.2. 优序图法(Ranking Method)

4.2.1 计算过程

优序图法(Analytic Hierarchy Process,AHP)是一种用于计算多指标系统中各指标权重的方法。该方法基于对比矩阵,通过构建判断矩阵,计算一致性指标,进行层次分解和一致性检验等步骤,最终得到各指标的权重。

优序图法计算权重的基本过程:

1). 构建层次结构:

  • 将多指标系统分解为若干层次,形成层次结构。通常包括目标层、准则层和方案层。

2). 构建判断矩阵:

  • 对每个层次中的两两元素进行比较,形成判断矩阵。对于准则层和方案层,可以采用专家判断、实验数据或其他方法进行比较。
  • 判断矩阵通常用 A A A 表示,其元素 a i j a_{ij} aij 表示元素 i i i 相对于元素 j j j 的重要性。

3). 一致性检验:

  • 计算一致性指标 C I CI CI。如果 C I CI CI 大于某个阈值(通常为0.1),则需要进行一致性调整。
  • 一致性指标的计算公式为: C I = λ max ⁡ − n n − 1 CI = \frac{\lambda_{\max} - n}{n - 1} CI=n1λmaxn
    其中, λ max ⁡ \lambda_{\max} λmax 是判断矩阵的最大特征值, n n n 是判断矩阵的阶数。

4). 一致性调整:

  • 通过随机一致性指标 R I RI RI 和一致性比 C R CR CR 对判断矩阵进行一致性调整。
  • 一致性比的计算公式为: C R = C I R I CR = \frac{CI}{RI} CR=RICI
    如果 C R CR CR 大于某个阈值(通常为0.1),则需要重新进行专家判断或者修改判断矩阵。

5). 计算权重:

  • 根据一致性通过的判断矩阵,计算权重向量 W W W
  • 权重向量的计算通常涉及最大特征值法或特征向量法。

通过这个计算过程,优序图法能够为每个层次中的元素分配一个权重,该权重反映了各元素在整体层次结构中的相对重要性。

4.2.2 Python代码实现

import networkx as nxdef ranking_weight(graph):ranks = nx.pagerank(graph)weights = [ranks[node] for node in graph.nodes]normalized_weights = weights / sum(weights)return normalized_weights

4.2.3 应用场景

考虑在选择供应商时,我们需要综合考虑价格、质量和交货时间三个因素。我们可以通过优序图法计算权重。

# 构建优序图
G = nx.DiGraph()
G.add_weighted_edges_from([("价格", "质量", 0.6), ("价格", "交货时间", 0.8), ("质量", "交货时间", 0.7)])# 计算权重
weights = ranking_weight(G)
print("权重分配结果:", weights)

4.3. 熵值法(Entropy Method)

4.3.1 计算过程

熵值法是一种用于计算多指标系统中各指标权重的方法,该方法基于信息熵的概念。它通过分析各指标的信息熵来确定它们的权重,从而反映了指标的不确定性和贡献度。

熵值法计算权重的基本过程:

1). 构建指标矩阵:

  • 将多指标系统的数据构建成一个矩阵 X X X,其中每一行对应一个样本,每一列对应一个指标。

2). 归一化处理:

  • 对指标矩阵 X X X 进行归一化处理,将各指标的取值范围映射到[0, 1] 区间。这可以通过线性变换等方法进行。

3). 计算熵值:

  • 对每个指标进行熵值的计算。熵值 E i E_i Ei 的计算公式为: E i = − 1 ln ⁡ ( n ) ∑ j = 1 n p i j ln ⁡ ( p i j ) E_i = -\frac{1}{\ln(n)} \sum_{j=1}^{n} p_{ij} \ln(p_{ij}) Ei=ln(n)1j=1npijln(pij)
    其中, p i j p_{ij} pij 是指标 X i X_i Xi 在第 j j j 个样本上的相对权重, n n n 是样本数。

4). 计算权重:

  • 计算每个指标的权重 W i W_i Wi。权重的计算公式为: W i = 1 − E i ∑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XUbuntu22.04之安装OBS30.0强大录屏工具(一百九十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

​LeetCode解法汇总1038. 从二叉搜索树到更大和树

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给定一个二…

【算法】Boyer-Moore 算法

目录 1.概述1.1.Boyer-Moore 算法介绍1.2.坏字符规则表1.3.好后缀规则表1.4.总结 2.代码实现3.应用 更多数据结构与算法的相关知识可以查看数据结构与算法这一专栏。 有关字符串模式匹配的其它算法: 【算法】Brute-Force 算法 【算法】KMP 算法 【算法】Rabin-Karp …

数据在内存中的存储(含面试题)

数据在内存中的存储 1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端?2.2 为什么有大小端?2.3 练习2.3.1 练习12.3.2 练习22.3.3 练习3第一题第二题 2.3.4 练习42.3.5 练习5第一题第二题 2.3.6 练习6 1. 整数在内存中的存储 在讲解操作符的时候…

QNX的nicinfo ifmcstat if_up和tcpdump

nicinfo 在QNX操作系统中,nicinfo是一个用于显示网络接口卡(NIC)信息的命令行工具。它可以提供有关系统中所有可用网络接口卡的详细信息,例如接口名称、MAC地址、IP地址、掩码、广播地址、传输单元大小等等。 通过nicinfo命令可…

android studio 打开flutter项目 出现 dart sdk is not configured

android studio 版本 flutter版本 解决方式 1 点击Open Dart setting 2 打勾Enable Dart support for the project 3 Dart SDK path 选择flutter/bin/cache/dart-sdk 4 打勾Enable Dart support for the following modules

Python标准库:math模块【侯小啾Python基础领航计划 系列(十六)】

Python标准库:math模块【侯小啾python基础领航计划 系列(十六)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

Linux的sed命令

环境 Ubuntu 22.04 概述 sed 是“stream editor”的意思,用来处理文本,比如做文本查找、替换。 处理单行文本 用法1 语法: sed s/aaaa/bbbb/ aaaa :用正则表达式来匹配字符串,并用圆括号括起来需要获取的内容&a…

TCPDUMP抓包明确显示IP地址和端口号

经常使用tcpdump进行抓包的同学可以忽略了,这篇偏于使用扫盲;首先,tcpdump抓包目的IP显示为hostname,如果端口是知名端口,显示为协议名而不是端口号。这种默认其实略有问题的: 如果我们使用默认的hostname…

【蓝桥杯】马的遍历

马的遍历 题目描述 有一个 n m n \times m nm 的棋盘,在某个点 ( x , y ) (x, y) (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。 输入格式 输入只有一行四个整数,分别为 n , m , x , y n, m, x, y n,m,x,y。 …

LeetCode算法练习top100:(6)图论

package top100.图论;import java.util.LinkedList; import java.util.Queue;public class TOP {//200. 岛屿数量//网格类问题的 DFS 遍历方法int[][] ways new int[][]{{-1, 0}, {1, 0}, {0, 1}, {0, -1}};public int numIslands(char[][] grid) {int m grid.length, n gri…

目标检测——R-CNN系列检测算法总结

R-CNN系列算法详细解读文章: R-CNN算法解读SPPNet算法解读Fast R-CNN算法解读Faster R-CNN算法解读Mask R-CNN算法解读 目录 1、概述1.1 获取目标候选框1.2 候选框提取特征1.3 候选框分类及边框回归 2、R-CNN系列算法概述2.1 R-CNN算法2.2 SPPNet算法2.3 Fast R-CN…

2024最新版软件测试八股文(文档)

前言 (第一个就刷掉一大批人) 有很多“会自动化”的同学来咨询技术问题,他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问:你是定位不到吗?通常结果都是说确实定位不到。 做自…

131.类型题-计算数学序列的和,请编写函数fun,其功能是S=……【满分解题代码+详细分析】(数学序列的和类型题-C/C++JavaPython实现)

文章目录 131.类型题-计算数学序列的和:计算并输出一.题目1.1 解题思路二.解题代码2.1 C/C++解题代码2.2 python解题代码2.3 Java解题代码三.解题代码仔细分析3.1 C/C++解题代码仔细分析3.2 Java解题代码仔细分析3.3 Python解题代码仔细分析四.本类型题解题诀窍五.寄语131.类型…

Spring Boot 之 ModelFactory

1.initModel 功能&#xff1a; public void initModel(NativeWebRequest request, ModelAndViewContainer container, HandlerMethod handlerMethod)throws Exception {Map<String, ?> sessionAttributes this.sessionAttributesHandler.retrieveAttributes(request);c…

Codeforces Round 910 (Div. 2)

Codeforces Round 910 (Div. 2) 文章目录 Codeforces Round 910 (Div. 2)ABCD A 模拟 #include <bits/stdc.h>using namespace std; const int N1e510; char s[N];void solve(){int n , k , cb 0 , ans 0;cin >> n >> k;for(int i 1 ; i < n ; i ){c…

简易电路特性测试仪

目录 摘 要... 3 第一章 绪论... 5 1.1 研究课题背景... 5 1.2 国内外发展概况... 7 1.3 课题研究的目的... 9 1.4 课题的研究内容及章节安排... 9 第二章 电路特性测试仪的设计方案... 10 2.1 系统总体设计思路... 10 2.2 电路特性测试仪总体设计方案…

HarmonyOS开发上手

首先献出开发官网地址 &#xff08;https://developer.harmonyos.com/cn/develop/&#xff09; 本文内容 基础入门内容介绍安装DevEco StudioDevEco Studio常用功能介绍项目工程结构详解 1. 基础入门内容介绍 应用开发流程 在正式开始之前还需要了解一些有关的基础概念 方舟…

【PyTorch】概述

文章目录 1. PyTorch是什么&#xff1f;2. PyTorch的特点3. PyTorch的架构 1. PyTorch是什么&#xff1f; PyTorch是一个深度学习框架&#xff0c;由Facebook于2016年开源发布。PyTorch是基于Torch框架的Python接口&#xff0c;旨在提供易用的强大工具来进行神经网络的构建和训…

python实现从远程服务器读取 JSON 文件、解析内容并将其存储到 MySQL 表中,然后删除已解析的文件

创建一个 Python 脚本&#xff0c;利用 Paramiko 库连接到远程服务器&#xff0c;读取 JSON 文件、解析内容并将其存储到 MySQL 表中&#xff0c;最后删除文件。 import paramiko import json import MySQLdb import os# SSH 连接参数 ssh_client paramiko.SSHClient() ssh_c…