TOPSIS綜合評價法
是進(jìn)行多個對象選擇排序的方法铸抑,其通過計算各對像與最優(yōu)方案餐抢、最劣方案的相對距離進(jìn)行排序洽议,它用于解決多對象多屬性決策問題偿衰。本文主要是介紹在R語言
中如何用TOPSIS綜合評價法
進(jìn)行多對象選擇決策挂疆。
TOPSIS綜合評價法
一般地,TOPSIS綜合評價法
主要包含兩個步驟:計算權(quán)重和計算相對接近度下翎。如需詳細(xì)了解TOPSIS綜合評價法
的原理和方法缤言,請自行百度,網(wǎng)上有許多非常詳盡的原理說明和案例講解视事。
計算權(quán)重
根據(jù)熵權(quán)法確定各個指標(biāo)的權(quán)重胆萧;計算各指標(biāo)信息熵,指標(biāo)的信息熵越小俐东,則該指標(biāo)表達(dá)信息的不確定性小跌穗,在綜合評價中對決策的幫助更大,即應(yīng)該有較大的權(quán)重虏辫。熵權(quán)法是一種客觀的賦予權(quán)重的方法蚌吸,它通過各個指標(biāo)所提供的信息不確定性來確定各指標(biāo)的權(quán)重
計算相對接近度
根據(jù)權(quán)重加權(quán)規(guī)范化指標(biāo)屬性矩陣后,確定正理想方案Amax和負(fù)理想方案 Amin砌庄,計算各備選方案與Amax 羹唠、Amin的距離,以評估與正負(fù)理想方案的接近程度娄昆,根據(jù)相對接近度確定優(yōu)先次序佩微。其中計算距離一般使用歐式距離。
R語言實(shí)現(xiàn)過程
按照慣例稿黄,導(dǎo)入需要使用的包data.table
喊衫、plyr
。然后載入使用的數(shù)據(jù)杆怕,我們簡單看一下案例數(shù)據(jù)情況族购。
dataset <- fread("/R/TOPSIS/dataset.csv")
其中的字段target即為目標(biāo)字段,我們需要對其含有的8個方案(A~H)進(jìn)行綜合評價排序陵珍,選擇其中的最優(yōu)方案寝杖。該數(shù)據(jù)集中的指標(biāo)均為正向指標(biāo)。正向指標(biāo)表示指標(biāo)的數(shù)值越高越好互纯,負(fù)向指標(biāo)則表示指標(biāo)的數(shù)值越低越好瑟幕,這決定了該指標(biāo)在進(jìn)行權(quán)重計算時的處理方式。
計算權(quán)重
計算權(quán)重的第一步是計算各個指標(biāo)的熵值,由于我們用到的指標(biāo)均是正向指標(biāo)只盹,所以選擇自定義函數(shù)entropy_positive
即可辣往。如果指標(biāo)既存在正向指標(biāo)又存在負(fù)向指標(biāo),則可分開進(jìn)行計算殖卑。自定義函數(shù)情況如下:
#正向指標(biāo)計算熵值
entropy_positive <- function(x){
#指標(biāo)歸一化
y = (x -min(x)) / (max(x) - min(x))
#計算各指標(biāo)值的比重
p = y / sum(y)
#計算各指標(biāo)的熵值
entropy = -1/log(length(x)) * sum(ifelse(p == 0,0,p *log(p)))
}
#負(fù)向指標(biāo)計算熵值
entropy_negative <- function(x){
#指標(biāo)歸一化
y = (max(x) -x) / (max(x) - min(x))
#計算各指標(biāo)值的比重
p = y/ sum(y)
#計算各指標(biāo)的熵值
entropy = -1/log(length(x)) * sum(ifelse(p == 0,0,p *log(p)))
}
調(diào)用函數(shù)并完成權(quán)重的計算站削,x1~x8的權(quán)重依次為:11.10%、6.61%孵稽、28.19%许起、7.08%、11.88%菩鲜、8.11%园细、11.94%、15.09%接校,計算過程如下:
entropy_data <- colwise(entropy_positive)(dataset[,-9])
entropy_weight <- (1 - entropy_data)/ sum(1 -entropy_data)
計算相對接近度
在將指標(biāo)向量規(guī)范化后猛频,利用熵值法得到的權(quán)重計算得到加權(quán)標(biāo)準(zhǔn)化矩陣,然后提取正理想方案和負(fù)理想方案并計算出各個方案距離正負(fù)理想方案的距離馅笙,最終根據(jù)計算得到距離比值進(jìn)行排序伦乔。具體計算過程如下:
#向量規(guī)范化
vector_normalize <- function(x){
x / sqrt(sum(x^2))
}
#調(diào)用函數(shù)進(jìn)行向量規(guī)范化
dataset_normal <- colwise(vector_normalize)(dataset[,-9])
#加權(quán)標(biāo)準(zhǔn)化矩陣
dataset_normal_weight <- adply(dataset_normal,1,.fun = function(x){x*entropy_weight})
#確定正理想方案和負(fù)理想方案
best_case <- colwise(max)(dataset_normal_weight)
worst_case <- colwise(min)(dataset_normal_weight)
#計算各方案與正負(fù)理想方案的距離
distance_best <- adply(dataset_normal_weight,1,.fun = function(x){sqrt(sum((x -best_case)^2))})
distance_worst <- adply(dataset_normal_weight,1,.fun = function(x){sqrt(sum((x -worst_case)^2))})
proximity_data <- data.table(target = dataset$target,distance_best = distance_best$V1,distance_worst = distance_worst$V1)
#計算相對接近度并進(jìn)行排序
proximity_data[,proximity := distance_worst / (distance_best + distance_worst)][order(-proximity)]
proximity_data[,rank := rank(-proximity)][order(rank)]
至此,我們就完成了用TOPSIS綜合評價法
進(jìn)行多對象多指標(biāo)的最優(yōu)對象選擇董习,輸出的結(jié)果如下,顯然在這八個方案中爱只,方案A為最優(yōu)方案皿淋。