草庐IT

python实现模糊综合评价法(FCE)

我不爱机器学习 2023-09-28 原文

1 基本概念

  • 综合评价是指按预定的目的确定研究对象的属性 (指标 ) 并将这种属性变为客观定量的计值或主观效用的行为 。
  • 评价特指多属性对象的综合评价 。属性是关于目的的框架结构是对研究对象本质特征的概括 。
  • 指标是关于研究对象属性的测度是对对象属性的具体化 。

2 模糊综合评价法简介

在客观世界中存在着许多不确定性的现象这种不确定性主要表现在两个方面: 一是随机性二是模糊性 。

  • 随机性造成的不确定性是由于对事物的因果律掌握不够,也就是说对事物发生的条件无法严格控制,以致一些偶然因素使实验结果产生了不确定性,但事物本身却是有明确的含义的,随机事件的特点是实验结果的不可预知性 。
  • 模糊性是指某些事物或概念的边界不清楚,这种边界不清的模糊概念,不是由于人的主观认识达不到客观实际所造成的,而是事物的一种客观属性,是事物的差异之间存在着中间过渡过程的结果 。例如 关于地震的震级、咫风的强度,对某种质量的评定以及生活中区分青年 、中年和老年等 。由于评定实物的标准或事物本身的定义没有明确的 “ 边界 ” 从而构成不确定性 。

因此对具有模糊性的因素,人为定制标准去评价,其结果包含人的主观意识,是不准确的。

所以,在评价过程中,应用模糊关系合成原理,将边界不清、不易评价的因素定量化,即糊综合评价法(FCE,Fuzzy Comprehension Evaluation Method)。

3 模糊综合评价法思想和原理

FCE是一种根据模糊数学隶属度理论把定性评价转化为定量评价的方法。

模糊数学产生于1965年,美国伯克利加利福尼亚大学的L. A. Zadeh教授发表的《模糊集》, 第一次成功地将模糊概念用精确的数学方法进行了描述,提供了一种分析复杂系统的新方法。

后由北京师范大学的汪培庄先生提出了模糊数学的一种具体应用方法-模糊综合评价法。

模糊综合评价法的基本思想是根据多目标评价问题的性质和总目标,把问题本身按层次进行分解。因此在决策时,大体上可以可分为四个步骤:

模糊综合评价法的基本思想是用隶属与“是”或“不是”的程度代替“是”或 “不是”, 刻画一种“中介状态”。

其基本原理是:

  • 首先确定被评价的指标或因素以及评价标准;
  • 第二步确定各指标的权重及它们隶属于各评价标准的程度,计算得到模糊综合评价矩阵;
  • 最后将 模糊综合评价矩阵与指标的隶属程度向量进行模糊运算,对结果进行归一化处理,得到最终 的综合评价结果。

4 模糊综合评价法的步骤

模糊综合评价法一般包括确定指标集、评价集、单因素评价和综合评价四大部分内容。 其具体计算步骤如下:

1)确定评价对象的指标集

为了便于权重分配与评价,可以按照评价指标的属性将其分成若干类, 把每一类都视作单一评价指标,并称之为一级评价指标。一级指标可以设置下属的二级指标, 依此类推。

假设以企业组织和管理水平评价为例,用模糊综合评价方法给出定量评价。这是专家(或其他统计方式)对评价打分表投票表决结果统计数据,简单的说就是对需要评价的因素(指标)给出主管或客观的“优、良、一般、较差、非常差”评价。这样,我们能给企业什么样的评价呢?

2)确定评价对象评语集

一般划分为3~5个等级。

3)确定评价因素的权重向量

权重是以某种数量形式对比、权衡被评价事物总体中各指标相对重要程度的量值

方法:AHP法、CRITIC法…

AHP法确认的权重

4)进行单指标模糊评价,建立模糊关系矩阵R

首先对一个指标进行评价,计算被评价对象隶属于评价集合V的程度,得到单指标模糊评价结果。

在构造多等级模糊子集后,从每个因素上量化被评价对象,确定被评价对象对各级模糊子集的隶属度,从而获得模糊关系矩阵。

对模糊关系矩阵进行归一化处理,消除量纲的影响。

归一化处理(隶属度函数):

先对评价表中的每个因素隶属于各个评语的程度进行评价(专家打分或隶属度函数)。以部分投票结果为例。

10名专家分别打分,以“持证上岗”准则为例,对“人员专业化”单因素模糊评价,选优秀1人,良好5人,一般3人,较差2人,非常差0人,按频率占比方法则优秀为0.1,如下表所示。

5)多指标综合评价

利用合理的模糊合成算子合成模糊权向量W与模糊关系矩阵R,计算得到各被评价对象的模糊综合评价结果向量B。

模糊合成算子:

共有四种模糊算子:

详见:https://blog.csdn.net/qq_42374697/article/details/105883545

在实例中,最后得到的模糊向量为:

