我是靠谱客的博主 鳗鱼春天,最近开发中收集的这篇文章主要介绍5 评价类算法:CRITIC法笔记(附Python代码)一、原理二、相关概念三、步骤四、代码五、参考链接,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、原理

1.定义

CRITIC方法是一种客观权重赋权法。它的基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度,它表示同一指标各个评价方案取值差距的大小,以标准差的形式来表现。二是评价指标之间的冲突性,指标之间的冲突性是以指标之间的相关性为基础,如两个指标之间具有较强的正相关,说明两个指标冲突性较低。

2.作用

CRITIC权重法适用于判断数据稳定性,并且适合分析指标或因素之间有着一定的关联的数据。

二、相关概念

1.对比强度

是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高。其中,假设m个待评对象,n个评价指标。
在这里插入图片描述

2.冲突性

指标之间的冲突性用相关系数进行表示,若两个指标之间具有较强的正相关,说明其冲突性越小,权重会越低。
在这里插入图片描述

3.信息承载量

设信息承载量为Cj,公式为:
在这里插入图片描述

三、步骤

1.数据标准化

每个指标的数量级不一样,需要把它们化到同一个范围内比较。指标也都需要正向化。此篇把正向化和标准化结合。
设有m个待评对象,n个评价指标,可以构成数据矩阵X = (xij)mxn.

  • 若xj为负向指标(越小越优型指标),需如下处理:
  • 若xj为正向指标(越大越优型指标),需如下处理:
    在这里插入图片描述

2.计算信息承载量

根据上述第二部分所列对比强度冲突性公式,推导得信息承载量公式。
根据以上3个公式,计算所需信息承载量C。

3.计算权重

这里将计算的信息承载量 Cj 进行归一化,即为所计算的权重 W。可以看出,信息承载量越大时,权重越大。
在这里插入图片描述

4.计算评分

将权重 W 与处理后的矩阵 x 相乘,获得测评对象的分数(该公式中,分数未转为百分比形式)。
在这里插入图片描述

四、代码

import numpy as np

'''
4
5
1 1 2 1 1
0.483 13.2682 0.0 4.3646 5.1070
0.4035 13.4909 39.0131 3.6151 5.5005
0.8979 25.7776 9.0513 4.8920 7.5342
0.5927 16.0245 13.2935 4.4529 6.5913
'''

'''1.输入数据'''
print("请输入参评对象数目:")
n = eval(input())
print("请输入评价指标数目:")
m = eval(input())
print("请输入指标类型:1:极大型,2:极小型")
kind = input().split(" ")
print("请输入矩阵:")
X = np.zeros(shape=(n, m))
for i in range(n):
    X[i] = input().split(" ")
    X[i] = list(map(float, X[i]))
print("输入的矩阵为:n{}".format(X))

'''2.标准化处理'''
def maxTomax(maxx, minx, x):
    x = list(x)
    ans = [[(e-minx)]/(maxx-minx) for e in x]
    return np.array(ans)
def minTomax(maxx, minx, x):
    x = list(x)
    ans = [[(maxx-e)]/(maxx-minx) for e in x]
    return np.array(ans)

A = np.zeros(shape=(n, 1))

for i in range(m):
    maxA = max(X[:, i])
    minA = min(X[:, i])
    if kind[i] == "1":
        v = maxTomax(maxA, minA, X[:, i])
    elif kind[i] == "2":
        v = minTomax(maxA, minA, X[:, i])
    if i == 0:
        A = v.reshape(-1, 1)
    else:
        A = np.hstack([A, v.reshape(-1, 1)])
print("标准化矩阵为:n{}".format(A))

'''3.计算对比强度'''
V = np.std(A, axis=0)
print("对比强度为:n{}".format(V))

'''4.计算冲突性'''
A2 = list(map(list, zip(*A))) # 矩阵转置
r = np.corrcoef(A2)   # 求皮尔逊相关系数
f = np.sum(1-r, axis=1)
print("冲突性为:n{}".format(f))

'''5.计算信息承载量'''
C = V*f
print('信息承载量为:n{}'.format(C))

'''6.计算权重'''
w = C/np.sum(C)
print('权重为:n{}'.format(w))

'''7.计算得分'''
s = np.dot(A, w)
Score = 100*s/max(s)
for i in range(len(Score)):
    print(f"第{i+1}个测评对象的百分制得分为:{Score[i]}")

在这里插入图片描述
在这里插入图片描述

五、参考链接

1.CSDN博客笔记
2.知乎笔记

最后

以上就是鳗鱼春天为你收集整理的5 评价类算法:CRITIC法笔记(附Python代码)一、原理二、相关概念三、步骤四、代码五、参考链接的全部内容,希望文章能够帮你解决5 评价类算法:CRITIC法笔记(附Python代码)一、原理二、相关概念三、步骤四、代码五、参考链接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部