综合评价之TOPSIS模型

原文:综合评价之TOPSIS模型


导读:在之前的文章里我们介绍了综合评价中的熵权法(未看请戳👉综合评价之熵权法),可以帮助我们在实际应用中解决如何客观确定指标权重的问题。今天继续来介绍另一种客观综合评价方法——TOPSIS模型,并且TOPSIS可以与熵权法组合使用。

1、TOPSIS基本概念

TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution )模型中文叫做“逼近理想解排序方法”,是根据评价对象与理想化目标的接近程度进行排序的方法,是一种距离综合评价方法。基本思路是通过假定正、负理想解,测算各样本与正、负理想解的距离,得到其与理想方案的相对贴近度(即距离正理想解越近同时距离负理想解越远),进行各评价对象的优劣排序。具体步骤及概念如下:

step 1: 指标同向化、标准化并得到权重。这部分与熵权法结合,通过熵权法得到权重,避免主观因素影响,得到权重向量W及标准化矩阵P。具体内容可参照综合评价之熵权法,这里不再赘述。

step 2 : 得到加权后的规范化矩阵Z。Z由P与W相乘后得到。

step 3 : 确定正、负理想解。正理想解指各指标都达到样本中最好的值,负理想解指各指标都为样本中最差的值。

step 4 : 计算各样本距离正、负理想解的距离。

step 5 : 计算各评价对象与最优方案的贴近程度。正其中

的取值范围为[0,1],越接近1表明样本评分越好。

2、Python实现

这里使用综合评价之熵权法中的测试数据作为演示。数据中共有4个变量,2036条样本,下面就开始用基于熵权法的TOPSIS计算样本得分。‍

import pandas as pdimport numpy as np#逆向指标标准化def normalization1(data):_range = np.max(data) - np.min(data)return(data- np.min(data)) / _range#正向指标标准化def normalization2(data):_range = np.max(data) - np.min(data)return(np.max(data) -data) / _range#熵权法计算权重def entropyWeight(data):P = np.array(data)# 计算熵值E = np.nansum(-P * np.log(P) / np.log(len(data)), axis=0)# 计算权系数return(1- E) / (1- E).sum()def topsis(data, weight=None):    # 权重weight = entropyWeight(data)ifweight is Noneelsenp.array(weight)    # 最优最劣方案Z = pd.DataFrame([(data*weight.T).min(), (data*weight.T).max()], index=['负理想解','正理想解'])#Z = pd.DataFrame([data.min(), data.max()], index=['负理想解', '正理想解'])    # 距离    Result = data.copy()#Result['正理想解'] = np.sqrt(((data - Z.loc['正理想解']) ** 2 * weight).sum(axis=1))#Result['负理想解'] = np.sqrt(((data - Z.loc['负理想解']) ** 2 * weight).sum(axis=1))Result['正理想解'] = np.sqrt(((data- Z.loc['正理想解']) **2).sum(axis=1))Result['负理想解'] = np.sqrt(((data- Z.loc['负理想解']) **2).sum(axis=1))# 综合得分指数Result['综合得分指数'] = Result['负理想解'] / (Result['负理想解'] + Result['正理想解'])Result['排序'] = Result.rank(ascending=False)['综合得分指数']returnResult, Z, weightif__name__=='__main__':data= pd.read_csv('testdata.csv',sep =',',encoding='gbk',header=None)data1 = data.copy()data1[0] = normalization1(data1[0])data1[1] = normalization1(data1[1])data1[2] = normalization1(data1[2])data1[3] = normalization1(data1[3])[result,z1,weight] = topsis(data1)

最终得到的评分结果(部分)、正负理想解和权重如下:

往期推荐:

XGBoost(二):R语言实现

疫情下,你还好吗

R语言爬虫与文本分析

图片相似度识别:pHash算法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容