【综合评价方法 独立性权系数法】指标权重确定方法之独立性权系数法

参考链接:http://blog.sina.com.cn/s/blog_710e9b550101ansp.html

三、综合评价模型建立步骤
1、综合评价模式是一种对一个或多个系统进行评价的模型。一般分为如下几个步骤:
2、选取评价指标,指标的选取应该具有独立性和全面性。
3、得到m×n测量矩阵,每一行表示一个带评价系统(共m行),没一列表示一个评价指标(共n列)。
4、对测量矩阵每个指标进行一致化处理。指标一般有极小型,居中型和区间型,一般都转化为极大型。
5、进行无量纲化处理。常用的方法有标准差法、极值差法、功效系数法等。
6、确定评价指标权重向量。是固定权值还是动态权值?动态权值的隶属函数有分段变幂函数、偏大型正态分布函数、S型分布函数等。
7、建立综合评价模型。线性加权还是非线性加权?
8、给出结论。如果是多对象评价模型可以提供一个排序方法,对评价结果进行排序。

四、指标权重确定方法之独立性权系数法
这里写图片描述

应用实例:
某大学2013年进行研究生招聘,某学院系主任希望从报名的30人中挑选出最优秀的5人。该系主任根据考生笔试成绩和面试成绩的得分,对考生进行筛选。但是由于各项课程的培养计划重要程度不同。因此该系主任想要通过考生各科目的考试成绩以及面试内容的成绩设定权重,以比较合理的方式对考生的成绩进行综合评价。下面是报名的30人的各科目考试成绩和面试成绩。

编码  政治  英语  数学  专业课 专业英语    专业知识
1   67  88  65  104 41  54
2   78  66  85  116 61  56
3   72  85  74  136 48  77
4   76  62  87  101 42  61
5   68  63  79  139 77  79
6   90  87  95  95  48  41
7   71  67  89  122 75  77
8   78  80  100 90  80  49
9   78  84  70  109 63  48
10  75  72  89  106 78  46
11  85  84  77  99  53  68
12  61  84  67  102 71  62
13  76  86  62  118 58  66
14  62  79  69  140 71  40
15  64  82  85  100 58  57
16  77  66  64  143 45  66
17  86  62  96  97  78  62
18  60  89  67  138 40  72
19  89  76  91  144 53  70
20  77  85  81  103 80  56
21  83  89  65  119 68  44
22  62  80  72  139 49  63
23  76  78  85  126 42  51
24  68  77  76  104 68  45
25  71  82  93  90  78  60
26  64  90  60  131 61  47
27  60  62  72  131 76  67
28  77  61  95  91  50  55
29  63  77  93  129 56  63
30  70  84  98  135 70  59

python源码实现:

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

import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
from sklearn import preprocessing
from math import sqrt
import statsmodels.api as sm

# 自定义归一化函数

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



# 自定义max-min 归一化函数
def min_max_scaler(data):
    """
    :param data: 输入各评价指标的数据框
    :return: 归一化之后的数据框
    """
    X = np.array(data)
    min_max_scaler = preprocessing.MinMaxScaler()
    X_minMax = min_max_scaler.fit_transform(X)
    X_minMax=pd.DataFrame(X_minMax,columns=data.columns.values)
    return X_minMax



def multipl(a, b):
    """
    :param a: 列表1
    :param b: 列表2
    :return: 相乘求和之后的值
    """
    sumofab = 0.0
    for i in range(len(a)):
        temp = a[i] * b[i]
        sumofab += temp
    return sumofab




def corrcoef(x, y):
    """
    :param x: 列表1
    :param y: 列表2
    :return: 复相关系数R
    """
    n = len(x)
    # 求和
    sum1 = sum(x)
    sum2 = sum(y)
    # 求乘积之和
    sumofxy = multipl(x, y)
    # 求平方和
    sumofx2 = sum([pow(i, 2) for i in x])
    sumofy2 = sum([pow(j, 2) for j in y])
    num = sumofxy - (float(sum1) * float(sum2) / n)
    # 计算复相关系数
    den = sqrt((sumofx2 - float(sum1 ** 2) / n) * (sumofy2 - float(sum2 ** 2) / n))
    R=num / den
    return R


