Entropy演算法python實現

2021-10-06 21:14:45 字數 1901 閱讀 7594

熵屬於物理概念,最先由申農引入到資訊理論,目前已經在工程技術、社會經濟等領域得到了非常廣泛的應用。

熵權法的基本思路是依據指標變異性的大小來確定權重。其前提是,若某個指標的資訊熵越小,則指標值得變異程度越大,在綜合評價中所能起到的作用也越大,其權重越大。相反,某個指標的資訊熵越大,則指標值得變異程度越小,在綜合評價中所起到的作用也越小,其權重越小。優於其思路簡單,易於理解,目前已經在工程技術、社會經濟等領域得到了非常廣泛的應用。

熵權法具有的問題是過於客觀,有時會和實際情況不符,如耕地坡度的差異,本來較大差異對該地區耕地潛力不會造成太大影響,但是會將其權重判定很大。

實現步驟:

(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'

defreadexcel

(hn,nc)

: data = xlrd.open_workbook(path)

table = data.sheet_by_name(sheetname)

nrows = table.nrows #獲取工作錶行數

data=

for i in

range

(hn,nrows)

:[nc:])

return np.array(data)

defentropy

(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個樣本占該指標的比重

"""

安徽集訓 Entropy

出題人羅哲正是神爺 orz 這是一道披著互動題外衣的通訊題,只支援 c 你需要實現 2 個函式。互動庫先給第乙個函式傳入乙個引數 n 你加密得到的 01 字串的長度必須是 n。你需要根據 n 做一些相應的預處理,並向互動庫返回你能接受的最大 text 型別整數 m 先根據你返回的 m 給分。若 m ...

poj 1521 Entropy(優先佇列)

哈弗曼編碼題 如果真的去構建一顆哈夫曼樹,那就太麻煩了 而且根據題目要求的輸出可以知道沒有必要構造乙個完整的樹 根據哈夫曼樹的特點,可知道可以用優先佇列實現功能 每次從佇列中取兩個最小的,將其和再放入佇列 一直重複這個操作知道佇列中只剩乙個元素 如下 include include include ...

Hdu 1053 Entropy查出錯(修改)

pragma warning disable 4786 include include include includeusing namespace std struct node int findminindex vector ht,int n for i n 1 i m i return ht ...