B = A 1 × m ∘ R m × n = ( 0.18907668 , 0.33971352 , 0.28392126 , 0.1477013 , 0.03958725 ) B=A _{1×m}∘R _{m×n} =(0.18907668,0.33971352,0.28392126,0.1477013,0.03958725) B=A1×mRm×n=(0.18907668,0.33971352,0.28392126,0.1477013,0.03958725)

由计算结果可见,该成果应被评为良好。

6)对模糊综合评价结果进行分析

评价结果向量B是被评价对象对各个等级的隶属程度描述。

由于评价结果为一个模糊向量不能直接用于排序择优,还需要对结果进行综合分析,计算每个评价对象的综合分值,按大小进行排序,按序择优,从而挑选出最优者。

主要采用加权平均原则对结果进行处理,最终确定被评价对象的相对得分。

系统总得分:

F = B 1 × n × S 1 × n T F=B_{1×n}×S_{1×n}^{T} F=B1×n×S1×nT

其中 F F F 为系统总得分, S S S V V V 中相应因素的级分。

在实例中,优秀的级分肯定最高,其次是良好,依次往下,设级分依次为 S = ( 1 , 0.8 , 0.6 , 0.4 , 0.2 ) S = ( 1 , 0.8 , 0.6 , 0.4 , 0.2 ) S=(1,0.8,0.6,0.4,0.2),则该成果最后的系统总得分为 69.82 69.82 69.82

5 Python实现

#模糊综合评价法(FCE),输入准则权重、因素权重
def fuzzy_eval(criteria, eigen):
    #量化评语(优秀、    良好、    一般、    较差、   非常差)
    score = [1,0.8,0.6,0.4,0.2]
    
    df = get_DataFromExcel()
    print('单因素模糊综合评价:{}\n'.format(df))
    #把单因素评价数据,拆解到5个准则中
    v1 = df.iloc[0:2,:].values
    v2 = df.iloc[2:5,:].values
    v3 = df.iloc[5:9,:].values
    v4 = df.iloc[9:12,:].values
    v5 = df.iloc[12:16,:].values
   
    vv = [v1,v2,v3,v4,v5]
   
    val = []
    num = len(eigen)
    for i in range(num):
        v = np.dot(np.array(eigen[i]),vv[i])
        print('准则{} , 矩阵积为:{}'.format(i+1,v))
        val.append(v)
       
    # 目标层
    obj = np.dot(criteria, np.array(val))
    print('目标层模糊综合评价:{}\n'.format(obj))
    #综合评分
    eval = np.dot(np.array(obj),np.array(score).T)
    print('综合评价:{}'.format(eval*100))

#获取专家评价数据
def get_DataFromExcel():
    df = pd.read_excel('FCE.xlsx') 
    return df

运行程序,输出结果:

单因素模糊综合评价:    
 优秀   良好   一般   较差  非常差
0   0.1  0.4  0.3  0.2  0.0
1   0.5  0.3  0.2  0.0  0.0
2   0.2  0.3  0.2  0.1  0.2
3   0.0  0.2  0.3  0.3  0.2
4   0.2  0.2  0.3  0.2  0.1
5   0.5  0.3  0.2  0.0  0.0
6   0.1  0.3  0.3  0.2  0.1
7   0.1  0.1  0.4  0.2  0.2
8   0.0  0.1  0.3  0.3  0.3
9   0.2  0.3  0.4  0.1  0.0
10  0.1  0.3  0.5  0.1  0.0
11  0.2  0.5  0.3  0.0  0.0
12  0.3  0.3  0.3  0.1  0.0
13  0.1  0.3  0.3  0.2  0.1
14  0.1  0.1  0.5  0.2  0.1
15  0.2  0.3  0.3  0.1  0.1

准则1 , 矩阵积为:[0.16666667 0.38333333 0.28333333 0.16666667 0.        ]
准则2 , 矩阵积为:[0.14472991 0.2595379  0.2404621  0.16809714 0.18717295]
准则3 , 矩阵积为:[0.35043549 0.26809492 0.24801728 0.07691281 0.0565395 ]
准则4 , 矩阵积为:[0.18080794 0.33487429 0.40175492 0.08256285 0.        ]
准则5 , 矩阵积为:[0.22502982 0.27605619 0.32394381 0.13378032 0.04118986]
目标层模糊综合评价:[0.18907668 0.33971352 0.28392126 0.1477013  0.03958725]

综合评价:69.81982179113338

参考:

模糊层次综合评价法及其应用-江高.

基于模糊综合评价的海绵城市LID措施综合效能评价体系研究-马萌华.

https://blog.csdn.net/xiaoyw71/article/details/108404950

https://blog.csdn.net/qq_42374697/article/details/105883545

https://blog.csdn.net/cyj972628089/article/details/107616236

有关python实现模糊综合评价法(FCE)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  9. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  10. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

随机推荐