从零开始的数模(十九)组合赋权法
目录
一、概念
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
从零开始的数模(十九)组合赋权法相关推荐
- 组合赋权法之python
目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...
- 组合赋权法之matlab
目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标 ...
- 一文速学数模-评价模型(二)熵权法实战确定评价指标权重
目录 前言 一.熵权法介绍 二.使用步骤 1.数据预处理 2.计算指标信息熵
- 基于层次分析法与熵权法的主客观组合赋权模型(原创:小青龙)
基于层次分析法与熵权法的主客观组合赋权模型 组合赋权大家可以尝试进行改变,一个主观一个客观.(原创:小青龙) 简介 权重是用来衡量总体中各单位标志值在总体中作用大小的数值, 用来描述单因子在因子集 ...
- 权重设计:客观赋权法的说明(熵权法/变异系数法/CRCIII法/TOPSIS法)
在数据分析中,我们经常会遇到多个特征对于结果造成不同影响的情况,如何识别这些特征各自的权重,对我们的后续结果评估,打分矩阵构建都具有重要意义.我们所说的赋权法是用于解决多指标综合评价问题中的各指标权重 ...
- LL1分析构造法_数学建模算法--最优赋权法(含代码)
数学建模算法--最优赋权法(含代码) 作者:郑铿城 本次介绍数学建模和科研写作的方法--最优赋权法最优赋权法经常用于分析评价类问题,从该算法的名称就可以看到,该算法首先要体现"最优" ...
- 基于AHP与CRITIC的组合赋权方法
1.程序名称 基于AHP与CRITIC的组合赋权方法 2.程序功能(对象) 适用于对两个及以上的对象进行综合评估: 主观赋权法:AHP(输入专家对指标排序及相邻指标相对重要程度) 客观赋权法:CRIT ...
- 客观赋权法的python实现
这两天实现了一些客观赋权法,这里做一个整理.在进行赋权前,先导入数据(列:各维属性:行:各样本),并自行进行去空值.归一化等操作. import pandas as pd import numpy a ...
- 嫡权法赋权法_变异系数法_客观赋权法
什么是变异系数,有何优势? 变异系数:当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,此时就应当消除测量尺度和量纲的影响,而变 ...
最新文章
- flutter离线源码安装包最新版本下载地址
- linux 交叉编译 libxml2,openssl,libssh2
- python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
- php+redis队列流程
- 阅读之spring+Dubbo
- 全栈深度学习第7期: 研究方向这么多,哪些是有有趣又潜力的呢?
- C11中gets()的函数被删除
- 关于获取安卓设备的mac地址
- 多数iPhone应用程序的不足之处
- [java多线程]高并发List与Map
- 无人值守地磅电子汽车衡中称重系统传感器原理及应用
- Java之美[从蛮荒到撬动地球]之设计模式二
- Point to Raster 工作原理
- Android Studio 截屏
- 关于论文组会的一些思考(其一)
- 多元有序logistic回归分析_多元Logistic_回归分析解析.ppt
- 共享打印机找不到网络路径的解决方法
- Edge出现无法访问此页面xxxxxx已拒绝连接。
- 怎么从小事中看“思维突破”
- linux升级系统内核