日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言熵权法求权重(真实案例完整流程)

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r语言熵权法求权重(真实案例完整流程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本原理

在信息論中,熵是對不確定性的一種度量。信息量越大,不確定性就越小,熵也就越小;信息量越小,不確定性越大,熵也越大。

根據熵的特性,可以通過計算熵值來判斷一個事件的隨機性及無序程度,也可以用熵值來判斷某個指標的離散程度,指標的離散程度越大,該指標對綜合評價的影響(權重)越大。比如樣本數據在某指標下取值都相等,則該指標對總體評價的影響為0,權值為0.

熵權法是一種客觀賦權法,因為它僅依賴于數據本身的離散性。

熵權法步驟

第一步:指標的歸一化處理(異質指標同質化):由于各項指標的計量單位并不統一,因此在用他們計算綜合指標前,先要進行標準化處理,即把指標的絕對值轉化為相對值,從而解決各項不同質指標值的同質化問題。

另外,正向指標和負向指標數值代表的含義不同(正向指標數值越高越好,負向指標數值越低越好),因此,對于正向、負向指標需要采用不同的算法進行數據標準化處理。

正向指標: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?}?

負向指標: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項指標下第i個樣本值占該指標的比重 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項指標的熵值 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=1n?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

第四步:計算信息熵冗余度(差異) dj=1?ej,j=1,?,md_{j}=1-e_{j}, \quad j=1, \cdots, mdj?=1?ej?,j=1,?,m

第五步:計算各項指標的權重 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

第六步:計算各樣本的綜合得分 si=∑j=1mwjxij,i=1,?,ns_{i}=\sum_{j=1}^{m} w_{j} x_{i j}, \quad i=1, \cdots, nsi?=j=1m?wj?xij?,i=1,?,n 其中, xijx_{i j}xij? 為標準化后的數據。

腳本實現

數據讀入。

library(forecast) library(XLConnect) sourui <- read.csv("E:/R/operation/train.csv",header = T)

部分數據展現

索引列刪除

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) #正向指標 sourui_2 <- apply(sourui[,c(7,11)],2,max.min.norm) #負向指標sourui_t <- cbind(sourui_1,sourui_2)

第二步:求出所有樣本對指標Xj的貢獻總量

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)

第三步:將上步生成的矩陣每個元素變成每個元素與該ln(元素)的積并計算信息熵。

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)

第四步:計算冗余度。

d <- 1-d

第五步:計算各項指標的權重。

w <- d/sum(d) w

最終輸出結果展現,輸出的為各項指標的權重得分


應用:基于各指標及權重值,可以對每個樣本計算線性得分(使用歸一化后數據)

實現:

sourui$評分 <- 0 for (i in 1:13){ sourui$評分 <- sourui$評分 + dataframe0[,i] * w1[i,] }

總結

以上是生活随笔為你收集整理的r语言熵权法求权重(真实案例完整流程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。