r语言熵权法求权重(真实案例完整流程)[通俗易懂]

r语言熵权法求权重(真实案例完整流程)[通俗易懂]可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

基本原理

在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。

根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。比如样本数据在某指标下取值都相等,则该指标对总体评价的影响为0,权值为0.

熵权法是一种客观赋权法,因为它仅依赖于数据本身的离散性。

熵权法步骤

第一步:指标的归一化处理(异质指标同质化):由于各项指标的计量单位并不统一,因此在用他们计算综合指标前,先要进行标准化处理,即把指标的绝对值转化为相对值,从而解决各项不同质指标值的同质化问题。

另外,正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于正向、负向指标需要采用不同的算法进行数据标准化处理。

正向指标: x i j ′ = x i j − min ⁡ { x 1 j , … , x n j } max ⁡ { x 1 j , … , x r j } − min ⁡ { x 1 j , … , x n j } 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}
xijmin{
x1j,,xnj}

负向指标: x i j ′ = max ⁡ { x 1 j , … , x n j } − x i j max ⁡ { x 1 j , … , x r j } − min ⁡ { x 1 j , … , x n j } 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个样本值占该指标的比重 p i j = x i j ∑ i = 1 n x i j , i = 1 , ⋯   , n , j = 1 , ⋯   , m p_{i j}=\frac{x_{i j}}{\sum_{i=1}^{n} x_{i j}}, \quad i=1, \cdots, n, j=1, \cdots, m pij=i=1nxijxij,i=1,,n,j=1,,m

第三步:计算第j项指标的熵值 e j = − k ∑ i = 1 n p i j ln ⁡ ( p i j ) , j = 1 , ⋯   , m e_{j}=-k \sum_{i=1}^{n} p_{i j} \ln \left(p_{i j}\right), \quad j=1, \cdots, m ej=ki=1npijln(pij),j=1,,m 其中 k = 1 / ln ⁡ ( n ) > 0 k=1 / \ln (n)>0 k=1/ln(n)>0 ,满足 e j ≥ 0 e_{j} \geq 0 ej0

第四步:计算信息熵冗余度(差异) d j = 1 − e j , j = 1 , ⋯   , m d_{j}=1-e_{j}, \quad j=1, \cdots, m dj=1ej,j=1,,m

第五步:计算各项指标的权重 w j = d j ∑ j = 1 m d j , j = 1 , ⋯   , m w_{j}=\frac{d_{j}}{\sum_{j=1}^{m} d_{j}}, \quad j=1, \cdots, m wj=j=1mdjdj,j=1,,m

第六步:计算各样本的综合得分 s i = ∑ j = 1 m w j x i j , i = 1 , ⋯   , n s_{i}=\sum_{j=1}^{m} w_{j} x_{i j}, \quad i=1, \cdots, n si=j=1mwjxij,i=1,,n 其中, x i j x_{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,] }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185558.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL数据库备份的几种方式

    MySQL数据库备份的几种方式MySQL备份的几种方式最近一直想写点博客,但是不知道写什么,感觉自己最近的知识没有什么增加,今天想到了一篇可以写的博客。以前试过根据data文件夹备份MySQL,但是从来没有成功过,前几天帮助朋友还原MySQL,终于成功的将备份的data文件夹还原成功了。MySQL数据库算是常用的数据库中最好使用的数据库了,对于备份的操作也不例外。所以今天分享一下MySQL数据库的备份的几种方式。方

    2022年6月11日
    31
  • [转载]interp1「建议收藏」

    [转载]interp1「建议收藏」MATLAB中的插值函数为interp1,其调用格式为:yi=interp1(x,y,xi,’method’)其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,’method’表示采用的插值方法,MATLAB提供的插值方法有几种:’method’是最邻近插值,’linear’线性插值;’spline’三次样条插值;’cub…

    2022年5月25日
    41
  • 活期存款利息的计算方法包括_活期存款计算利息天数

    活期存款利息的计算方法包括_活期存款计算利息天数因为活期存款的利息很低,所以,人们对活期存款的利息怎样计算,并不是十分在意。我也如是。可是前些日子我陪一位老同事去买国债,在回家的路上我们偶尔谈到了这个问题,有些问题我也不太明白。但是,我还是想把这个

    2022年8月4日
    1
  • cubieboard上手

    cubieboard上手最近刚买了cubieboard,入手到玩转后的各个过程记录下购买链接:[url]http://item.taobao.com/item.htm?id=18271795262[/url]已有装备:笔记本,无线路由器入手装备:cubieboard,带电源,ttl2usb线等关键问题:无显示器与电视超市购物:读卡器+网线,(从手机上拿的TF卡)[siz…

    2022年7月22日
    7
  • Idea激活码永久有效Idea2021.1激活码教程-持续更新,一步到位[通俗易懂]

    Idea激活码永久有效Idea2021.1激活码教程-持续更新,一步到位[通俗易懂]Idea激活码永久有效2021.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.1成功激活

    2022年6月17日
    39
  • WPF教程三:布局之WrapPanel面板(转 )[通俗易懂]

    WPF教程三:布局之WrapPanel面板(转 )[通俗易懂]WPF教程三:布局之WrapPanel面板WrapPanel:环绕面板WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行,后续排序按照从上至下

    2022年7月1日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号