日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 实现熵权法确定各指标的权重

發布時間:2023/12/31 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 实现熵权法确定各指标的权重 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python 實現熵權法確定各指標的權重

熵權法是一種客觀賦權方法,計算步驟如下:
a.構建各年份各評價指標的判斷矩陣:
b.將判斷矩陣進行歸一化處理, 得到歸一化判斷矩陣:
c.根據熵的定義,根據各年份評價指標,可以確定評價指標的熵。
d.定義熵權。定義了第n個指標的熵后,可得到第n個指標的熵權。
f.計算系統的權重值.

要求表格形式

表格整理格式如下,但是下面的代碼中沒有設置不讀取第一列,所以需刪除第一列的名稱(此列為字符串格式,不能列入計算范圍)

#!/usr/bin/python # -*- coding: utf-8 -*- """ @author: xiaosu """ import pandas as pd import numpy as np import math from numpy import array# 1讀取數據 df = pd.read_excel('表格名.xlsx', encoding='gb2312') # 2數據預處理 ,去除空值的記錄 df.dropna()#定義熵值法函數 def cal_weight(x):'''熵值法計算變量的權重'''# 標準化x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))'''如果數據實際不為零,則賦予最小值if x==0:x=0.00001else:pass'''# 求krows = x.index.size # 行cols = x.columns.size # 列k = 1.0 / math.log(rows)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.0else:p = x[i][j] / x.sum(axis=0)[j]lnfij = math.log(p) * p * (-k)lnf[i][j] = lnfijlnf = 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 wif __name__ == '__main__':# 計算df各字段的權重w = cal_weight(df) # 調用cal_weightw.index = df.columnsw.columns = ['weight']print(w) #輸出權重print('熵權法計算權重運行完成!')

數據計算結果如下圖:(只是部分截圖)

關于程序中的部分說明:
1.本文中所用的是 min-max標準化(Min-Max Normalization)
2.遇到負向指標: 歸一化是將數據變成0-1之間的小數,將有量綱變成無量綱。所以負向指標中的數據提前加上負號(但是計算出來的權重可能不是小于零的)(本人涉及不深,今后會逐步補充完善)
3.關于負向指標的標準化,貌似有不同的計算中(印象中),再看到就加進去

總結

以上是生活随笔為你收集整理的python 实现熵权法确定各指标的权重的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。