赞
踩
(也称为“正向指标”,即数值越大越好的指标)
一般不做处理
%正向指标1
%填1的时候选择
function data=zheng1(data1)
data=(data1-min(data1))./(max(data1)-min(data1));
end
%正向指标2
%填2的时候选择
function data=zheng2(data1)
data=datal;
end
(也称“负向指标”,即数值越小越好的指标)
一般要把极小型指标化成极大型指标,如(2)
%负向指标1
%填3的时候选择
function data=fu3(data1)
data=(max(data1)-data1)./(max(data1)-min(data1));
end
%负向指标2
%填4的时候选择
function data=fu3(data1)
data=(max(data1)-data1);
end
%填5的时候选择
function data=fu3(data1)
data=1./(max(abs(data1))+data1);
end
(也称“单点型指标”,即数值即某个值的时候是最好的指标)
%某点最优
%填6的时候选择
function data=qu6(data1,a)
data=1./(abs(data1-a)/max(abs(data1-a)));
end
%区间指标1
%填7的时候选择
function data=qu7(data1,a,b)
for i=1:length(data1)
if(data1>a)&&(data1<b)
data(0)=1;
elseif(data1<a)
data(i)=data1/a;
elseif (data1>b)
data(i)=b/data1;
end
end
end
指标正向化后还需要对所有的指标进行标准化处理,对每一列都进行处理:
简称AHP
是定性与定量相结合的多准则决策、评价方法。将决策的有关元素分解成目标层、准则层和方案层,并通过人们的判断对决策方案的优劣进行排序,在此基础上进行定性和定量分析。它把人的思维过程层次化、数量化,并用数学为分析、决策、评价、预报和控制提供定量的依据。
构建层次结构模型;
构建成对比较矩阵;
层次单排序及一致性检验(即判断主观构建的成对比较矩阵在整体上是否有较好的一致性);
层次总排序及一致性检验(检验层次之间的一致性)。
它完全依靠主观评价做出方案的优劣排序,所需数据量少,决策花费的时间很短。从整体上看,AHP在复杂决策过程中引入定量分析,并充分利用决策者在两两比较中给出的偏好信息进行分析与决策支持,既有效地吸收了定性分析的结果,又发挥了定量分析的优势,从而使决策过程具有很强的条理性和科学性,特别适合在社会经济系统的决策分析中使用。
用AHP进行决策主观成分很大。当决策者的判断过多地受其主观偏好影响,而产生某种对客观规律的歪曲时,AHP的结果显然就靠不住了。
尤其适合于人的定性判断起重要作用的、对决策结果难于直接准确计量的场合。要使AHP的决策结论尽可能符合客观规律,决策者必须对所面临的问题有比较深入和全面的认识。另外,当遇到因素众多,规模较大的评价问题时,该模型容易出现问题,它要求评价者对问题的本质、包含的要素及其相互之间的逻辑关系能掌握得十分透彻,否则评价结果就不可靠和准确。
(1)成对比较矩阵可以采用德尔菲法(匿名打分法,多人决策)获得。
(2)如果评价指标个数过多(一般超过9个),利用层次分析法所得到的权重就有一定的偏差,继而组合评价模型的结果就不再可靠。可以根据评价对象的实际情况和特点,利用一定的方法,将各原始指标分层和归类,使得每层各类中的指标数少于9个。
问题:选这两人其中之一当男朋友,你会选谁?
显然,不同维度的权重会产生不同的结果,所以找到每个维度的权重是最核心的问题!!!
标度参考表:
下面的
λ
λ
λmax是判断矩阵的最大特征向量(最大特征值是指线性代数意义上的|A-λE|max),
n
n
n是样本数量。
为什么要进行一致性检验?
%% 层次分析法 clear;clc; P=[8,7,6,8;7,8,8,7]; % 每一行代表一个对象的指标评分 %% % A为自己构造的输入判别矩阵 A=[1,3,1,1/3; 1/3,1,1/2,1/5; 1,2,1,1/3; 3,5,3,1]; %% [n,m]=size(A); % size()计算n为行数,m为列数 % 求特征值特征向量,找到最大特征值对应的特征向量 [V,D]=eig(A); % 求特征值和特征向量 V代表特征向量 D记录特征值 tzz=max(max(D)); % 找到最大的特征值 c1=find(max(D)==tzz); % 找到最大的特征值位置 %% tzx=V(:,c1); % 最大特征值对应的特征向量 % 赋权重 quan=zeros(n,1); for i=1:n quan(i,1)=tzx(i,1)/sum(tzx); end %% Q=quan; % 一致性检验 CI=(tzz-n)/(n-1); RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59]; % 判断是否通过一致性检验 CR=CI/RI(1,n); if CR>=0.1 fprintf('没有通过一致性检验\n'); else fprintf('通过一致性检验\n'); end %% % 显示出所有评分对象的评分值 score=P*Q; for i=1:length(score) name=['object_score',num2str(i)]; eval([name,'=score(i)']) end
TOPSIS法(模型)是根据评价对象与理想化目标的接近程度进行排序的方法,是一种距离综合评价方法。基本思路是通过假定正、负理想解,测算各样本与正、负理想解的距离,得到其与理想方案的相对贴近度。
指标同向化、标准化并得到权重;
得到加权后的规范化矩阵;
确定正、负理想解;
计算各样本距离正、负理想解的距离;
计算各评价对象与最优方案的贴近程度。
避免了数据的主观性,不需要目标函数,不用通过检验,而且能够很好的刻画多个影响指标的综合影响力度。
对于数据分布及样本量、指标多少无严格限制,既适于小样本资料,也适于多评价单元、多指标的大系统,较为灵活、方便。
需要的每个指标的数据,对应的量化指标选取会有一定难度;
不确定指标的选取个数为多少适宜,才能够去很好刻画指标的影响力度;
必须有两个以上的研究对象才可以进行使用。
Topsis法被广泛用于企业管理、市场营销、投资决策等领域。主要适用于评价指标相对较多,指标间相互独立。
在 TOPSIS 当中,默认了各个评价指标所占的权重相同,但在实际的评价过程当中由于各种主观客观因素的影响,导致每一个评价指标所占的权重是有差异的;
主观权重——层次分析法(AHP)
客观权重——熵权法
该算法是直接用来评价的,它也可以和赋权方法一起用。逼近理想解排序法(the technique for order preference by similarity to an ideal solution,TOPSIS)是一种通过比较样本值与理想值的距离实现综合评价的方法。逼近理想解排序法采用相对接近度来表征各个评价对象与参考点的距离。
首先在空间确定出参考点,包括最优和最劣点,然后计算各个评价对象与参考点的距离,与最优点越近或与最劣点越远说明被评价对象的综合特性越好现设得到指标的权重为
w
w
wj,可以是均匀权重,也可以通过层次分析法等确定权重的方法获取,设正向化标准化后数据为
x
x
xij’,可以得到加权重后的数据为
r
r
rij
得到数据与最值之间的距离,处理过后可以构成数据矩阵
R
=
(
R=(
R=(
r
r
rij
)
)
)m×n
定义每个指标即每列的最大值为 r r rj+, r r rj+ = m a x =max =max ( ( ( r r r1j, r r r2j,…, r r rnj ) ) )
定义每个指标即每列的最小值为 r r rj-, r r rj- = m i n =min =min ( ( ( r r r1j, r r r2j,…, r r rnj ) ) )
定义第
i
i
i 个评价对象与最大值距离为
d
d
di+,
定义第i个评价对象与最小值距离为
d
d
di−
计算评分:
%% TOPSIS clc;clear; data=[220 6 30 10 10 5 190 8 25 9 8 3 180 8 28 7 7 4 170 7 23 8 7 2]; index=3; for i=1:length(index) data1(:,index(i))=(max(data(:,index(i)))-data(:,index(i)))/(max(data(:,index(i)))-min(data(:,index(i)))); end %% 正向指标准化处理 index_all=1:size(data1,2); index_all(index)=[]; % 除负向指标外其余所有指标 index=index_all; for i=1:length(index) data1(:,index(i))=(data(:,index(i))-min(data(:,index(i))))/(max(data(:,index(i)))-min(data(:,index(i)))); end data1=zscore(data); % for j=1:size(data1,2) % data1(:,j)= data(:,j)./sqrt(sum(data(:,j).^2)); % end % 得到加权重后的数据 w=[0.3724, 0.1003,0.1991, 0.1991,0.0998,0.0485]; % 使用求权重的方法求得 R=data1.*w; % 得到最大值和最小值距离 r_max=max(R); % 每个指标的最大值 r_min=min(R); % 每个指标的最小值 d_z = sqrt(sum([(R-repmat(r_max,size(R,1),1)).^2 ],2)); % d+向量 d_f = sqrt(sum([(R-repmat(r_min,size(R,1),1)).^2 ],2)); % d-向量 % sum(data,2)对行求和,sum(data)默认对列求和 % 得到得分 s=d_f./(d_z+d_f ); Score=100*s/max(s); for i=1:length(Score) fprintf('第%d个投标者百分制评分为:%d\n',i,Score(i)); end
(也称“灰色关联度分析”)。
灰色关联分析的实质就是,可利用各方案与最优方案之间关联度大小对评价象进行比较、排序。关联度越大,说明比较序列与参考序列变化的态势越一致,反之,变化态势则相悖。由此可得出评价结果。
建立原始指标矩阵;确定最优指标序列;进行指标标准化或无量纲化处理;求差序列、最大差和最小差;计算关联系数;计算关联度。
是一种评价具有大量未知信息的系统的有效模型,是定性分析和定量分析相结合的综合评价模型,该模型可以较好地解决评价指标难以准确量化和统计的问题,可以排除人为因素带来的影响,使评价结果更加客观准确。整个计算过程简单,通俗易懂,易于为人们所掌握;数据不必进行归一化处理,可用原始数据进行直接计算,可靠性强;评价指标体系可以根据具体情况增减;无需大量样本,只要有代表性的少量样本即可。
要求样本数据且具有时间序列特性;只是对评判对象的优劣做出鉴别,并不反映绝对水平,故基于灰色关联分析综合评价具有“相对评价”的全部缺点。
对样本量没有严格要求,不要求服从任何分布,适合只有少量观测数据的问题;应用该种方法进行评价时,指标体系及权重分配是一个关键的题,选择的恰当与否直接影响最终评价结果。
采用组合赋权法:根据客观赋权法和主观赋权法综合而得权系数。
结合TOPSIS法:不仅关注序列与正理想序列的关联度,而且关注序列与负理想序列的关联度,依据公式计算最后的关联度。
灰色关联分析:
灰色关联计算评分:
由以上的案例我们分析一组银行数据:
clc;clear ;close all data_table1=readtable('银行数据.xlsx'); data_get1=table2array(data_table1(:,3:end)); %% %最后求到的数据在数组B中然后都进行指标的正向化 %1,2 正向指标 %3,4,5 负向指标 %6 单点最优 %7 区间最优指标 zhibiao_label=[1,1,3,3,1,1,4]; %给出指标所需要处理标签 data_last=jisuan(data_get1,zhibiao_label); %全部正向化之后的数据 %% %A的排序结果 A_data=data_last; %% 不同的方法 % 带有权重的TOPSIS法 W=1/length(zhibiao_label)*ones(1,length(zhibiao_label)); %可以根据层次分析法求 %% scoreB=TOPSIS(A_data,W); %% for n=1:100 for i=1:length(W)-1 rand1=rand(1)*0.5*max(W); rand2=rand(1); if(rand2>0.5) rand1=W(i)-rand1; else rand1=W(i)+rand1; end W1(i)=rand1; end W2=W1; W2(length(W))=1-sum(W1); W_all(n,:)=W2; end %% W_all=mapminmax(W_all,0,1); % W_all=W_all'/sum(W_all'); for i=1:length(W_all) W_all1(i,:)=W_all(i,:)/sum(W_all(i,:)); end %% W_all=W_all1; %% for N=1: 100 score_all(:,N)=TOPSIS(A_data,W_all(N,:)); end %% mean_score_all=mean(score_all'); %% [AAA,BBB]=sort(mean_score_all','descend'); % data_resultA(:,1)= data_table1( BBB,1); data_resultA(:,1)= data_table1( BBB,2); data_resultA(:,2)= array2table(AAA); %排序 % data_resultA %最后结果 std_score_all=std(score_all'); %% x_test=1:length(mean_score_all); limit(1,:)=mean_score_all-std_score_all; limit(2,:)=mean_score_all+std_score_all; COLOR=[184 184 246]/255; COLOR1=[207 155 255]/255; COLOR2=[190 210 254]/255; COLOR3=[184 184 246]/255; h1=fill([x_test,fliplr(x_test)],[limit(1,:),fliplr(limit(2,:))],COLOR,'DisplayName','不确定范围'); hold on h1.FaceColor = COLOR;%定义区间的填充颜色 h1.EdgeColor =[1,1,1];%边界颜色设置为白色 alpha .2 %设置透明色 plot(x_test,mean_score_all,'Color',COLOR1,'LineWidth',1,'DisplayName','评价均值') hold on plot(x_test,limit(1,:),'--','Color',COLOR2,'DisplayName','评价下限') hold on plot(x_test,limit(2,:),'--','Color',COLOR3,'DisplayName','评价上限') hold on legend('show','Location','Best'); xticks([1:length(scoreB)]) xlabel('评价对象') ylabel('分值') set(gca,"FontSize",12,"LineWidth",2) box off legend Box off disp('评分结果') disp(mean_score_all) %% 函数部分 function data=zheng1(data1) %正向指标1 % 填1的时候选择 data=(data1-min(data1))./(max(data1)-min(data1)); end function data=zheng2(data1) %正向指标2 % 填2的时候选择 data=data1; end function data=fu3(data1) %负向指标1 % 填3的时候选择 data=(max(data1)-data1)./(max(data1)-min(data1)); end function data=fu4(data1) %负向指标2 % 填4的时候选择 data=(max(data1)-data1); end function data=fu5(data1) %负向指标3 % 填5的时候选择 data=1./(max(abs(data1))+data1); end function data=qu6(data1,a) %某点最优 % 填6的时候选择 data=1./(abs(data1-a)/max(abs(data1-a))); end function data=qu7(data1,a,b) %区间指标1 % 填7的时候选择 for i=1:length(data1) if(data1>a)&&(data1<b) data(i)=1; elseif (data1<a) data(i)=data1/a; elseif (data1>b) data(i)=b/data1; end end end %% function data1=jisuan(data,zhibiao_label) if isa(data,'double') for i=1:length(zhibiao_label) if (zhibiao_label(i)==1) data1(:,i)=zheng1(data(:,i)); elseif (zhibiao_label(i)==2) data1(:,i)=zheng2(data(:,i)); elseif (zhibiao_label(i)==3) data1(:,i)=fu3(data(:,i)); elseif (zhibiao_label(i)==4) data1(:,i)=fu4(data(:,i)); elseif (zhibiao_label(i)==5) data1(:,i)=fu5(data(:,i)); elseif (zhibiao_label(i)==6) prompt = '这是单点最优,请输入单点最优值 '; a = input(prompt); data1(:,i)=qu6(data(:,i),a); elseif (zhibiao_label(i)==7) prompt = '这是区间最优,请输入单点最区间如[5,10] '; aa=prompt; data1(:,i)=qu7(data(:,i),aa(1),aa(2)); end end elseif isa(data,'cell') % data2=data; for j=1:length(data) data2=data{j}; if size(zhibiao_label,1)==1 zhibiao_label1=repmat(zhibiao_label,3,1); else zhibiao_label1=zhibiao_label; end for i=1:length(zhibiao_label1(j,:)) if (zhibiao_label(i)==1) data1{j}(:,i)=zheng1(data2(:,i)); elseif (zhibiao_label(i)==2) data1{j}(:,i)=zheng2(data2(:,i)); elseif (zhibiao_label(i)==3) data1{j}(:,i)=fu3(data2(:,i)); elseif (zhibiao_label(i)==4) data1{j}(:,i)=fu4(data2(:,i)); elseif (zhibiao_label(i)==5) data1{j}(:,i)=fu5(data2(:,i)); elseif (zhibiao_label(i)==6) prompt = '这是单点最优,请输入单点最优值 '; a = input(prompt); data1{j}(:,i)=qu6(data2(:,i),a); elseif (zhibiao_label(i)==7) prompt = '这是区间最优,请输入单点最区间如[5,10] '; aa=prompt; data1{j}(:,i)=qu7(data2(:,i),aa(1),aa(2)); end end end end end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。