目录

一、概念

1.1相关概念

1.2原理

二、基于python的组合赋权法

2.1 读取数据

完整代码

三、基于MATLAB的组合赋权法

完整代码


一、概念

1.1相关概念

主观赋权法(AHP)在根据决策者意图确定权重方面比客观赋权法(熵权法)具有更大的优势,但客观性相对较差,主观性相对较强;

而采用客观赋权法有着客观优势,但不能反映出参与决策者对不同指标重视程度,并且会有一定的权重和与实际指标相反的程度。

针对主客观赋权方法的优缺点,我们还力求将主观随机性控制在一定范围内,实现主客观赋权中的中正。客观方面。指标赋权公正,实现了主客观内在统一,评价结果真实、科学、可信。

因此,在对指标进行权重分配时,应考虑指标数据之间的内在统计规律和权威值。给出了合理的决策指标赋权方法,即采用主观赋权法(AHP)和客观赋权法(熵权法)相结合的组合赋权方法,以弥补单一赋权带来的不足。将两种赋权方法相结合的加权方法称为组合赋权法。

注意:本文所介绍的组合权重法请大家结合实际情况慎重使用,因为这个方法不太好

1.2原理

1.2.1 指标正向化

1.2.2 数据标准化 

1.2.3 计算主观权重 

 1.2.4 计算客观权重

1.2.5 计算组合权重

1. 2.6 计算的得分

二、基于python的组合赋权法

2.1 读取数据

data = pd.read_excel('D:\桌面\zuhefuquan.xlsx')
# print(data)
label_need=data.keys()[1:]#提取变量名
# print(label_need)
data1=data[label_need].values #只提取数据
print(data1)

 2.2 指标正向化

本实例中P1、P3属于此类指标

因此负向指标正向化

#越小越优指标位置,注意python是从0开始计数,对应位置也要相应减1
data2 = data1
index=[1,3]
for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]]
print(data2)

在对剩余正向指标数据可以不做处理

2.3 数据范围标准化

#0.002~1区间归一化
[m,n]=data2.shape #查看行数和列数
data3=data2
ymin=0.002
ymax=1
for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin
print(data3)

2.4 计算主观权重

#求特征值和特征向量
V,D = np.linalg.eig(data3)
# print('特征值:')
# print(V)
# print('特征向量:')
# print(D)
#最大特征值
tzz = np.max(V)
# print(tzz)
#最大特征向量
k=[i for i in range(len(V)) if V[i] == np.max(V)]
tzx = -D[:,k]
# print(tzx)
# #赋权重
quan=np.zeros((n,1))
for i in range(0,n):quan[i]=tzx[i]/np.sum(tzx)
a=quan.T
print(a)

2.5 计算客观权重

#计算信息熵
p=data3
for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j])
# print(p)
E=data3[0,:]
for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j]))
# print(E)
# 计算权重
b=(1-E)/sum(1-E)
print(b)

2.6 计算组合权重

#计算组合权重
w=b
sum=0
for i in range(n):sum = sum + np.sqrt(a[i]*b[i])
#     print(sum)
for i in range(n):w[i] = np.sqrt(a[i]*b[i])/sum
print(w)

2.7 计算得分

#计算得分
s=np.dot(data3,w)
Score=100*s/max(s)
for i in range(0,len(Score)):print(f"方案{i}百分制评分为::{Score[i]}")

完整代码

