Python Numpy实现计算矩阵的均值和标准差详解
作者:叶庭云 发布时间:2021-12-20 09:51:20
一、前言
CRITIC权重法是一种比熵权法和标准离差法更好的客观赋权法:
它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指标变异性大小的同时兼顾指标之间的相关性,并非数字越大就说明越重要,完全利用数据自身的客观属性进行科学评价。
对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高;
指标之间的冲突性,用相关系数进行表示,若两个指标之间具有较强的正相关,说明其冲突性越小,权重会越低。
对于 CRITIC 权重法而言,在标准差一定时,指标间冲突性越小,权重也越小;冲突性越大,权重也越大;另外,当两个指标间的正相关程度越大时,(相关系数越接近1),冲突性越小,这表明这两个指标在评价方案的优劣上反映的信息有较大的相似性。
在用 Python 复现 CRITIC 权重法时,需要计算变异系数,以标准差的形式来表现,如下所示:
Sj表示第 j 个指标的标准差,在 CRITIC 权重法中使用标准差来表示各指标的内取值的差异波动情况,标准差越大表示该指标的数值差异越大,越能放映出更多的信息,该指标本身的评价强度也就越强,应该给该指标分配更多的权重。
研究收集到湖南省某医院 2011 年 5 个科室的数据,共有 6 个指标,当前希望通过已有数据分析各个指标的权重情况如何,便于医院对各个指标设立权重进行后续的综合评价,用于各个科室的综合比较等。数据如下:
二、详解计算均值和标准差
初始化一个简单的矩阵:
a = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
a
分别计算整体的均值、每一列的均值和每一行的均值:
print("整体的均值:", np.mean(a)) # 整体的均值
print("每一列的均值:", np.mean(a, axis=0)) # 每一列的均值
print("每一行的均值:", np.mean(a, axis=1)) # 每一行的均值
分别计算整体的标准差、每一列的标准差和每一行的标准差:
print("整体的方差:", np.std(a)) # 整体的标准差
print("每一列的方差:", np.std(a, axis=0)) # 每一列的标准差
print("每一列的方差:", np.std(a, axis=1)) # 每一行的标准差
结果如下:
三、实践:CRITIC权重法计算变异系数
导入需要的依赖库:
import numpy as np
import pandas as pd
提取数据:
df = pd.read_excel("./datas/result03.xlsx")
df
datas = df.iloc[:, 1:]
datas
如下所示:
数据正向和逆向化处理:
X = datas.values
xmin = X.min(axis=0)
xmax = X.max(axis=0)
xmaxmin = xmax - xmin
n, m = X.shape
print(m, n)
for i in range(n):
for j in range(m):
if j == 5:
X[i, j] = (xmax[j] - X[i, j]) / xmaxmin[j] # 越小越好
else:
X[i, j] = (X[i, j] - xmin[j]) / xmaxmin[j] # 越大越好
X = np.round(X, 5)
print(X)
如下所示:
按列计算每个指标数据的标准差:
发现结果与文档不一致:
原因:numpy默认是除以样本数,求的是母体标准差;而除以样本-1,得到的才是样本标准差,这时设置参数 ddof=1 即可!
如上图所示,这下与文档里的结果一致了!
来源:https://blog.csdn.net/fyfugoyfa/article/details/121353033


猜你喜欢
- [pre]REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE[/pre][pre] tbl_name[,tb
- 1.1. 下载:官网下载zip包,我下载的是64位的:下载地址:https://dev.mysql.com/downloads/mysql/
- 序对于如何将py文件打包生成exe可执行文件最简单的应该我觉得就是使用pyinstaller第三方模块下面我就分为三个步骤给大家讲解如何使用
- 本文摘自 《深度学习原理与PyTorch实战》我们将从预测某地的共享单车数量这个实际问题出发,带领读者走进神经网络的殿堂,运用PyTorch
- 前言备受期待的django 2.0已经发布了,最大的一个变化就是不再支持python2.x版本了,这也为我们还在保守使用的2.x的同学们敲响
- 简介MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发
- 一、激活函数定义激活函数 (Activation functions) 对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重
- 一、模块&包简介模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或fr
- 自动发送邮件功能是我们经常要用到的,比如每天定时统计报表信息,然后自动发送给运营人员,协助运营人员进行业务数据分析。本文是用Python写的
- 函数名:FenYe(url,pageCount,recordCount,curPage,cssstyle)  
- 所以呢,在引用js文档的时候,要设置被引用的文档是什么编码的。 如:一个utf-8的页面引用一个gb2312的js文档,那么就要这么写 &l
- 很多人在群里问,这个下拉框定位不到、那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。殊不知
- mysql5.7版本:方法1: 用SET PASSWORD命令 格式:mysql> set password f
- Pytorch数据类型与转换(torch.tensor,torch.FloatTensor)之前遇到转为tensor转化为浮点型的问题,今天
- 一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点:1、不开源,价格贵2、软件容量大。一般3G以上,高版本甚
- 和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际
- 一、题目在文本框中输入一个生日值,点击按钮,可以显示此生日的对应星座。定义一个函数,该函数用来接收一个生日值(月日组成的4位字符串,比如“0
- 在上一篇文章中,我介绍了MySQL对XML支持的部分功能,包括--xml命令行选项,以及MySQL 5.1.5中开始引入的新功能。今天我将介
- 从容器、可迭代对象谈起所有的容器都是可迭代的(iterable),迭代器提供了一个next方法。iter()返回一个迭代器,通过next()
- Payment Card Industry,即支付卡行业,PCI行业表示借记卡、信用卡、预付卡、电子钱包、ATM和POS卡及相关的业务。 P