一、熵权法介绍

熵最先由申农引入信息论,目前已经在工程技术、社会经济等领域得到了非常广泛的应用。

熵权法的基本思路是根据各个特征和它对应的值的变异性的大小来确定客观权重。

一般来说,若某个特征的信息熵越小,表明该特征的值得变异(对整体的影响)程度越大,提供的信息量越多,在综合评价中所能起到

的作用也越大,其权重也就越大。相反,某个特征的信息熵越大,表明指标值得变异(对整体的影响)程度越小,提供的信息量也越少,

在综合评价中所起到的作用也越小,其权重也就越小。

二、熵权法赋权步骤

1. 数据标准化(数据归一化)

将各个指标的数据进行标准化(归一化)处理。

假设给定了k个特征,其中(每个特征的值表示)。假设对各特征数据(值)标准化后的值为,那么

i 表示特征序列,j 表示 i 特征序列对应的各个具体的值的序列,所谓的序列就是起到标号的作用,方便人们理解公式的运行过程。

2. 求各指标的信息熵

根据信息论中信息熵的定义,一组数据的信息熵。其中,如果,则定义

3. 确定各指标权重

根据信息熵的计算公式,计算出各个特征的信息熵为 。通过信息熵计算各指标的权重: 。

4. 对各个特征进行评分

根据计算出的指标权重,设Zl为第l个特征的最终得分,则 

import xlrd
import numpy as np #读数据并求熵
path=u"D:\\LearningResource\\myLearningData\\hostital.xls"
hn,nc=1,1
#hn为表头行数,nc为表头列数
sheetname=u'Sheet1' def readexcel(hn,nc):
data = xlrd.open_workbook(path)
table = data.sheet_by_name(sheetname)
nrows = table.nrows
data=[]
for i in range(hn,nrows):
data.append(table.row_values(i)[nc:])
return np.array(data) def entropy(data0):
#返回每个样本的指数
#样本数,指标个数
n,m=np.shape(data0)
#一行一个样本,一列一个指标
#下面是归一化
maxium=np.max(data0,axis=0)
minium=np.min(data0,axis=0)
data= (data0-minium)*1.0/(maxium-minium)
##计算第j项指标,第i个样本占该指标的比重
sumzb=np.sum(data,axis=0)
data=data/sumzb
#对ln0处理
a=data*1.0
a[np.where(data==0)]=0.0001
# #计算每个指标的熵
e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0)
print(e)
# #计算权重
w=(1-e)/np.sum(1-e)
recodes=np.sum(data0*w,axis=1)
return recodes data=readexcel(hn,nc)
grades=entropy(data)
print(grades)

原数据集

吴裕雄 python 熵权法确定特征权重的更多相关文章

  1. 吴裕雄 python 机器学习——数据预处理过滤式特征选取SelectPercentile模型

    from sklearn.feature_selection import SelectPercentile,f_classif #数据预处理过滤式特征选取SelectPercentile模型 def ...

  2. 吴裕雄 python 机器学习——数据预处理过滤式特征选取VarianceThreshold模型

    from sklearn.feature_selection import VarianceThreshold #数据预处理过滤式特征选取VarianceThreshold模型 def test_Va ...

  3. 吴裕雄 python 机器学习——数据预处理包裹式特征选取模型

    from sklearn.svm import LinearSVC from sklearn.datasets import load_iris from sklearn.feature_select ...

  4. 基于topsis和熵权法

    % % X 数据矩阵 % % n 数据矩阵行数即评价对象数目 % % m 数据矩阵列数即经济指标数目 % % B 乘以熵权的数据矩阵 % % Dist_max D+ 与最大值的距离向量 % % Dis ...

  5. 熵权法(the Entropy Weight Method)以及MATLAB实现

    按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量:如果指标的信息熵越小,该指标提供的信息量越小,在综合评价中所起作用理当越小,权重就应该越低.因此,可利用信息熵这个工 ...

  6. 熵权法原理及matlab代码实现

    参考原理博客地址https://blog.csdn.net/u013713294/article/details/53407087 一.基本原理 在信息论中,熵是对不确定性的一种度量.信息量越大,不确 ...

  7. 吴裕雄 python深度学习与实践(17)

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import time # 声明输 ...

  8. 吴裕雄 python神经网络 水果图片识别(4)

    # coding: utf-8 # In[1]:import osimport numpy as npfrom skimage import color, data, transform, io # ...

  9. 吴裕雄 python神经网络 水果图片识别(2)

    import osimport numpy as npimport matplotlib.pyplot as pltfrom skimage import color,data,transform,i ...

随机推荐

  1. flume用场景及架构原理

    Flume是什么 1.flume可以将采集到的数据存储到HDFS上,也可以放在Hbase上. 2.flume就是一个中间插件,他的作用就是屏蔽数据源和数据存储系统的差异.可以在不同的数据源采集数据,因 ...

  2. Android 接入X5WebView,让WebView加载更快;

    X5内核,微信和QQ浏览器都在用的WebView: 官网地址:https://x5.tencent.com,详细的信息进官网了解: 这是官方的宣传语: 1) 速度快:相比系统webview的网页打开速 ...

  3. hadoop 问题及解决方式

    转自http://www.bkjia.com/ASPjc/931209.html 解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows ...

  4. 初步认识Angulajs

     Angulajs是一个MVC前段框架,项目中使用Angulajs必须按照框架的写法编写代码,可以统一代码规范易于后期代码的维护. M Model 模型-数据,V View 视图-表现层 HTML/C ...

  5. python协程的使用

    1.Python对协程的支持是通过generator(生成器 yield)实现的.协程执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行. 2.调用生成器运行的过程中 ...

  6. c# 和 java <转载>http://www.cnblogs.com/zhucai/archive/2011/02/16/csharp-compare-java.html

    从语法层面来讲,c# 和 java 是非常相似的. <转载> 这篇文章对C#与Java做一个语言级的对比,方便C#转Java或Java转C#的人有个大致了解.这里大致用C#3.0与Java ...

  7. django之signal机制分析

    django的signal在djangobb中的使用: from django.db.models.signals import post_save from django.dispatch impo ...

  8. idea 添加 VUE 的语法支持和开发

    <一>VUE的开发分两种,一种是直接在HTML文件中使用,一种是VUE文件的形式开发 1,首先我们先让 HTML 文件支持 VUE 的语法指令提示 2,File -> Setting ...

  9. java对象比较==和equals的区别

    转载:http://blog.csdn.net/bluesky_usc/article/details/51849125 1值比较 即内容相同,我们就认为是相等的.比如:int i=5:int j = ...

  10. sql 日期格式

    select CONVERT(varchar(10), getDate(),121) --不要时间2002-01-01 select CONVERT(varchar(10), getDate(),12 ...