#导入相关库
import pandas as pd
import numpy as np
#读取数据
data = pd.read_excel('D:\桌面\zuhefuquan.xlsx')
# print(data)
label_need=data.keys()[1:]#提取变量名
# print(label_need)
data1=data[label_need].values #只提取数据
print(data1)#越小越优指标位置,注意python是从0开始计数,对应位置也要相应减1
data2 = data1
index=[1,3]
for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]]
print(data2)#0.002~1区间归一化
[m,n]=data2.shape #查看行数和列数
data3=data2
ymin=0.002
ymax=1
for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin
print(data3)#求特征值和特征向量
V,D = np.linalg.eig(data3)
# print('特征值:')
# print(V)
# print('特征向量:')
# print(D)
#最大特征值
tzz = np.max(V)
# print(tzz)
#最大特征向量
k=[i for i in range(len(V)) if V[i] == np.max(V)]
tzx = -D[:,k]
# print(tzx)
# #赋权重
quan=np.zeros((n,1))
for i in range(0,n):quan[i]=tzx[i]/np.sum(tzx)
a=quan.T
print(a)#计算信息熵
p=data3
for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j])
# print(p)
E=data3[0,:]
for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j]))
# print(E)
# 计算权重
b=(1-E)/sum(1-E)
print(b)#计算组合权重
w=b
sum=0
for i in range(n):sum = sum + np.sqrt(a[i]*b[i])
#     print(sum)
for i in range(n):w[i] = np.sqrt(a[i]*b[i])/sum
print(w)#计算得分
s=np.dot(data3,w)
Score=100*s/max(s)
for i in range(0,len(Score)):print(f"方案{i}百分制评分为::{Score[i]}")

三、基于MATLAB的组合赋权法

3.1 读取数据

data=xlsread('D:\桌面\zuhefuquan.xlsx')

3.2 指标正向化

本实例中P1、P3属于此类指标

因此负向指标正向化

data1=data;
%%越小越优型处理
index=[1,3];%越小越优指标位置
for i=1:length(index)data1(:,index(i))=max(data(:,index(i)))-data(:,index(i));
end
data1

在对剩余正向指标数据可以不做处理

3.3 数据范围标准化

为什么不做0,1的标准化呢,因为一标准化有不少数据变成了0,对结果起到副作用

