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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

熵值法求权重

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 熵值法求权重 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、熵值法原理分析
      • (一)選取數據
      • (二)數據標準化處理
        • 1、正負相關性處理
          • (1)正相關指標
          • (2)對于負向指標(越小越好的指標)
        • 3、計算第 jjj 項指標下第 iii 個樣本占該指標的比重
        • 4、計算第 jjj 項指標的熵值
        • 5、計算第 jjj 項指標的差異系數
        • 6、計算評價指標權重
        • 7、計算各樣本綜合得分
    • 二、測試案例
        • 1、本案例數據集以2012年全國大學生數學建模A題部分數據為例
        • 2、完整代碼
    • 三、測試案例運行結果
    • 四、測試表格

一、熵值法原理分析

(一)選取數據

m個樣本,共n個指標,XijX_{ij}Xij?為為第iii個樣本的第jjj個指標的數值,i=1,2,3,...m;j=1,2,3...n.i = 1 , 2 , 3 , . . . m ; j = 1 , 2 , 3... n.i=1,2,3,...m;j=1,2,3...n.

(二)數據標準化處理

1、正負相關性處理

各項指標的計量單位以及方向不統一的情況下,需要對對數據進行標準化,為了避免求熵值時對數無意義,可以為每個值加上較小數量級的實數,如0.001

(1)正相關指標

X′=Xij?Min(Xij)Max(Xij)?Min(Xij)X'= \frac{X_{ij}- Min(X_{ij})}{Max(X_{ij})-Min(X_{ij})}X=Max(Xij?)?Min(Xij?)Xij??Min(Xij?)?

(2)對于負向指標(越小越好的指標)

X′=Max(Xij)?XijMax(Xij)?Min(Xij)X' = \frac{Max(X_{ij})-X_{ij}}{Max(X_{ij})-Min(X_{ij})}X=Max(Xij?)?Min(Xij?)Max(Xij?)?Xij??

3、計算第 jjj 項指標下第 iii 個樣本占該指標的比重

計算樣本權重:
Pij=Xij∑i=1nXijP_{ij} = \frac{X_{ij}}{\sum_{i=1}^nX_{ij}}Pij?=i=1n?Xij?Xij??

4、計算第 jjj 項指標的熵值

計算指標熵值:
ej=?1ln(m)?∑i=1m(Pij?ln(Pij))e_j = -\frac{1}{ln(m)}*\sum_{i=1}^m(P_{ij}*ln(P_{ij}))ej?=?ln(m)1??i=1m?(Pij??ln(Pij?))
,其中m為樣本個數。

5、計算第 jjj 項指標的差異系數

某項指標的信息效用值取決于該指標的信息熵與 1 之間的差值,它的值直接影響權重的大小。信息效用值越大,對評價的重要性就越大,權重也就越大。
dj=1?ejd_j=1-e_jdj?=1?ej?

6、計算評價指標權重

利用熵值法估算各指標的權重,其本質是利用該指標信息的差異系數來計算,其差異系數越高,對評價的重要性就越大(或稱權重越大,對評價結果的貢獻就越大)
第j jj項指標的權重:
wj=dj∑j=1mdjw_j=\frac{d_j}{\sum_{j=1}^md_j}wj?=j=1m?dj?dj??

7、計算各樣本綜合得分

zi=∑j=1mwjxijz_i=\sum_{j=1}^mw_jx_{ij}zi?=j=1m?wj?xij?

二、測試案例

1、本案例數據集以2012年全國大學生數學建模A題部分數據為例

樣品編號氨基酸總量天門冬氨酸蘇氨酸絲氨酸谷氨酸脯氨酸
葡萄樣品12027.96101.22393.4277.61266.6723.88
葡萄樣品22128.8264.43140.6271.9439.261560.97
葡萄樣品38397.28108.07222.35173.0867.547472.28
葡萄樣品42144.6879.39133.83158.74156.721182.23
葡萄樣品5184452.28145.09164.05102.43816.08
葡萄樣品63434.1768.01102.4275.7880.62932.76
葡萄樣品72391.1665.1267.76239.2208.971096.28
葡萄樣品81950.7672.09345.8744.23176.02962.01

2、完整代碼

import numpy as np import pandas as pd## 讀取數據 data=pd.read_csv('redputao.csv',encoding='utf-8',index_col=0) indicator=data.columns.tolist() ## 指標個數 多少列 project=data.index.tolist() ## 樣本個數 多少行 value=data.values print(indicator) print(project) print(value)## 定義數據標準化函數。為了避免求熵值時對數無意義,對數據進行平移,對標準化后的數據統一加了常數0.001 def std_data(value,flag):for i in range(len(indicator)):if flag[i]=='+':value[:,i]=(value[:,i]-np.min(value[:,i],axis=0))/(np.max(value[:,i],axis=0)-np.min(value[:,i],axis=0))+0.01elif flag[i]=='-':value[:,i]=(np.max(value[:,i],axis=0)-value[:,i])/(np.max(value[:,i],axis=0)-np.min(value[:,i],axis=0))+0.01return value# 定義熵值法函數、熵值法計算變量的權重 def cal_weight(indicator, project, value):p = np.array([[0.0 for i in range(len(indicator))] for i in range(len(project))])# print(p)for i in range(len(indicator)):p[:, i] = value[:, i] / np.sum(value[:, i], axis=0)e = -1 / np.log(len(project)) * sum(p * np.log(p)) # 計算熵值g = 1 - e # 計算一致性程度w = g / sum(g) # 計算權重return w# 表示各項指標為正向指標還是反向指標 flag=["+","+","+","+","+", "+","+","+","+","+","+","+","+","+","+", "+","+","+","+","+","+","+","+","+","+", "+","+","+","+","+","+","+","+","+","+", "+","+","+","+","+","+","+","+","+","+", "+","+","+","+","+","+","+","+","+"]# 調用函數將數據標準化,即為每個數據添加正相關還是負相關標志 std_value=std_data(value, flag)# 調用函數求權重 w = cal_weight(indicator, project, std_value) w = pd.DataFrame(w, index=data.columns, columns=['權重']) print(w)# 調用函數求得分 score = np.dot(std_value, w).round(4) # 對應數據與權重相乘得到分數,結果保留四位小數 score = pd.DataFrame(score, index=data.index, columns=['綜合得分']).sort_values(by=['綜合得分'], ascending=False) print(score)

三、測試案例運行結果

運行結果

四、測試表格

csv下載鏈接 提取碼:1234

總結

以上是生活随笔為你收集整理的熵值法求权重的全部內容,希望文章能夠幫你解決所遇到的問題。

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