码迷,mamicode.com
首页 > 编程语言 > 详细

吴裕雄 python 熵权法确定特征权重

时间:2018-12-25 20:28:15      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:row   python   假设   rate   pen   url   app   序列   方法   

一、熵权法介绍

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

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

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

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

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

二、熵权法赋权步骤

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=uSheet1

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 熵权法确定特征权重

标签:row   python   假设   rate   pen   url   app   序列   方法   

原文地址:https://www.cnblogs.com/tszr/p/10175501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!