zoukankan      html  css  js  c++  java
  • 综合评价模型

    综合评价模块

    在数学建模比赛和数据分析中,综合评价模型的出场率还是比较高的,实际应用也确实比较广泛。下面是我在学习过程中对综合评价模型的总结。

    1 综合评价的目的

    综合评价无外乎两种:对多个系统进行评价和对一个系统进行评价。对多个系统进行评价的目的基本上有两种:这东西是谁的——分类;哪个好哪个差——比较、排序。对一个系统进行评价的目的基本上就是看它达没达标、及不及格——实现程度。对一个系统的精确评价往往对它进行进一步的预测起着决定性的参考作用。因为如果我们需要对某一系统进行预测的话一个良好的评价系统也非常关键。

    2 综合评价的基本要素

    综合评价模型中的五个基本要素:被评价对象、评价指标、权重系数、综合评价模型和评价者。

    2.1被评价对象

    被评价对象就是综合评价问题中所研究的对象。这里将被评价对象记为

    2.2评价指标

    评价指标的选取对系统的综合评价起着至关重要的作用。可以说根据不同的评价指标评价出来的结论之间可能大相径庭。评价指标的选取应该主要以下几个原则:

    1. 独立性。尽量减少每一个评价指标之间的耦合关系,即每个评价指标中包含的绝大部分信息在其他评价指标中应该不存在。比如评价两地之间的交通状况,如果选择了汽车的平均行驶速度和公路距离为评价指标后,就不要在选取汽车平均使用时间作为评价指标了。因为它包含的信息在其他的评价指标中能反映出来。
    2. 全面性。所有评价指标包含的信息总和应该等于被评价模型的所有信息。独立性和全面性可以类比古典概型中样本点和样本空间的概念。
    3. 量子性。如果一个评价指标可以使用两个或者多个评价指标表示,那么将评价指标的进一步细化有助于我们实现指标之间的解耦和对问题的分析。再分析清楚问题之后,在构建评价模型的时候我们可以通过合适的算法将相关的评价指标进行聚合。
    4. 可测性。保证选择的评价指标能直接或者间接的测量也非常重要。

    评价指标我们用
    .
    表示。

    2.3权重系数

    不同的评价指标的不同重要程度我们可以使用权重系数进行表示。每一个评价指标都应该对应一个权重系数。所以我们可以用
    .
    表示。权重系数还应该满足
    .

    2.4综合评价模型

    有了评价指标和其对应的权重之后,我们就可建立合适的综合评价模型了。一般的做法就是对所有系统的各个评价指标测量值进行加权平均。假设我们已经得到了所有系统的测量矩阵
    .
    其中
    .
    表示第i个系统第j个测量指标的测量值。
    我们可以定义综合评价函数如下:
    .
    特别的,对应加权平均的评价函数有:
    .

    2.5评价者

    3 综合评价的一般步骤

    1. 确定综合评价目的(分类、排序、实现程度)。
    2. 选取评价指标。
    3. 对评价指标进行测量建立测量矩阵。
    4. 对测量矩阵进行预处理(一致化、无量纲化)。
    5. 确定权重。
    6. 确定评价模型。

    4 评价指标的规范化处理

    一般来说我们直接测量到的评价指标数据有以下四种类型。极大型指标、极小型指标、中间型指标和区间型指标。

    • 极大型指标:取值越大系统对应指标表现越好。
    • 极小型指标:取值越小系统对应指标表现越好。
    • 中间型指标:取值越靠近中间值表现越好。
    • 区间型指标:取值越靠近某一区间表现越好,区间内表现都为最好。

    4.1评价指标类型一致化

    在建立评价模型之前,我们应该将所有的评价指标都化为同一种类型,一般都会选择极大型。下面是评价指标化为极大型的方法。

    4.1.1极小型化为极大型

    • 倒数法

    .

    • 平移法

    .
    其中
    .

    4.1.2 居中型化为极大型

    对于测量矩阵中的某一列j评价指标,如果其取值为中间值最好。我们可以采用如下的方法将其化为极大型。
    设最好的中间值为:
    .
    其中
    .
    则:
    .
    下面是使用matlab将居中型转化为极大型的代码:

    %% 将居中型化为极大型
    clear
    clc
    
    %参数设置
    xMax = 100;         %设置最大值
    xMin = 0;           %设置最小值
    plotPoints = 100;   %设置绘图的点数
    %下面代码不用修改
    x = linspace(xMin,xMax,plotPoints);
    xBest = (xMax+xMin)/2;
    xLessPoints = x(x<xBest);
    xLessPoints = 2*(xLessPoints-xMin)./(xMax-xMin);
    xGreaterPoints = x(x>=xBest);
    xGreaterPoints = 2*(xMax-xGreaterPoints)./(xMax-xMin);
    xTrans = [xLessPoints,xGreaterPoints];
    plot(x,xTrans)
    

    绘图结果如下图所示:

    居中型到极大型

    4.1.3区间型化为极大型

    对于区间型的数据类型可以使用如下公式进行转换:

    其中[d,e]为a(这里省略了下标)的最佳稳定区间。c=max{d-m,M-e},其中M和m分别为a所在列(对应一个指标)取值的最大值和最小值。
    下面是使用matlab程序将区间型化为极大型:

    %% 将区间型化为极大型
    clear
    clc
    
    %参数设置
    xMin = 0;       %设置x的最小值
    xMax = 100;     %设置x的最大值
    bestMinX = 40;  %设置最佳区间的最小值
    bestMaxX = 50;  %设置最佳区间的最大值
    plotPoints = 100;   %设置绘图点数
    %下面代码不用修改
    x = linspace(xMin,xMax,plotPoints);
    c = max((bestMinX-xMin),(xMax-bestMaxX));
    xLessBestPoints = x(x<bestMinX);
    xLessBestPoints = 1-(bestMinX-xLessBestPoints)/c;
    xEqualBestPoints = x((x>=bestMinX)&(x<bestMaxX));
    xEqualBestPoints = ones(size(xEqualBestPoints));
    xGreaterPoints = x(x>=bestMaxX);
    xGreaterPoints = 1-(xGreaterPoints-bestMaxX)/c;
    xTrans = [xLessBestPoints,xEqualBestPoints,xGreaterPoints];
    plot(x,xTrans);
    

    绘图结果如下图所示:

    区间型到极大型

    4.1.4定性指标的量化处理

    实际上,很多指标并不能直接就进行定量分析,大部分指标都是只能进行定性分析。那么如何将定性分析的问题转化为定量分析呢?大部分情况下我们采用的方法是采用隶属函数的方法。比如我们可以对常用的五等级评价标准(A,B,C,D,E)进行量化处理。如果我们用1-5个数字表示这五个等级的话。我们可以采用如下隶属函数进行量化(不能简单的认为这种评价是线性的)。
    对应1到3我们可以采用对数函数作为隶属函数,对于3-5我们采用偏大型柯西分布作为隶属函数。这样选取隶属函数的原因是我们通常在打分的时候认为D和E,A和B之间的实际差距并不是那么明显。而我们打分C,D之间往往代表这两个指标值差距更大。隶属函数的选择应该考虑到实际情况进行选择。我们得到隶属函数如下:

    其中待定系数为

    同时给出已知数据点

    待定系数后,我们就可以将上面定性的分析转化为可以参与计算的定量指标值。关于matlab中函数的拟合可以参考matlab已知函数类型的拟合

    4.2 评价指标的无量纲化

    不同的指标量纲不同如果在此基础上直接进行权重确定,会使权重的确定变得非常困难,同时也会使评价模型的建立和选取的指标有直接的耦合。我们一般在确定权重之前首先进行无量纲化处理,使他们在权重的确定时不会再考虑量纲的因素。使得模型的建立和指标的选取进行解耦,让模型具有清晰的逻辑和通用性。常用的无量纲化方法有:标准差方法、极值差方法和功效数方法等。
    假设m个评价指标

    ,在此不妨假设已经进行了类型的一致化处理,并且共有n个评价系统。那么我们就得到了一个处理后的测量矩阵

    4.2.1标准差方法



    其中

    ,

    显然无量纲化后的测量矩阵

    的均值和均方差分别为0和1,这时指标变成了无量纲的指标,称矩阵中的值

    为标准观测值。

    4.2.2极值差方法



    ,其中

    .则

    是无量纲的指标观测值。

    4.2.3功效系数法

    使用上面的极值差方法变换后每一列的指标中总会有一个值为0一个值为1.这样会将拉大指标值之间的差距。我们知道对于一个序列,如果每个序列中的值都减去一个小于等于序列中的最小值的值,那么序列中的各个值之间的差距会增加。相反如果将序列中的值都加上同一个数据那么它们之间的相对差距会减少。比如序列{1,2,4}的差距比较大,后面的数据都是前面的两倍,但是如果我将序列中的值都增加了1000变成了{1001,1002,1004}那么它们之间的相对差距就会减少。同样我们也可以对序列做乘除运算来改变数据之间相对的重要程度,这便是功效系数法的思想。


    ,其中c,d为根据对数据差距的要求所确定的常数。c表示平移量,d表示缩放量。可以看出

    5 综合评价模型的建立方法

    前面我们说过综合平键模型的建立其实就是建立规范化后的测量矩阵X和权重向量w的关系,即

    5.1线性加权综合法

    前面我们说过最基本也是最简单的一种建模方法就是将权重直接和对应的规范化后的测量值相乘然后求和。这种建模方法叫做线性加权函数。

    这种线性加权的方法在各个评价指标之间为相互独立时效果比较好。但是如果各个评价指标之间存在着信息的耦合的话,这种评价指标往往不能客观的反应实际情况。

    线性加权有如下特点:

    1. 该方法能使得各个评价指标之间作用得到线性补偿,保证综合评价指标的公平性。
    2. 该方法中权重系数对评价结果的影响明显。
    3. 当权重系数预先给定时,该方法使评价结果对应各备选方案之间的差异表现不敏感。
    4. 该方法计算简便,可操作性强,便于推广使用。

    5.2 非线性加权综合法

    用非线性函数作为综合评价模型,比如


    非线性加权综合法适用于各指标间有较强关联的情况。
    主要特点:

    1. 对数据要求较高,指标数值不能为0,、负数。
    2. 乘除法容易拉开评价档次,对较小数值的变动更敏感。
    3. 适用于各个指标有较强关联的情况。

    5.3动态加权综合评价方法

    上面两种方法中,权重向量w都是常数。我们知道有时候一个指标的重要程度可能和指标的取值有关。比如我们在评价一个人的时候,如果他有某种特长远超常人,那么我们可能就不太关心其他的评价指标,而将这个权重相应的增加。

    5.3.1分段变幂函数

    如果某一个评价指标一共分为K个等级,每个等级内又有不同的重要程度。这时候我们可以用如下的分段变幂函数去近似权值的变化。

    其中

    为等级K的区间内。
    分段变幂函数如下图所示:

    分段变幂函数图像

    对应matlab代码如下:

    clear
    clc
    
    kMax = 6;   %这里设置分段数
    
    x = linspace(0.0001,1,200);
    for k = 1:kMax
        xi = x((x>1/kMax*(k-1))&(x<1/kMax*k));
        yi = xi.^(1/k);
        plot(xi,yi)
        hold on
    end
    legend('k=1','k=2','...')
    title('分段变幂函数')
    

    分段变幂函数中等级越高权值也越高,不同等级之间有一个明显的突变,同一等级之间不同阶段权值也不相同。需要注意分段变幂函数中,不能有值为0等变换后测量值。

    5.3.2偏大型正态分布函数

    我们知道生物增长模型中S型函数能对其很好的表达。同样这种随类别的增长权重先快速增长然后趋于平缓的模型在在动态加权的模型中也十分常见。我们可以使用偏大型正态分布函数进行描述。

    如果也将x的取值分为K段,则

    的取值应该在第一段内,

    的取值应该保证第K段的某测量值的权值为0.9.
    下面绘出

    时的函数曲线。

    相关matlab代码如下:

    clear
    clc
    
    % alpha = 0.05;
    % x = 0.75;   %观察x=0.75时delta和x权值的关系
    % delta = linspace(0.1,0.5,100);
    % wX = 1-exp(-((x-alpha)./delta).^2);
    % plot(delta,wX)
    % %由图得delta约等于0.45时x的权值为0.9.
    
    alpha = 0.05;
    delta = 0.45;
    
    x=linspace(0,1,200);
    y = x;
    y(x<=alpha) = 0;
    index = (x>alpha);
    y(index) = 1-exp(-((x(index)-alpha)./delta).^2);
    plot(x,y)
    title('偏大型正态分布函数')
    

    5.3.3S型分布函数

    S型分布函数的模型如下:

    其中

    ,且

    。这里可以将

    看成图像两边的控制点。下面是

    时的函数图像。

    对应matlab代码如下:

    clear
    clc
    
    a1 = 0.05;
    bk = 1;
    
    c = (a1+bk)/2;
    x = linspace(0,1,200);
    y = x;
    y(x<a1)=0;
    index = (x>=a1)&(x<=c);
    y(index)= 2*((x(index)-a1)/(bk-a1)).^2;
    index = (x>c)&(x<=bk);
    y(index) = 1-2*((x(index)-bk)/(bk-a1)).^2;
    plot(x,y)
    title('S型分布函数')
    

    6 总结

    综合评价模型的建立步骤总结如下:

    1. 选取评价指标。需要注意指标独立性和全面性。
    2. 得到测量矩阵。
    3. 对指标进行一致化处理。一般都转换成极大型。可以使用极小到极大、居中到极大、区间化极大、建立隶属函数等方法。
    4. 进行无量纲化处理。常用方法有标准差方法、极值差方法、功效系数法等。
    5. 确定权重。是固定权值还是动态加权?动态加权函数有分段变幂函数、偏大型正态分布函数、S型分布函数等。
    6. 建立综合评价模型。是线性加权还是非线性加权?
    7. 给出结论。如果对多个对象进行评价对它们进行排序,如果对单个对象进行评价给出实现程度或当前等级。
  • 相关阅读:
    几种常用的排序算法
    Charles 抓包工具安装和采坑记录
    当你骂特朗普的时候你究竟在骂什么
    苹果公司的另一面:沃兹尼亚克
    网络爬虫设计中需要注意的几个问题
    微信小程序 canvas 绘图问题总结
    自己动手做智能家居之:智能空调控制
    Allegro导入PADS文件
    C#
    C#
  • 原文地址:https://www.cnblogs.com/yabin/p/6524711.html
Copyright © 2011-2022 走看看