python 灰色关联分析法(GRA)求权重

我遇到的问题:

假设现在有p个指标,g个参评单位。已经告诉你这g个参评单位在p个指标上的得分分别为多少,那么如何确定这p个指标的权重应该为多少?

原理

1.构成矩阵如下:

python 灰色关联分析法(GRA)求权重_第1张图片

2.首先对矩阵做行均值化处理:

3.设处理后构成矩阵为:

python 灰色关联分析法(GRA)求权重_第2张图片

4.选取矩阵第h行构成参考序列

5.根据如下公式构建关联系数矩阵:

6.最后根据如下公式计算指标i的关联度和指标权重

代码

根据灰色关联分析法原理,我的代码如下:

import numpy as np

class GRA:
    def __init__(self, array, num_referenceSequence, e):  # 参数:nump类型array,参考序列索引,分辨系数
        self.array = array.astype(float)
        self.num_referenceSequence = num_referenceSequence
        self.e = e

    def row_averaging(self):  # 行均值化
        for row in range(self.array.shape[0]):
            self.array[row] = self.array[row] / (np.sum(self.array[row])/self.array.shape[1])
        return self.array

    def get_max_value(self, matrix):
        return max(matrix.flatten())

    def get_min_value(self, matrix):
        return min(matrix.flatten())

    def getWeight(self):
        self.row_averaging()
        for column in range(self.array.shape[1]):
            self.array[:,column] = self.array[:,column] - self.array[:,column][self.num_referenceSequence]  # 均值化矩阵每一列减去参考序列对应值
        self.array = np.maximum(self.array, -self.array)  # 矩阵每个元素取绝对值
        matrix_max = self.get_max_value(self.array)
        matrix_min = self.get_min_value(self.array)
        correlation_coefficient_matrix = (np.zeros(self.array.shape) + matrix_min + self.e*matrix_max) / (self.array + self.e*matrix_max)  # 关联系数矩阵
        weights = np.sum(correlation_coefficient_matrix, axis=1)/np.sum(correlation_coefficient_matrix, axis=1).sum()
        return weights
if __name__ == '__main__':
    matrix = np.array(
        [
            [1,1],
            [1,2],
            [1,3]
        ]
    )
    GRA = GRA(matrix, 0, 0.5)
    print(GRA.getWeight())

你可能感兴趣的:(工具,python)