def get_R_coefficient(data):
    """
    :param data: 评价指标的数据框
    :return:评价指标的复相关系数
    """
    R_list=[]
    for i in range(0,len(data.columns.values)):
        columns_list = list(data.columns.values)
        k1 = columns_list[i]
        columns_list.remove(k1)
        X = sm.add_constant(data.loc[:,columns_list])
        y = data.loc[:,k1]
        est = sm.OLS(y, X)
        est2 = est.fit()
        predict = est2.predict()
        R=corrcoef(y, predict)
        R_list.append(R)

    return R_list


def get_R_wi(R_list):
    """
    :param R_list: 复相关系数列表
    :return: 各指标的权重
    """
    wi_1=[]
    wi_list=[]
    for i in range(0,len(R_list)):
        # 求各指标与其他指标复相关系数的倒数
        w1=round(1/R_list[i],2)
        wi_1.append(w1)

    # 对上表数据进行归一化处理,即可得到各指标的权重
    sum_wi_1=sum(wi_1)
    for i in range(0,len(wi_1)):
        # w2 = wi_1[i] / sum_wi_1
        w2=round(wi_1[i]/sum_wi_1,2)
        wi_list.append(w2)


    return wi_list



def get_article_score(wi_list,data):
    """
    :param wi_list: 权重系数列表
    :param data:评价指标数据框
    :return:返回文章质量得分
    """

    #  将权重转换为矩阵

    cof_var = np.mat(wi_list)

    #  将数据框转换为矩阵
    context_train_data = np.mat(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




if __name__ == '__main__':

    data=pd.read_excel('C:\\Users\\xiaohu\\Desktop\\文本挖掘\\文本质量综合评价算法\\test.xlsx')

    context_train_data=data.iloc[:,1:7]
    R_list=get_R_coefficient(context_train_data)
    wi_list=get_R_wi(R_list)

    last_hot_score_result=get_article_score(wi_list,context_train_data)

    # 增加一列id
    context_train_data['编码']=data['编码']

    # 增加一列分数值
    context_train_data['score']=last_hot_score_result

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

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

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

    print(result)

    # 写出csv数据
    result.to_csv('C:\\Users\\xiaohu\\Desktop\\文本挖掘\\文本质量综合评价算法\\test_result.csv', index=False)




结果展示:

    政治  英语   数学  专业课  专业英语  专业知识  编码  score  rank
18  89  76   91  144    53    70  19  83.43     1
29  70  84   98  135    70    59  30  83.36     2
4   68  63   79  139    77    79   5  82.35     3
6   71  67   89  122    75    77   7  81.68     4
19  77  85   81  103    80    56  20  79.85     5
16  86  62   96   97    78    62  17  79.08     6
2   72  85   74  136    48    77   3  78.71     7
7   78  80  100   90    80    49   8  78.70     8
24  71  82   93   90    78    60  25  78.24     9
20  83  89   65  119    68    44  21  77.03    10
28  63  77   93  129    56    63  29  76.91    11
9   75  72   89  106    78    46  10  76.70    12
26  60  62   72  131    76    67  27  76.64    13
12  76  86   62  118    58    66  13  76.02    14
10  85  84   77   99    53    68  11  75.67    15
13  62  79   69  140    71    40  14  75.27    16
1   78  66   85  116    61    56   2  74.76    17
21  62  80   72  139    49    63  22  74.31    18
17  60  89   67  138    40    72  18  74.08    19
8   78  84   70  109    63    48   9  74.07    20
11  61  84   67  102    71    62  12  73.89    21
25  64  90   60  131    61    47  26  73.87    22
15  77  66   64  143    45    66  16  73.56    23
5   90  87   95   95    48    41   6  73.34    24
22  76  78   85  126    42    51  23  72.69    25
14  64  82   85  100    58    57  15  72.33    26
23  68  77   76  104    68    45  24  71.93    27
27  77  61   95   91    50    55  28  68.85    28
3   76  62   87  101    42    61   4  68.33    29
0   67  88   65  104    41    54   1  67.43    30

Process finished with exit code 0
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页