美赛算法及MATLAB代码,美赛常用算法及matlab代码——(3)熵权法
熵权法真的用的太太太多啦(反正我们队是)
原理很简单,不再讲了(俺觉得就算不懂原理只要会用就OK)
举个栗子(以下数据全为我瞎编)
身高
气质
颜值
小王得分
5.5
3
2
小红得分
5.6
4
3
小明得分
5.7
5
6
小白得分
5.8
6
8
小中得分
5.9
7
10
我们想算出以上身高、气质、颜值对于一个人影响程度的多少,就是算出这三个方面的权值,权值越大,表示该方面越重要。
当然,这是一个很浅显的例子。具体到美赛中,应用就多了去了。比如今年(2020年)的E题(我们队就选的这个题),我们有一步要计算水污染、大气污染、固体污染对于一个地区环境生态影响程度的时候,就可以用熵权法来看看这三个方面究竟哪个对于环境污染的影响更大。
下面上代码
main.m
说一下,下面的Ind数组,你有几列数据要处理(即有几个方面要求权值)这个Ind数组里就有几个元素,比如我上面举的例子,就把Ind改为[1 1 1] 如果某个指标是负值,你就把Ind里面对应的项改成2. 直接运行main.m 就能得到w值,即各项的权值
x=load('data.txt'); % 读入数据
Ind=[1 1 1 1]; %指定各指标的正向or负向
[s,w]=shang(x,Ind)
还定义了两个函数,记得把main.m和guiyi.m还有shang.m放在一个文件夹下,当然啦,要把你的要处理的数据放在data.txt文件里,同时这个文件也放在该文件夹下。
guiyi.m
function y=guiyi(x,type,ymin,ymax)
%实现正向或负向指标归一化,返回归一化后的数据矩阵
%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
%type设定正向指标1,负向指标2
%ymin,ymax为归一化的区间端点
[n,m]=size(x);
y=zeros(n,m);
xmin=min(x);
xmax=max(x);
switch type
case 1
for j=1:m
y(:,j)=(ymax-ymin)*(x(:,j)-xmin(j))/(xmax(j)-xmin(j))+ymin;
end
case 2
for j=1:m
y(:,j)=(ymax-ymin)*(xmax(j)-x(:,j))/(xmax(j)-xmin(j))+ymin;
end
end
shang.m
function [s,w]=shang(x,ind)
%实现用熵值法求各指标(列)的权重及各数据行的得分
%x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
%ind指示向量,指示各列正向指标还是负向指标,1表示正向指标,2表示负向指标
%s返回各行(样本)得分,w返回各列权重
[n,m]=size(x); % n个样本, m个指标
%%数据的归一化处理
for i=1:m
if ind(i)==1 %正向指标归一化
X(:,i)=guiyi(x(:,i),1,0.002,0.996); %若归一化到[0,1], 0会出问题
else %负向指标归一化
X(:,i)=guiyi(x(:,i),2,0.002,0.996);
end
end
%%计算第j个指标下,第i个样本占该指标的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%%计算第j个指标的熵值e(j)
k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; %计算信息熵冗余度
w=d./sum(d); %求权值w
s=100*w*X'; %求综合得分
美赛算法及MATLAB代码,美赛常用算法及matlab代码——(3)熵权法相关推荐
- 熵权法与Apriori算法对较多数据种类数据的处理
前言:前两天女朋友问我他们论文的时候看到他们用了基于熵权的TOPSIS模型做分析,由于本人没学过有关统计方面的知识,所以就去现学了一下.好巧不巧,在学校上课的时候老师提到了Apriori算法,突然联想 ...
- TOPSIS算法与熵权法
TOPSIS算法 英文全称Technique for Order Preference by Similarity to Ideal Solution,翻译为逼近理想解排序法.使用层次分析法进行评价时 ...
- C语言常用算法 脚本之家,C/C++常用算法手册 秦姣华 中文pdf扫描版 22.5MB
<C/C++常用算法手册>分3篇,共13章,"第1篇算法基础篇"介绍了算法概述,重点分析了数据结构和基本算法思想:"第2篇算法基本应用篇"详细讲解了 ...
- 数学建模之熵权法(EWM)matlab实例实现
本文参考http://blog.sina.com.cn/s/blog_710e9b550101aqnv.html 熵权法是一种客观赋值的方法,即它通过数据所包含的信息量来确定权重,形象的说如果每个人考 ...
- 【建模算法】熵权法(Python实现)
[建模算法]熵权法(Python实现) 熵权法是通过寻找数据本身的规律来赋权重的一种方法. 熵是热力学单位,在数学中,信息熵表示事件所包含的信息量的期望.根据定义,对于某项指标,可以用熵值来判断某个指 ...
- matlab 基于Topsis的熵权法2
基于Topsis的熵权法2 %%基于Topsis的熵权法代码 %% 熵权法部分 clc,clear; xij=xlsread('accessory1.xls','A','C2:IH147'); [ro ...
- TOPSIS和熵权法的应用(Matlab实现,包括数据预处理)
TOPSIS法是一种组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距. ①基本过程为归一化后的原始数据矩阵: ②采用余弦法找出有限方案中的最优方案和最劣方案:然后分别 ...
- State详细代码和介绍-Topsis熵权法评分(含视频教程)、Stata灰色关联度分析
一.topsis熵权法评分 1.数据来源:自主计算 2.时间跨度:无 3.区域范围:无 4.指标说明: 基于熵权法的topsis综合评分方法,结合了熵权法的客观求权重,以及topsis法的综合评分本教 ...
- 综合评价分析法:熵权法matlab实现+层次分析法matlab实现
综合评价分析法:熵权法matlab实现+层次分析法matlab实现 层次分析法matlab实现 clc;clear%层次分析法matlab实现A=[1 1/9 1/2 1/4 1/6 9 1 6 5 ...
最新文章
- Spring读书笔记——bean创建(下)
- Debug Tensorflow: yolo模型检测框位置正确但类别不正确
- Java黑皮书课后题第4章:*4.14(转换字母等级为数字)编写程序,提示用户输入一个字母等级A、B、C、D或者F,显示对应的数字值4、3、2、1或者0。对其它输入,提示非法等级
- 大型互联网公司分布式ID方案总结
- Codeforces 744C. Hongcow Buys a Deck of Cards(状压DP)
- [python 笔记]:序列详解:字符串,列表,元组,range对象
- 关于https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/的部分内容
- 电脑ATX电源接口定义详解
- Invalid bound statement (not found): com.cwp.study.dao.user.mapper.UserDao.selectByPrimaryKey解决办法
- html5如何设置视频为静音,html5中设置或返回音频/视频是否应该被静音的属性muted-...
- 自从有了BI商业智能系统,再也不用担心我的作图了!!!(图文)
- Result统一响应数据
- CNN误差反传时旋转卷积核的简明分析
- Spotify – Spotify connect 和vobis音频解码研究
- 基于云原生的政务云解决方案,为高效政务加码
- python 字典处理_python中的字典及其操作
- fiddler模拟进行接口测试
- 【中级软件设计师】—(摆烂记点单词)计算机专业英语单词总结(四十三)
- Confluence 决定(Decisions )蓝图
- CSS伪元素插入文字