数学建模:变异系数法

文章首发于我的个人博客:欢迎大佬们来逛逛

变异系数法

变异系数法的设计原理是:

  • 若某项指标的数值差异较大,能明确区分开各被评价对象,说明该指标的分辨信息丰富,因而应给该指标以较大的权重
  • 若某项指标的数值差异较小,那么这项指标区分各评价对象的能力较弱,因而应给该指标较小的权重

因为方差可以描述取值的离散程度,即某指标的方差反映了该指标的的分辨能力,所以可用方差定义指标的权重。

注意:使用变异系数法的前提恰恰是所有指标在评价体系中的重要性相当。也就是说,当指标在评价体系中的重要性相差较大时,使用变异系数法确定权重并不一定合适。

算法流程

  1. 创建原始指标数据矩阵: D a t a Data Data 形状为 m ∗ n m * n mn 列 ,表示有 m m m 行对象, n n n个指标
  2. D a t a Data Data进行指标正向化处理,然后进行指标标准化处理
  3. 计算第 j j j 项指标的均值和标准差:
    1. 实际上我们进行变成时,计算均值和标准差也就是一条语句而已。 meanstd

{ x ˉ j   =   1 n   ∑ i = 1 n x i j S j   = ∑ i = 1 n ( x i j   − x ˉ j   ) 2 n − 1 \left\{\begin{array}{rcl}\mathrm{\bar x_j~=~\frac1n~\sum_{i=1}^nx_{ij}}\\\\\mathrm{S_j~=\sqrt{\frac{\sum_{i=1}^n\left(x_{ij}~-\bar x_j~\right)^2}{n-1}}}\end{array}\right. xˉj = n1 i=1nxijSj =n1i=1n(xij xˉj )2

  1. 计算第 j j j 项指标的变异系数 V V V

v j   =   s j x ˉ j   ,   j = 1 , 2 , ⋯   , p \mathrm{v_j~=~\frac{s_j}{\bar{x}_j}~,~j=1,2,\cdots,p} vj = xˉjsj , j=1,2,,p

  1. 对各指标的变异系数进行归一化处理。

w j = V j ∑ j = 1 p v j \mathrm{w_j=\frac{V_j}{\sum_{j=1}^pv_j}} wj=j=1pvjVj

  1. 最后我们得到全部指标的权重

W = { w 1 , w 2 , ⋯   , w p } \text{W}=\{\mathrm{w}_1,\mathrm{w}_2,\cdots,\mathrm{w}_\mathrm{p}\} W={w1,w2,,wp}


代码实现

function [Score,w]=mfunc_variableCoefficient(data)
    % 变异系数法:求解每个指标的权重
    % paramts: 
    %      data: 原始数据矩阵,(m,n) m为评价对象,n为评价指标
    % returns:
    %      Score:每个评价对象的综合得分
    %      w:     所有指标的权重

    %数据标准化 
    for j=1:size(data,2)
        data(:,j)= data(:,j)./sqrt(sum(data(:,j).^2));
    end
    
    A=mean(data); %求每列指标平均值
    S=std(data);  %求每列指标方差
    
    %计算变异系数
    V=S./A; 
    %计算各指标的权重
    w=V./sum(V);
    %计算得分
    s=data*w';
    Score=100*s/max(s);
end

你可能感兴趣的:(数学建模,MATLAB,数学建模)