栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

熵权法示例

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

熵权法示例

作用

熵是指物质的分散程度,熵越大,说明物质越没有条理。同理,用在数据的指标上,当熵越大时,说明该数据越散乱,数据就越没有价值。
当给一组数据不同权重,让这组数据共同表示出该数据的特征时,该组数据的熵越大,说明数据越没有条理,对于指标的特征表示价值就越小。
因此通过熵权法对判定每组数据的每个类型权重是有一定指导作用的。

内容

    将数据归一化处理,选择最常用的最大最小归一化,处理数据。

    将处理好的数据,分别求出该数据在该类型中的占比情况,形成占比矩阵

    利用求熵公式,分别求出每一类信息的熵

      该公式需要注意所有熵之和为1,即每个类型的熵相加=1,p值一纸,k值可求

    通过熵值,算出权重,即该类型数据在该比重中的占比

代码实现

由于没有相关库,所以代码自己进行实现,其中代码利用了pandas、numpy对数据进行操作

def cal_weight(x):
    '''熵值法计算变量的权重'''
    # 归一化
    x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))

	# 对数据信息收集
    rows = x.index.size  # 行
    cols = x.columns.size  # 列

	# 计算k值
    k = 1.0 / math.log(rows)

	# 计算logm值
    lnf = [[None] * cols for i in range(rows)]
    x = array(x)
    lnf = [[None] * cols for i in range(rows)]
    lnf = array(lnf)
    for i in range(0, rows):
        for j in range(0, cols):
            if x[i][j] == 0:
                lnfij = 0.0
            else:
                p = x[i][j] / x.sum(axis=0)[j]
                lnfij = math.log(p) * p * (-k)
            lnf[i][j] = lnfij
    lnf = pd.Dataframe(lnf)
    E = lnf

    # 计算权重
    d = 1 - E.sum(axis=0)
    w = [[None] * 1 for i in range(cols)]
    for j in range(0, cols):
        wj = d[j] / sum(d)
        w[j] = wj
    w = pd.Dataframe(w)
    return w
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号