【综合评价方法 变异系数权重法】指标权重确定方法之变异系数权重法

【综合评价方法 变异系数权重法】指标权重确定方法之变异系数权重法变异系数法是直接利用各项指标所包含的信息,通过计算得到指标的权重。是一种客观赋权的方法。此方法的基本做法是:在评价指标体系中,指标取值差异越大的指标,也就是越难以实现的指标,这样的指标更难反映被评价单位的差距。由于评价指标体系中的各项指标的量纲不同,不宜直接比较其差别程度。为了消除各项评价指标的量纲不同的影响,需要用各项指标的变异系数来衡量各项指标取值的差异程度。各项指标的变异系数公式如下:…

大家好,又见面了,我是你们的朋友全栈君。

变异系数法是直接利用各项指标所包含的信息,通过计算得到指标的权重。是一种客观赋权的方法。此方法的基本做法是:在评价指标体系中,指标取值差异越大的指标,也就是越难以实现的指标,这样的指标更难反映被评价单位的差距。
由于评价指标体系中的各项指标的量纲不同,不宜直接比较其差别程度。为了消除各项评价指标的量纲不同的影响,需要用各项指标的变异系数来衡量各项指标取值的差异程度。各项指标的变异系数公式如下:

这里写图片描述

这里写图片描述

算法步骤总结:
1、先计算每个指标的所有平均值,标准差
2、然后计算每个指标的变异系数。
3、然后计算每个指标的权重。
4、然后计算每个部落的总分。
5、然后对总分进行max-min归一化。
6、然后将总分值映射成0-100之间的分数作为部落的热度值。
7、然后对所有热度值从大到小排序。

变异系数确定权重源代码实现:

# -*- encoding=utf-8 -*-

import pandas as pd
import numpy as np


# 自定义归一化函数

def autoNorm(data):
    """ :param data: 列表 :return: 归一化列表 """
    arr = np.asarray(data)
    norm_list=[]
    for x in arr:
        x = round(float(x - np.min(arr)) / ((np.max(arr) - np.min(arr))+0.001),4)
        norm_list.append(x)

    return norm_list



# 自定义热度值计算函数

def get_hot_value(context_train_data):

    """ :param context_train_data:数据框 :return: 热度值分数 """


    # 求相关列均值与标准差

    context_train_mean = context_train_data.mean(axis=0)

    context_train_std = context_train_data.std(ddof=0)

    # 求变异系数

    context_train_cof_var = context_train_std/context_train_mean

    # 对变异系数求和

    sum_context_train_cof_var = context_train_cof_var.sum()

    # 得出权重

    context_train_wi = context_train_cof_var/sum_context_train_cof_var

    # 将权重转换为矩阵

    cof_var = np.mat(context_train_wi)

    # 将数据框转换为矩阵
    context_train_data = np.mat(context_train_data)

    # 权重跟自变量相乘
    last_hot_matrix = context_train_data * cof_var.T
    last_hot_matrix = pd.DataFrame(last_hot_matrix.T)

    # 累加求和得到总分
    last_hot_score =list(last_hot_matrix.apply(sum))


    # max-min 归一化

    last_hot_score_autoNorm=autoNorm(last_hot_score)


    # 部落的热度值映射成分数(0-100分)

    last_hot_score_result=[i*100 for i in last_hot_score_autoNorm]



    return last_hot_score_result








if __name__ == '__main__':

    # 读取数据
    # context_train_data=pd.DataFrame(np.arange(24).reshape(4,6),columns=['x1','x2','x3','x4','x5','x6'])


    data=pd.read_excel('C:\\Users\\xiaohu\\Desktop\\文本挖掘\\部落的热度算法\\data.xlsx')

    # 拿出所有自变量数据(不包含部落id,部落名称)

    context_train_data=data.iloc[:,2:16]

    print(context_train_data)

    # 调用热度值计算函数
    last_hot_score_result =get_hot_value(context_train_data)

    # 增加一列部落名

    context_train_data['tribe_name']=data['tribe_name']


    # 增加一列热度值
    context_train_data['tribe_hot_value']=last_hot_score_result

    # 然后对数据框按热度值从大到小排序

    result=context_train_data.sort_values(by = 'tribe_hot_value',axis = 0,ascending = False)

    result['rank']=range(1,len(result)+1)

    print(result)


    # 输出excel

    # 写出csv数据
    result.to_csv('C:\\Users\\xiaohu\\Desktop\\文本挖掘\\部落的热度算法\\result.csv', index=False)









版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135567.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java高并发解决方案

    Java高并发解决方案电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因?一、大规模并发带来的挑战在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个W…

    2022年5月31日
    27
  • getter和setter怎么用_python setter

    getter和setter怎么用_python setter有时候我们只知道一个对象的字段,我们想通过反射的方式将此字段赋值,可直接写反射又太浪费时间,还需要自己手动拼接方法名,而java为我们提供了一个很方便的类(PropertyDescriptor)来操作这一过程。使用很简单,直接看代码:代码importcom.pibgstar.demo.bean.User;importjava.beans.IntrospectionException…

    2022年10月1日
    0
  • Laravel获取所有的数据库表及结构

    Laravel获取所有的数据库表及结构

    2021年10月24日
    39
  • node配置环境变量,各种报错问题汇总

    node配置环境变量,各种报错问题汇总命令提示窗口:npmroot-g查看全局安装的包,找到路径配置到环境变量中

    2022年6月3日
    37
  • Socket 编程原理

    Socket 编程原理目录socket编程基本概念协议TCPUDPDNSICMPHTTPHTTPS编程流程socket函数socket编程基本概念socket编程即计算机网络编程,目的是使两台主机能够进行远程连接,既然要使两者产生联系,那么就要有至少一个信息发送端和一个信息接收端,因此形成了现在绝大多数socket编程都会用到的C/S架构(Client[客户端]/Server[服务端]),最典型的应用就是web服务器/客户端。在Unix/Linux中执行任何形式的I/O操作(比如网络连接)时,都是在读取

    2022年10月18日
    0
  • vue3.0计算属性_vue的计算属性和方法有什么区别

    vue3.0计算属性_vue的计算属性和方法有什么区别前言一般情况下属性都是放到data中的,但是有些属性可能是需要经过一些逻辑计算后才能得出来,那么我们可以把这类属性变成计算属性。比如以下:<divid="example&quot

    2022年7月31日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号