前言:
现在看官们对“加权排序是什么意思”可能比较注意,我们都需要学习一些“加权排序是什么意思”的相关知识。那么小编也在网摘上汇集了一些有关“加权排序是什么意思””的相关文章,希望兄弟们能喜欢,姐妹们快快来了解一下吧!缘起
作为老师,我常常反问自己,能否找出一种方法,不用把学生考试成绩做加总,用总分来排名,作为判断学生素质某些方面优劣的依据。这个问题一直困扰着我,带着这样的思考,这几天寒假,稍微能闲点,在网上查了相关资料,找到了一种方法叫“熵权法”。为解开自己工作中的困惑,便用python实现了“熵权法加权排序问题”。
实验过程表明,“熵权法”,算法本身完全脱离了人为干预,是一种基于指标数据本身的计算方法,指标权重的计算完全依赖于指标值本身。很显然,它是一种不掺杂任何人为因素的客观计算方法,在一定程度上是可靠和公允的。
熵权法
熵最先由申农引入信息论。
熵权法的基本思路是根据指标变异性的大小来确定客观权重。
一般来说,若某个指标的信息熵越小,表明指标值变异程度越大,提供的信息量越多,在综合评价中所能起到的作用也越大,其权重也就越大。相反,某个指标的信息熵越大,表明指标值变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小。
我们可以按照这个思路来确定指标的权重,有了权重后,就可以计算出“加权平均数”了。
算法python实现算法
import pandas as pdimport numpy as npimport mathfrom numpy import arraypd.options.display.float_format = '{:.4f}'.formatdf = pd.read_excel('1822学生成绩单.xlsx',index_col='姓名')数据标准化处理
from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()scaler.fit(df)df_scaler_minmax = scaler.transform(df)计算pij
rows,cols = df_scaler_minmax.shape# 预留变量空间pij = [[None] * cols for i in range(rows)]pij = array(pij)for col in range(cols): for row in range(rows): if df_scaler_minmax[row,col]==0: pij[row,col]=0 else: pij[row,col]=df_scaler_minmax[row,col]/df_scaler_minmax[:,col].sum()计算Ej
n = df.index.sizek = 1/math.log(n)e = [[None] * cols for i in range(rows)]e = np.array(e)for col in range(cols): for row in range(rows): if pij[row,col] == 0: e[row,col] = 0 else: e[row,col] = pij[row,col]* math.log(pij[row,col])Ej = ((e.sum(axis=0))*(-k))
结果:
array([0.9907397387693839,0.9850462767390424, 0.968126473198737, 0.9695477475275485, 0.9908377620808706], dtype=object)
计算权重
Wj = (1-Ej)/ (cols- Ej.sum())Wj = np.reshape(Wj,(1,Wj.size))计算标准化综合加权分
score = np.dot(df.values,Wj.T)s = pd.DataFrame(score,index = df.index,columns=['标准化加权综合分'])结果排序
result = s.sort_values(by='标准化加权综合分', axis=0, ascending=False)result['标准化加权综合分排名'] = range(1, len(result) + 1)final = pd.DataFrame(df.mean(axis=1),columns=['原始平均分']).sort_values(by='原始平均分',ascending=False)final['原始平均分排名'] = range(1,final.index.size+1)final.iloc[0,1] = 1for i in range(1,final.index.size): if final.iloc[i,0] == final.iloc[i-1,0]: final.iloc[i,1] = final.iloc[i-1,1] else: final.iloc[i,1] = final.iloc[i-1,1]+1f = final.join(result)f.sort_values(by='原始平均分',ascending=False)结语
显然,用简单算数平均分排序与权熵法加权综合分排序结果有一定程度的差异。简单算数平均分实质是每个指标的权重是一样的加权算数平均数,没有考虑指标的重要性程度,而“权熵法”则是通过指标数据本身相对大小关系,计算确定权重,然后计算的加权算数平均分,它不考虑人的主管判断,却考虑了指标的重要性程度。
当然,每种方法都有自身的优缺点,权熵法也不例外。例如,它没有考虑和体现管理者的意志,这是该方法无法克服的。
在此 发文仅仅作为一种思路,供大家参考。
如果能在管理中加以适当应用,改善科学管理实效,也算是学以致用了。
有兴趣的,不妨试一试!
标签: #加权排序是什么意思