建模笔记——熵权法(Python实现)

这篇具有很好参考价值的文章主要介绍了建模笔记——熵权法(Python实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、模型介绍

熵权法是一种通过对已知数据的处理,从而获得影响因子权重的方法,其基本思路是根据指标变异性的大小来确定客观权重。

熵权法的优点在于其根据各项指标指标值的变异程度来确定指标权数的,是一种客观赋权法,避免了人为因素带来的偏差。相对那些主观赋值法,精度较高客观性更强,能够更好的解释所得到的结果。

熵权法的缺点在于忽略了指标本身重要程度,有时确定的权重会与预期的结果相差甚远,同时熵值法不能减少评价指标的维数,也就是熵权法符合数学规律具有严格的数学意义,但往往会忽视决策者主观的意图。并且如果指标值的变动很小或者很突然地变大变小,熵权法使用时会存在一定的局限。

二、基本思路与步骤

(1)指标正向化

不同的指标代表含义不一样,有的指标越大越好,称为正向指标;有的指标越小越好,称为负向指标;而有些指标在某个点或者区间是最好的,称为适度指标。为方便评价,应把所有指标进行同向化处理。

 正向指标:

 负向指标:

适度指标:

(2)数据标准化

将指标按比例缩放,使它们落在特定的区间,从而可以去除量纲的影响,使得不同单位或者量级的指标能够进行比较、加权。

这里采用常用的离差标准化法对数据进行处理:

(3)计算信息熵

根据信息论中信息熵的定义,一组数据的信息熵计算公式为:

 如果:

则:

(4)确定各指标的权重并计算得分

通过信息熵计算各指标的权重:

三、代码实现

数据表格式:

python 熵权法,统计模型,python,numpy,数据分析

这里指标名后缀用Positive(正向指标)、Negative(负向指标)、Moderate(适度指标)来对指标类型进行标识。 

Python代码如下:文章来源地址https://www.toymoban.com/news/detail-586529.html

import pandas as pd
import numpy as np
import re
#定义文件读取方法
def read_data(file):
    file_path=file
    raw_data = pd.read_excel(file_path, header=0)
    #print(raw_data)
    return raw_data

#定义数据正向化、标准化方法
def data_normalization(data):
    data_nor=data.copy()
    columns_name=data_nor.columns.values
    for i in range((len(columns_name)-1)):
        name=columns_name[i+1]
        #print(name)
        #正向指标直接标准化
        if ('Positive' in name)==True:
            max=data_nor[columns_name[i+1]].max()
            min=data_nor[columns_name[i+1]].min()
            data_nor[columns_name[i+1]]=(data_nor[columns_name[i+1]]-min)/(max-min)
            #print(data_nor[columns_name[i+1]])

        #负向指标先正向化、在标准化
        if ('Negative' in name)==True:
            max0=data_nor[columns_name[i+1]].max()
            data_nor[columns_name[i+1]]=(max0-data_nor[columns_name[i+1]])#正向化


            max=data_nor[columns_name[i+1]].max()
            min=data_nor[columns_name[i+1]].min()
            data_nor[columns_name[i+1]]=(data_nor[columns_name[i+1]]-min)/(max-min)#标准化
            #print(data_nor[columns_name[i+1]])

        #适度指标先正向化、在标准化
        if ('Moderate' in name)==True:
            try:
                val_range= re.search(r'.*[\((](.*),(.*)[\))]',name)
                val_down= float(val_range.group(1))
                val_up= float(val_range.group(2))
                val_op=(val_up+val_down)/2
            except:
                val_range= re.search(r'.*[\((](.*)[\))]',name)
                val_op= float(val_range.group(1))
            #print(val_op)
            data_nor[columns_name[i + 1]] = 1-(abs(data_nor[columns_name[i + 1]]-val_op)/(abs(data_nor[columns_name[i + 1]]-val_op).max()))  #正向化

            max=data_nor[columns_name[i+1]].max()
            min=data_nor[columns_name[i+1]].min()
            data_nor[columns_name[i+1]]=(data_nor[columns_name[i+1]]-min)/(max-min)#标准化
            #print(data_nor[columns_name[i+1]])

    #print(data_nor)
    return data_nor


#定义计算熵权方法
def entropy_weight(data_nor):
    columns_name=data_nor.columns.values
    n=data_nor.shape[0]
    E=[]
    for i in columns_name[1:]:

        #计算信息熵
        #print(i)
        data_nor[i]=data_nor[i]/sum(data_nor[i])

        data_nor[i]=data_nor[i]*np.log(data_nor[i])
        data_nor[i]=data_nor[i].where(data_nor[i].notnull(),0)
        #print(data_nor[i])
        Ei=(-1)/(np.log(n))*sum(data_nor[i])
        E.append(Ei)
    #print(E)
    #计算权重
    W=[]
    for i in E:
        wi=(1-i)/((len(columns_name)-1)-sum(E))
        W.append(wi)
    #print(W)
    return W

#计算得分
def entropy_score(data,w):
    data_s=data.copy()
    columns_name=data_s.columns.values
    for i in range((len(columns_name)-1)):
        name=columns_name[i+1]
        data_s[name]=data_s[name]*w[i]
    return data_s





file='data.xls'#声明数据文件地址
data=read_data(file)#读取数据文件
data_nor=data_normalization(data)#数据标准化、正向化,生成标准化后的数据data_nor
W=entropy_weight(data_nor)#计算熵权权重
data_s=entropy_score(data,W)#计算赋权后的得分,使用原数据计算
data_nor_s=entropy_score(data_nor,W)

W.insert(0,'熵权法权重')#将结果保存为csv
W0=pd.DataFrame(W).T
data_s.to_csv('熵权法得分结果(原始数据).csv',index=0)
W0.to_csv('熵权法得分结果(原始数据).csv', mode='a', header=False,index=0)
data_nor_s.to_csv('熵权法得分结果(标准化数据).csv',index=0)
W0.to_csv('熵权法得分结果(标准化数据).csv', mode='a', header=False,index=0)

到了这里,关于建模笔记——熵权法(Python实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【赋权算法】Python实现熵权法

    在开始之前,我们先说一下信息熵的概念。 当一件事情发生,如果是意料之中,那么这个事情就并不能拿来当做茶余饭后的谈资,我们可以说这个事情并没有什么信息和价值。而当一件不可能发生的事情发生的时候,我们可能就会觉得震撼三观,这件事情太Crazy了,带来的信

    2024年02月10日
    浏览(43)
  • 数学建模之熵权法(EWM)matlab实例实现

    本文参考http://blog.sina.com.cn/s/blog_710e9b550101aqnv.html 熵权法是一种客观赋值的方法,即它通过数据所包含的信息量来确定权重,形象的说如果每个人考试都能考100分,那么这个指标对于这些人的评价是毫无意义的,因为没有任何区分度,熵权法就是通过区分度来确定对于特征的

    2023年04月08日
    浏览(41)
  • 数学建模:熵权法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 构建原始矩阵 D a t a Data D a t a 形状为 m ∗ n m *n m ∗ n ,其中 m m m 为评价对象, n n n 为评价指标。 对 D a t a Data D a t a 矩阵的指标进行 正向化处理 ,得到矩阵 X X X . 计算每一个指标在每一个对象下的所占该指标的比重,然后

    2024年02月10日
    浏览(44)
  • 数学建模-熵权法

    熵权法:根据数据本身建立评价体系。 什么时候用? 数据全面,缺少文献或主观依据的题目,文献很难帮助我们确定影响水质的哪一个因素最重要,很难告诉我们指标的重要程度如何衡量。追求公平公正。 缺点:难以将数据之外的因素考虑进去 对比(层次分析法、TOPSIS法)

    2024年02月09日
    浏览(45)
  • 《零基础数学建模》——TOPSIS+熵权法

    本文大部分是对于数学建模清风老师的课程学习总结归纳而来,我的理解可能有错误,大家发现错误可以在评论区批评指正,课程地址:《数学建模清风》   TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法

    2023年04月09日
    浏览(38)
  • 数学建模之熵权法(SPSSPRO与MATLAB)

    对于某项指标,可以用熵值来判断某个指标的离散程度,其 信息熵值越小 ,指标的离散程度越大(表明指标值得变异程度越大,提供的信息量越多),该指标对综合评价的影响(即 权重 )就 越大 ,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可 利用

    2024年02月02日
    浏览(40)
  • 12.9建模复盘——EXCEL批量处理数据、查找数据、熵权法、可视化

    以下是一些可以查询英国国家数据的网站: 1. 英国政府网站(www.gov.uk):提供各个政府部门的数据和统计信息,包括经济、人口、教育、健康、环境等领域。 2. 英国国家统计局(www.ons.gov.uk):英国的官方统计机构,提供广泛的统计数据和报告,涵盖经济、劳动力、人口、

    2024年02月05日
    浏览(45)
  • MCM备赛笔记——熵权法

    Key Concept 熵权法是一种基于信息熵概念的权重确定方法,用于多指标决策分析中。信息熵是度量信息量的不确定性或混乱程度的指标,在熵权法中,它用来反映某个指标在评价过程中的分散程度,进而确定该指标的权重。指标的分散程度越高,信息熵越小,该指标的权重越大

    2024年01月21日
    浏览(38)
  • TOPSIS法(熵权法)(模型+MATLAB代码)

    TOPSIS可翻译为逼近理想解排序法,国内简称为优劣解距离法 TOPSIS法是一种常用的 综合评价方法 , 其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的距离 极大型指标(效益型指标)  :越高(大)越好 极小型指标(成本型指标)  :越少(小)越好 中间

    2024年02月21日
    浏览(44)
  • 基于熵权法对Topsis模型的修正

    由于层次分析法的最大缺点为:主观性太强,影响判断,对结果有很大影响,所以提出了熵权法修正。 变异程度=方差/标准差。 如何度量信息量的大小: 把不可能的事情变成可能,这里面就有很多信息量。 概率越大,信息量越少 信息熵的定义: 所有概率相等的时候,信息

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包