亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

熵值法原理及Python實現(xiàn)的示例詳解

 更新時間:2023年02月03日 09:41:29   作者:侯小啾  
熵值法也稱熵權法,是學術研究及實際應用中的一種常用且有效的編制指標的方法。本文就來和大家聊聊熵值法原理及Python實現(xiàn),感興趣的小伙伴可以跟隨小編一起學習一下

熵值法也稱熵權法,是學術研究,及實際應用中的一種常用且有效的編制指標的方法。

1.簡單理解 信息熵

機器學習中的決策樹算法是對信息熵的一種典型的應用。

在信息論中,使用 熵 (Entropy)來描述隨機變量分布的不確定性。

假設對隨機變量X,其可能的取值有x1,x2,...,xn 。即有n種可能發(fā)生的結果。其對應發(fā)生的概率依次為p1,p2,...,pn,則事件pi對應的信息熵為:

信息熵中l(wèi)og的底數(shù)通常為2,理論上可以使用不同的底數(shù)。

如何理解信息熵呢,假設已知今天是周日,則對于“明天是周幾”這件事,只有一種可能的結果:是周一,且p=1。則“明天是周幾”的信息熵H(X)為−1×log1=0,取信息熵的最小值0。表示“明天是周幾”這個話題的不確定性很低,明天周幾很確定。

再比如拋一枚硬幣,則結果為正面和反面的概率都是0.5。則信息熵為log2,相比“明天周幾”這件事的信息熵稍大些了。

假設某事情有100中可能的結果,每種結果發(fā)生的概率為0.01。則H(X)=log100,對于等概率均勻分布的事件,不確定的結果種類越多,則熵越大。

2.編制指標 (學術情景應用)

遷移到編制指標的情形,通過下邊一個簡單的示例理解熵權法在學術研究中的應用。

以陳浩,劉媛華的論文《數(shù)字經(jīng)濟促進制造業(yè)高質量發(fā)展了嗎?——基于省級面板數(shù)據(jù)和機器學習模型的實證分析》中部分內容展示為例:

對于離散型的隨機變量,某指標在樣本中出現(xiàn)的頻率即可視為概率P,進而求出每個指標的熵值。

而對于上圖中的連續(xù)型的隨機變量,則在處理思想上與離散型隨機變量有所不同。

通常可以先對數(shù)據(jù)做標準化處理,假設X指標中的第i個樣本的標準化處理結果為Zi:(注意對正向指標和負)

則指標X中的第i個樣本的權重為:

上邊說到,指標的熵值計算公式為:

為了方便求變異系數(shù),這里計算熵值的時候常常在該公式的基礎上再乘以一個常數(shù)K,即

其中K=1/ln(n) ,n是樣本的個數(shù)。易知,乘以常數(shù)后計算出的熵值,通常范圍都是在區(qū)間[0,1]內的。

舉個例子,假設一共有十個樣本,且十個樣本的連續(xù)型X指標數(shù)值非常相近,甚至完全一致。

對數(shù)的底數(shù)取10,則每個樣本的權重都有接近或等于1/10。

通過公式

計算出的熵值則為1,然后引入一個新的指標“差異系數(shù)”來刻畫數(shù)據(jù)之間的差異性大?。词褂?減去熵值得到所謂“差異系數(shù)”,不要跟變異系數(shù)混淆),第j個指標的差異系數(shù)dj?=1−Hj?(H_j為第j個指標的熵值)

計算可知差異系數(shù)為0。則說明該指標在數(shù)值上不存在任何差異(雀食如此)。

隨著數(shù)據(jù)本身數(shù)值上的差距的提升,指標的熵值會逐步減小,差異系數(shù)逐漸增大。這樣說相信很容易理解了。

指標的熵值越?。ú町愊禂?shù)越大),則該指標在最終要編制的指標中所占的權重則越大。

具體的權重計算公式為:

即某指標差異系數(shù)占所有指標差異系數(shù)和的比重。

上圖的情景中,作者首先對二級指標進行衡量,然后使用熵權法,求出每個二級指標的熵值,進而求出權重,分別計算出四個一級指標;

然后再對四個一級指標再次使用熵權法計算權重,進而得到最終指標:制造業(yè)高質量發(fā)展水平。

3.python實現(xiàn)

3.1 數(shù)據(jù)準備

為方便讀者測試,這邊手動生成一段數(shù)據(jù)作為示例。

將指標1,指標2,指標3,指標4,合并編制為一個“綜合指標”。

import pandas as pd
import numpy as np

# 1. 初始數(shù)據(jù) 假設指標4是負向指標,其余三個為正向指標
df1 = pd.DataFrame({'指標1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                    '指標2': [2, 4, 6, 8, 10, 2, 4, 6, 8, 10],
                    '指標3': [1, 2, 1, 3, 2, 1, 3, 2, 3, 1],
                    '指標4': [3, 1, 2, 3, 5, 8, 7, 8, 8, 9]
                   })
print(df1)            

數(shù)據(jù)為DataFrame格式,效果展示如下:

3.2 數(shù)據(jù)預處理

然后是數(shù)據(jù)預處理部分,這里定義一個泛用性較強的標準化處理函數(shù),

該函數(shù)對于正向指標和負向指標(越大越好的指標和越小越好的指標),可以分別進行不同的處理。

(處理邏輯通過代碼可以很容易看出)

同時該函數(shù)也可以兼容只進行其中一種處理的情景。

# 2.數(shù)據(jù)預處理 定義標準化處理函數(shù)
def Standardization(data,cols1=None, cols2=None):
    """
    :param data:目標數(shù)據(jù)
    :param cols1: 需要處理的正向指標列名列表,類型為列表或None [col1, col2, col3]
    :param cols2: 需要處理的負向指標列名列表,類型為列表或None [col1, col2, col3]
    :return: 輸出處理結果
    """
    if cols1 == None and cols2 == None:
        return data
    elif cols1 != None and cols2 == None:
        return (data[cols1] - data[cols1].min())/(data[cols1].max()-data[cols1].min())
    elif cols1 == None and cols2 != None:
        return (data[cols2].max - data[cols2])/(data[cols2].max()-data[cols2].min())
    else:
        a = (data[cols1] - data[cols1].min())/(data[cols1].max()-data[cols1].min())
        b = (data[cols2].max() - data[cols2])/(data[cols2].max()-data[cols2].min())
        return pd.concat([a, b], axis=1)

調用函數(shù),進行標準化處理:

df2 = Standardization(df1, cols1=['指標1', "指標2", "指標3"], cols2=['指標4'])
print(df2)

處理結果如下:

3.3 熵值、權重計算

然后定義一個通過熵值計算權重,及樣本評分的函數(shù)。

def Weightfun(data):
    """
    :param data: 預處理好的數(shù)據(jù)
    :return: 輸出權重。
    """
    K = 1/np.log(len(data))
    e = -K*np.sum(data*np.log(data))
    d = 1-e
    w = d/d.sum()
    return w

該函數(shù)的返回值有兩個,w是權重,score是評分

調用函數(shù),計算出各個指標的權重:

w = Weightfun(df2)
print(w)

各個指標權重如下圖所示:

3.4 編制綜合評價指標

直接將DataFrame格式的數(shù)據(jù)與求出的權重相乘,并求和,即得到通過熵值法編制出的綜合指標,代碼及結果如下圖所示:

df3= df2 * w
df3['綜合指標'] = df3.sum(axis=1)

到此這篇關于熵值法原理及Python實現(xiàn)的示例詳解的文章就介紹到這了,更多相關Python熵值法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Django中六個常用的自定義裝飾器

    詳解Django中六個常用的自定義裝飾器

    這篇文章主要介紹了詳解Django中六個常用的自定義裝飾器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • python學習與數(shù)據(jù)挖掘應知應會的十大終端命令

    python學習與數(shù)據(jù)挖掘應知應會的十大終端命令

    今天我們將介紹一些基本的數(shù)據(jù)收集、探索和聚合—所有這些都是通過shell完成的。如果你使用的是Linux或Mac,那么接下來就不會有任何問題,但是Windows用戶應該在繼續(xù)之前下載一個終端仿真器
    2021-11-11
  • 關于Python3 lambda函數(shù)的深入淺出

    關于Python3 lambda函數(shù)的深入淺出

    今天小編就為大家分享一篇關于Python3 lambda函數(shù)的深入淺出,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • TensorFlow 滑動平均的示例代碼

    TensorFlow 滑動平均的示例代碼

    這篇文章主要介紹了TensorFlow 滑動平均的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作

    Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作

    這篇文章主要介紹了Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Python圖像運算之圖像灰度直方圖對比詳解

    Python圖像運算之圖像灰度直方圖對比詳解

    本篇文章將結合直方圖分別對比圖像灰度變換前后的變化,方便大家更清晰地理解灰度變換和閾值變換,文中的示例代碼講解詳細,需要的可以參考一下
    2022-08-08
  • 詳解python實現(xiàn)小波變換的一個簡單例子

    詳解python實現(xiàn)小波變換的一個簡單例子

    這篇文章主要介紹了詳解python實現(xiàn)小波變換的一個簡單例子,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python爬蟲基礎之requestes模塊

    Python爬蟲基礎之requestes模塊

    這篇文章主要介紹了Python爬蟲基礎之requestes模塊,文中有非常詳細的代碼示例,對正在學習python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • django跳轉頁面?zhèn)鲄⒌膶崿F(xiàn)

    django跳轉頁面?zhèn)鲄⒌膶崿F(xiàn)

    這篇文章主要介紹了django跳轉頁面?zhèn)鲄⒌膶崿F(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Python Web框架之Django框架Form組件用法詳解

    Python Web框架之Django框架Form組件用法詳解

    這篇文章主要介紹了Python Web框架之Django框架Form組件用法,結合實例形式詳細分析了Django框架中各種常用Form組件的功能、使用方法及相關操作注意事項,需要的朋友可以參考下
    2019-08-08

最新評論