目录
1.简介
2.算法原理
2.1 指标正向化
2.2 数据标准化
2.3 计算变异系数
2.4 计算权重以及得分
3.实例分析
3.1 读取数据
3.2 指标正向化
3.3 数据标准化
3.4 计算变异系数
3.5 计算权重
3.6 计算得分
完整代码
1.简介
变异系数法(Coefficient of variation method)又称"标准差率"(标准差与平均数的比值)是直接利用各项指标所包含的信息,通过计算得到指标的权重。是一种客观赋权的方法。此方法的基本做法是:在评价指标体系中,指标取值差异越大的指标,也就是越难以实现的指标,这样的指标更能反映被评价单位的差距。例如,在评价各个国家的经济发展状况时,选择人均国民生产总值(人均GNP)作为评价的标准指标之一,是因为人均GNP不仅能反映各个国家的经济发展水平,还能反映一个国家的现代化程度。如果各个国家的人均GNP没有多大的差别,则这个指标用来衡量现代化程度、经济发展水平就失去了意义。
2.算法原理
2.1 指标正向化
和熵权法的指标正向化类似,正向指标越大越好,负向指标越小越好。把指标都转化成正向指标处理。此篇采用新的正向化形式,采用上一篇建模算法熵权法的处理形式也可,基本思想不变就行。这个数据集有正向指标(越大越优型指标)和负向指标(越小越优型指标)两种。
设有m个待评对象,n个评价指标,可以构成数据矩阵X=(xij)m*n,设数据矩阵内元素,经过指标正向化处理过后的元素为xij'
负向指标:并网点电压偏差越限次数D、有功控制能力F、功率因数越限G属于此类指标
正向指标:其余所有指标属于此类,可以不用处理
2.2 数据标准化
每个指标的数量级不一样,需要把它们化到同一个范围内比较。上一篇建模算法用到了最大最小值标准化方法。此篇可以用一个新的标准化方法,处理如下:
设标准化后的数据矩阵元素为rij,由上可得指标正向化后数据矩阵元素为xij'
2.3 计算变异系数
处理过后可以构成数据矩阵R=(rij)m*n
- 计算指标的均值:
- 计算指标的标准差:
- 计算变异系数:
2.4 计算权重以及得分
- 权重为:
- 得分为:
3.实例分析
风场名 | 风场1 | 风场2 | 风场3 |
A(高频率穿越能力) | 0.743 | 0.7567 | 0.8104 |
B(低频率穿越能力) | 0.8267 | 0.8033 | 0.7667 |
C(低压穿越能力) | 0.8324 | 0.8736 | 0.8539 |
D(并网点电压偏差越限次数 ) | 12 | 10 | 16 |
E(SVC/SVG响应性能指标) | 0.8637 | 0.8538 | 0.9038 |
F(有功控制能力) | 0.0743 | 0.0665 | 0.0881 |
G(功率因素越限) | 0.0409 | 0.0716 | 0.0657 |
3.1 读取数据
data=xlsread('D:\桌面\变异系数.xlsx')
返回:
3.2 指标正向化
%指标正向 化处理后数据为data1
data1=data;
%%负向指标(越小越优型指标)处理
index=[4,6,7];%负向指标位置
k=0.1;
for i=1:length(index)data1(:,index(i))=1./(k+max(abs(data(:,index(i))))+data(:,index(i)))
end
返回:
3.3 数据标准化
%数据标准化
data2=data1;
for j=1:size(data1,2)data2(:,j)= data1(:,j)./sqrt(sum(data1(:,j).^2));
end
data2
返回:
3.4 计算变异系数
%计算变异系数
A=mean(data2) %求每列平均值
S=std(data2) %求每列方差
V=S./A %变异系数
返回:
3.5 计算权重
%计算权重
w=V./sum(V)
返回:
3.6 计算得分
%计算得分
s=data2*w';
Score=100*s/max(s);
for i=1:length(Score)%A(i,:)=[row(i), col(i), rho_1(row(i), col(i))];fprintf('第%d个风场百分制评分为:%d\n',i,Score(i));
end
返回:
完整代码
clc;clear;
data=xlsread('D:\桌面\变异系数.xlsx');
%指标正向 化处理后数据为data1
data1=data;
%%负向指标(越小越优型指标)处理
index=[4,6,7];%负向指标位置
k=0.1;
for i=1:length(index)data1(:,index(i))=1./(k+max(abs(data(:,index(i))))+data(:,index(i)));
end
%数据标准化
data2=data1;
for j=1:size(data1,2)data2(:,j)= data1(:,j)./sqrt(sum(data1(:,j).^2));
end
data2;
%计算变异系数
A=mean(data2); %求每列平均值
S=std(data2); %求每列方差
V=S./A; %变异系数
%计算权重
w=V./sum(V);
%计算得分
s=data2*w';
Score=100*s/max(s);
for i=1:length(Score)%A(i,:)=[row(i), col(i), rho_1(row(i), col(i))];fprintf('第%d个风场百分制评分为:%d\n',i,Score(i));
end