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,] }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 聊一聊Zabbix都监控哪些参数

    聊一聊Zabbix都监控哪些参数面试中的话,经常被问到技术方面的问题,也就是知识点的掌握程度,如果你准备充分的话,这个到不难,但一些开放性的东西,你可能答得就不是很好,便来到了我们的正题Zabbix监控哪些参数呢?这个范围是比较大、比较开放的,阔以以点带面的回答,也可概括性的回答,下面列举一些数据库:磁盘使用情况、内存使用情况、并发链接数量 数据库增删改查的频率、主从状态、缓冲池web:web服务是否正常、订单是否能正常下单注册是否正常、服务的响应时间、服务的并发量磁盘:使用率、block数,Inode数

  • SDN基本概念

    SDN基本概念

  • layui实现数据分页功能_layui分页使用

    layui实现数据分页功能_layui分页使用最近需要对后台的数据进行分页渲染并且需要进行表头动态渲染,因此和小伙伴一起学习了layui的数据表格渲染,然后进行了改进,成功之后记录了下来先说前端HTML和js代码先下载layuijs文件,在页面引入layui的js在HTMLboday标签中添加table容器,id为demo $(function(){ getData(); }) functiongetData(){

    2022年10月24日
  • Vue 插槽之 作用域插槽「建议收藏」

    现在我有如下需求,子组件<user/>中此时有一条用户的信息(userInfo);我要在父组件通过插槽展示这个用户的姓名(userInfo.name);注意:这里的父组件并没有这个用户的信息,子组件中有,如果直接在父组件{{userInfo.name}}获取这条信息是获取不到的;因为,只有<user/>组件可以访问到userInfo,而我们提供的内容是在父…

  • 详解Java异或运算符

    详解Java异或运算符文章原地址目录目录 性质 应用举例 其他用途示例 异或是一种基于二进制的位运算,用符号XOR或者^表示,其运算法则是对运算符两侧数的每一个二进制位同值则取0,异值则取1.简单理解就是不进位加法,如1+1=0,0+0=0,1+0=1.Forexample:3^5=6转成二进制后就是0011^0101二号位和三号位都是异值取1末尾两个1同值取零,…

  • JFinal开发web项目出现故障小记

    JFinal开发web项目出现故障小记

发表回复

您的电子邮箱地址不会被公开。

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