data1=mapminmax(data1',0.02,1) %标准化到0.002-1区间

3.4 计算主观权重

%求特征值特征向量,找到最大特征值对应的特征向量
[V,D]=eig(data1);
tzz=max(max(D));     %找到最大的特征值
c1=find(D(1,:)==tzz);%找到最大的特征值位置
tzx=V(:,c1) %最大特征值对应的特征向量
%赋权重
[n,m]=size(data); %查看数据行数和列数
quan=zeros(n,1);
for i=1:n
quan(i,1)=tzx(i,1)/sum(tzx);
end
a=quan'

3.5 计算客观权重

data3 = data1;
%得到信息熵
[m,n]=size(data3);
p=zeros(m,n);
for j=1:np(:,j)=data3(:,j)/sum(data3(:,j));
end
for j=1:nE(j)=-1/log(m)*sum(p(:,j).*log(p(:,j)));
end
%计算权重
b=(1-E)/sum(1-E)

3.6 计算组合权重

%计算得分
s=data1*w';
Score=100*s/max(s);
for i=1:length(Score)fprintf('方案%d百分制评分为:%4.2f\n',i,Score(i));
end

3.7 计算得分

%计算得分
s=data1*w';
Score=100*s/max(s);
for i=1:length(Score)fprintf('方案%d百分制评分为:%4.2f\n',i,Score(i));
end

完整代码

%组合赋权法
clc;clear;
data=xlsread('D:\桌面\zuhefuquan.xlsx');
data1=data;
%%越小越优型处理
index=[1,3];%第一三个指标为负向指标,
for i=1:length(index)data1(:,index(i))=max(data(:,index(i)))-data(:,index(i));
end
data1;
data1=mapminmax(data1',0.02,1); %标准化到0.002-1区间
data2 = data1;
%求特征值特征向量,找到最大特征值对应的特征向量
[V,D]=eig(data2);
tzz=max(max(D));     %找到最大的特征值
c1=find(D(1,:)==tzz);%找到最大的特征值位置
tzx=V(:,c1); %最大特征值对应的特征向量
%赋权重
[n,m]=size(data); %查看数据行数和列数
quan=zeros(n,1);
for i=1:n
quan(i,1)=tzx(i,1)/sum(tzx);
end
a=quan';data3 = data1;
%得到信息熵
[m,n]=size(data3);
p=zeros(m,n);
for j=1:np(:,j)=data3(:,j)/sum(data3(:,j));
end
for j=1:nE(j)=-1/log(m)*sum(p(:,j).*log(p(:,j)));
end
%计算权重
b=(1-E)/sum(1-E);
w=b;
sum = 0;
for i=1:n
sum=sum+sqrt(a(i)*b(i));
end
for i=1:n
w(i)=sqrt(a(i)*b(i))/sum;
end
w;
%计算得分
s=data1*w';
Score=100*s/max(s);
for i=1:length(Score)fprintf('方案%d百分制评分为:%4.2f\n',i,Score(i));
end

从零开始的数模(十九)组合赋权法相关推荐

  1. 组合赋权法之python

    目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...

  2. 组合赋权法之matlab

    目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...

  3. 一文速学数模-评价模型(二)熵权法实战确定评价指标权重

    目录 前言 一.熵权法介绍 二.使用步骤 1.数据预处理 2.计算指标信息熵

  4. 基于层次分析法与熵权法的主客观组合赋权模型(原创:小青龙)

    基于层次分析法与熵权法的主客观组合赋权模型 组合赋权大家可以尝试进行改变,一个主观一个客观.(原创:小青龙) 简介 ​ 权重是用来衡量总体中各单位标志值在总体中作用大小的数值, 用来描述单因子在因子集 ...

  5. 权重设计:客观赋权法的说明(熵权法/变异系数法/CRCIII法/TOPSIS法)

    在数据分析中,我们经常会遇到多个特征对于结果造成不同影响的情况,如何识别这些特征各自的权重,对我们的后续结果评估,打分矩阵构建都具有重要意义.我们所说的赋权法是用于解决多指标综合评价问题中的各指标权重 ...

  6. LL1分析构造法_数学建模算法--最优赋权法(含代码)

    数学建模算法--最优赋权法(含代码) 作者:郑铿城 本次介绍数学建模和科研写作的方法--最优赋权法最优赋权法经常用于分析评价类问题,从该算法的名称就可以看到,该算法首先要体现"最优" ...

  7. 基于AHP与CRITIC的组合赋权方法

    1.程序名称 基于AHP与CRITIC的组合赋权方法 2.程序功能(对象) 适用于对两个及以上的对象进行综合评估: 主观赋权法:AHP(输入专家对指标排序及相邻指标相对重要程度) 客观赋权法:CRIT ...

  8. 客观赋权法的python实现

    这两天实现了一些客观赋权法,这里做一个整理.在进行赋权前,先导入数据(列:各维属性:行:各样本),并自行进行去空值.归一化等操作. import pandas as pd import numpy a ...

  9. 嫡权法赋权法_变异系数法_客观赋权法

    什么是变异系数,有何优势? 变异系数:当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,此时就应当消除测量尺度和量纲的影响,而变 ...

最新文章

  1. flutter离线源码安装包最新版本下载地址
  2. linux 交叉编译 libxml2,openssl,libssh2
  3. python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
  4. php+redis队列流程
  5. 阅读之spring+Dubbo
  6. 全栈深度学习第7期: 研究方向这么多,哪些是有有趣又潜力的呢?
  7. C11中gets()的函数被删除
  8. 关于获取安卓设备的mac地址
  9. 多数iPhone应用程序的不足之处
  10. [java多线程]高并发List与Map
  11. 无人值守地磅电子汽车衡中称重系统传感器原理及应用
  12. Java之美[从蛮荒到撬动地球]之设计模式二
  13. Point to Raster 工作原理
  14. Android Studio 截屏
  15. 关于论文组会的一些思考(其一)
  16. 多元有序logistic回归分析_多元Logistic_回归分析解析.ppt
  17. 共享打印机找不到网络路径的解决方法
  18. Edge出现无法访问此页面xxxxxx已拒绝连接。
  19. 怎么从小事中看“思维突破”
  20. linux升级系统内核

热门文章

  1. 特斯拉的市场策略在中国面临“失效”
  2. 深度学习的数学-卷积神经网络的误差反向传播
  3. 101 个 MySQL 的调节和优化的提示(转osc)
  4. 【刷题笔记】——day.6 有效的井字游戏
  5. Oracle重申将支持Solaris 11
  6. 计算机无法卸载软件,电脑软件无法卸载怎么解决
  7. 【磁屏蔽电感】里让工程师“头晕脑胀”的问题
  8. VC中CTreeView控件的使用
  9. 修改ansible hosts文件路径
  10. vue路由跳转返回上一级