r语言熵权法求权重(真实案例完整流程)
基本原理
在信息論中,熵是對(duì)不確定性的一種度量。信息量越大,不確定性就越小,熵也就越小;信息量越小,不確定性越大,熵也越大。
根據(jù)熵的特性,可以通過計(jì)算熵值來判斷一個(gè)事件的隨機(jī)性及無序程度,也可以用熵值來判斷某個(gè)指標(biāo)的離散程度,指標(biāo)的離散程度越大,該指標(biāo)對(duì)綜合評(píng)價(jià)的影響(權(quán)重)越大。比如樣本數(shù)據(jù)在某指標(biāo)下取值都相等,則該指標(biāo)對(duì)總體評(píng)價(jià)的影響為0,權(quán)值為0.
熵權(quán)法是一種客觀賦權(quán)法,因?yàn)樗鼉H依賴于數(shù)據(jù)本身的離散性。
熵權(quán)法步驟
第一步:指標(biāo)的歸一化處理(異質(zhì)指標(biāo)同質(zhì)化):由于各項(xiàng)指標(biāo)的計(jì)量單位并不統(tǒng)一,因此在用他們計(jì)算綜合指標(biāo)前,先要進(jìn)行標(biāo)準(zhǔn)化處理,即把指標(biāo)的絕對(duì)值轉(zhuǎn)化為相對(duì)值,從而解決各項(xiàng)不同質(zhì)指標(biāo)值的同質(zhì)化問題。
另外,正向指標(biāo)和負(fù)向指標(biāo)數(shù)值代表的含義不同(正向指標(biāo)數(shù)值越高越好,負(fù)向指標(biāo)數(shù)值越低越好),因此,對(duì)于正向、負(fù)向指標(biāo)需要采用不同的算法進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理。
正向指標(biāo):xij′=xij?min?{x1j,…,xnj}max?{x1j,…,xrj}?min?{x1j,…,xnj}x_{i j}^{\prime}=\frac{x_{i j}-\min \left\{x_{1 j}, \ldots, x_{n j}\right\}}{\max \left\{x_{1 j}, \ldots, x_{r j}\right\}-\min \left\{x_{1 j}, \ldots, x_{n j}\right\}}xij′?=max{x1j?,…,xrj?}?min{x1j?,…,xnj?}xij??min{x1j?,…,xnj?}?
負(fù)向指標(biāo):xij′=max?{x1j,…,xnj}?xijmax?{x1j,…,xrj}?min?{x1j,…,xnj}x_{i j}^{\prime}=\frac{\max \left\{x_{1 j}, \ldots, x_{n j}\right\}-x_{i j}}{\max \left\{x_{1 j}, \ldots, x_{r j}\right\}-\min \left\{x_{1 j}, \ldots, x_{n j}\right\}}xij′?=max{x1j?,…,xrj?}?min{x1j?,…,xnj?}max{x1j?,…,xnj?}?xij??
第二步:計(jì)算第j項(xiàng)指標(biāo)下第i個(gè)樣本值占該指標(biāo)的比重 pij=xij∑i=1nxij,i=1,?,n,j=1,?,mp_{i j}=\frac{x_{i j}}{\sum_{i=1}^{n} x_{i j}}, \quad i=1, \cdots, n, j=1, \cdots, mpij?=∑i=1n?xij?xij??,i=1,?,n,j=1,?,m
第三步:計(jì)算第j項(xiàng)指標(biāo)的熵值 ej=?k∑i=1npijln?(pij),j=1,?,me_{j}=-k \sum_{i=1}^{n} p_{i j} \ln \left(p_{i j}\right), \quad j=1, \cdots, mej?=?ki=1∑n?pij?ln(pij?),j=1,?,m 其中 k=1/ln?(n)>0k=1 / \ln (n)>0k=1/ln(n)>0 ,滿足 ej≥0e_{j} \geq 0ej?≥0。
第四步:計(jì)算信息熵冗余度(差異) dj=1?ej,j=1,?,md_{j}=1-e_{j}, \quad j=1, \cdots, mdj?=1?ej?,j=1,?,m
第五步:計(jì)算各項(xiàng)指標(biāo)的權(quán)重 wj=dj∑j=1mdj,j=1,?,mw_{j}=\frac{d_{j}}{\sum_{j=1}^{m} d_{j}}, \quad j=1, \cdots, mwj?=∑j=1m?dj?dj??,j=1,?,m
第六步:計(jì)算各樣本的綜合得分 si=∑j=1mwjxij,i=1,?,ns_{i}=\sum_{j=1}^{m} w_{j} x_{i j}, \quad i=1, \cdots, nsi?=j=1∑m?wj?xij?,i=1,?,n 其中, xijx_{i j}xij? 為標(biāo)準(zhǔn)化后的數(shù)據(jù)。
腳本實(shí)現(xiàn)
數(shù)據(jù)讀入。
library(forecast) library(XLConnect) sourui <- read.csv("E:/R/operation/train.csv",header = T)部分?jǐn)?shù)據(jù)展現(xiàn)
索引列刪除
sourui$案例 <- NULL第一步:歸一化處理。
min.max.norm <- function(x){(x-min(x))/(max(x)-min(x)) }max.min.norm <- function(x){(max(x)-x)/(max(x)-min(x)) }sourui_1 <- apply(sourui[,-c(7,11)],2,min.max.norm) #正向指標(biāo) sourui_2 <- apply(sourui[,c(7,11)],2,max.min.norm) #負(fù)向指標(biāo)sourui_t <- cbind(sourui_1,sourui_2)第二步:求出所有樣本對(duì)指標(biāo)Xj的貢獻(xiàn)總量
first1 <- function(data) {x <- c(data)for(i in 1:length(data))x[i] = data[i]/sum(data[])return(x) } dataframe <- apply(sourui_t,2,first1)第三步:將上步生成的矩陣每個(gè)元素變成每個(gè)元素與該ln(元素)的積并計(jì)算信息熵。
first2 <- function(data) {x <- c(data)for(i in 1:length(data)){if(data[i] == 0){x[i] = 0}else{x[i] = data[i] * log(data[i])}}return(x) } dataframe1 <- apply(dataframe,2,first2)k <- 1/log(length(dataframe1[,1])) d <- -k * colSums(dataframe1)第四步:計(jì)算冗余度。
d <- 1-d第五步:計(jì)算各項(xiàng)指標(biāo)的權(quán)重。
w <- d/sum(d) w最終輸出結(jié)果展現(xiàn),輸出的為各項(xiàng)指標(biāo)的權(quán)重得分
應(yīng)用:基于各指標(biāo)及權(quán)重值,可以對(duì)每個(gè)樣本計(jì)算線性得分(使用歸一化后數(shù)據(jù))
實(shí)現(xiàn):
sourui$評(píng)分 <- 0 for (i in 1:13){ sourui$評(píng)分 <- sourui$評(píng)分 + dataframe0[,i] * w1[i,] }總結(jié)
以上是生活随笔為你收集整理的r语言熵权法求权重(真实案例完整流程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIML初探
- 下一篇: Github Star 7.2K,来自百