Entropy算法python实现

熵属于物理概念,最先由申农引入到信息论,目前已经在工程技术、社会经济等领域得到了非常广泛的应用。
熵权法的基本思路是依据指标变异性的大小来确定权重。其前提是,若某个指标的信息熵越小,则指标值得变异程度越大,在综合评价中所能起到的作用也越大,其权重越大。相反,某个指标的信息熵越大,则指标值得变异程度越小,在综合评价中所起到的作用也越小,其权重越小。优于其思路简单,易于理解,目前已经在工程技术、社会经济等领域得到了非常广泛的应用。
熵权法具有的问题是过于客观,有时会和实际情况不符,如耕地坡度的差异,本来较大差异对该地区耕地潜力不会造成太大影响,但是会将其权重判定很大。
实现步骤:
(1)数据归一化
设有n个评价单元,m项评价指标,定量取得各评价单元对应评价指标的数据,形成原始数据矩 ,利用公式4-6,公式4-7归一化处理后,得标准化矩阵,即:
(4-5)
其中,。
正项指标公式:
(4-6)
负向指标公式:
(4-7)
(2) 求各指标的信息熵
计算第j项指标的熵值:
, (4-8)
其中,, ,满足,
(3)确定各指标权重
计算第j项指标的权重:

import numpy as np
import xlrd
 
path=u'D:\\数据处理.xlsx'   #读数据并求熵
hn,nc=21,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(data):    #返回每个样本的指数
    n=np.shape(data)[0]
    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)
#    #计算权重
    w=(1-e)/np.sum(1-e)
    w = [round(i,4) for i in w]
    print(w)
    recodes=np.sum(data*w,axis=1)
    return recodes
data=readexcel(hn,nc)
grades=entropy(data)

"""   归一化
    n,m=np.shape(data0)  #行为样本数,列为指标个数 
    
    maxium=np.max(data0,axis=0)  #下面是归一化  axis=0为列项 axis=1为横向
    minium=np.min(data0,axis=0)
    data= (data0-minium)*1.0/(maxium-minium)
    ##计算第j项指标,第i个样本占该指标的比重

"""

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值