Advertisement

TopSIS算法:让深度学习模型更加高效且易于维护

阅读量:

作者:禅与计算机程序设计艺术

就目前而言,在各个领域深度学习均表现突出,可被视为解决各类任务的关键技术工具。然而,在深度学习模型规模不断扩大以及应用场景范围不断扩大之际,该技术面临着一系列挑战:包括计算时间过长、资源消耗过高以及模型复杂度等问题逐渐显现出来。如何有效提升模型训练效率、优化资源利用并同时保证模型准确度,则是一个亟待解决的重要课题。 Topsis作为一种基于排序的多目标优化评价方法,在该领域具有显著的应用价值。其核心在于确定各目标的重要性程度,并通过赋予相应权重来实现目标之间的平衡与协调;最终通过加权计算得到综合评价结果来进行排序与决策支持。该方法的优点在于具有较高的透明度、较低的操作复杂性和良好的扩展性;能够有效适用于多种类型的数据分析问题。本文将重点介绍一种创新性的基于Topsis理论构建的决策树算法——TopSIS(TOplicative Sorting with Imbalanced Selection)。该算法通过将不重要的特征赋予权重零值的方式进行筛选处理;从而有效去除对模型性能产生负面影响的因素;最终能够显著提高模型训练效率并优化资源利用效果。此外,在分类不平衡问题上也进行了针对性处理:通过为不同类别样本设定不同的权重系数来实现分类效果的均衡化与优化化;从而在一定程度上克服传统方法在处理分类不平衡问题时存在的不足之处。

2.基本概念术语说明

TOPSIS(Topic-Oriented Precedence System)

Topsis是一种用于评价不同目标权重并对比分析多指标数据的方法。该模型通过计算各指标的得分值后乘以相应的目标权重得出综合评价值,并对结果进行排序处理。通常情况下,该方法一般用于解决以下两类多目标优化问题:

一组指标之间的最大化最小化问题

设定n组相互独立的指标后,在其中寻找该组变量中出现极值的情况,并同时寻求其中任意两个变量之间的最大间距。

n个目标向量之间的距离最小化问题

设有n个数据对象构成的n维特征空间中存在一个特定的目标向量\mathbf{x}(记为\mathbf{X}),研究者欲探讨两种可能的情形:一是所有对象间最短距离的存在性问题;二是某特定条件下该目标与某一基准点之间的间距关系。

由于两种优化问题的公式形式不同,所以在公式推导时,会分开讨论。

TOP选择指标法

采用TOP选择指标法是一种用于综合评价的指标体系。具体实施流程如下:
第一阶段,请将各项指标按照重要性进行排序。
第二阶段,请将其中的前k-1个指标定为正向贡献者,并对它们给予相应的权重系数。
其余剩下的 indicator 则被归类为负向贡献者。
随后,在计算过程中,
若某一项变量 X_i 的值大于另一项变量 X_j 的值,
则在第一个 contribution group 中加1分;
反之,
若 X_j 大于 X_i,
则在第二个 contribution group 中减1分;
当两者相等时,
则不予评分。
通过上述方法的应用,
我们可以将全部变量划分为两个子集:
一个是可能具有较大优势的一组 variable,
另一个是可能具有较小优势的一组 variable。
对于这两个子集分别应用 TOPSIS 方法,
即可获得各自的综合评价值。

TOM选择多目标方法

在评价多目标问题时,TOM方法通常采用综合性的策略。首先需要明确各目标之间的相对重要性关系;其次,在对各目标进行定量化处理时需注意权重分配的合理性;接着,在归一化处理过程中应确保所有指标之和等于1;最后通过TOPSIS法对各目标进行排序并生成综合评价指标。

TOPSIS方法简介

TOPSIS是一种用于评价各目标权重、对比各目标的排序机制。其基本思路在于首先计算各目标对应的评价值,并将这些评价值乘以各自的目标权重以获得综合评价值。随后对这些综合评价值进行排序处理。如果需要对结果进行排序,则应当依据优先级顺序(亦即所谓的备选方案序列)来进行排列组合处理。然而这种方法也存在一些明显的局限性或不足之处。例如无法有效处理多目标之间的矛盾问题(尤其是当多个指标具有相同的重要性时)。其计算结果会受到所选取指标序列的影响程度较大。

Topsis算法

Topsis算法的核心理念在于在多维的目标空间中构建坐标系,在确定各指标权重的基础上随后进行排序评估工作流程中采用此方法. 在这一过程中首先需要对所有的评价对象按照其重要性进行排序. 接着在构建好评价指标体系后将这些对象归纳到相应的评价维度上. 这样就形成了一个多维数据点集合. 其中分母部分代表的是各项指标的最大理想值而分子部分则是各项指标当前的实际数值. 通过计算两两之间的距离d_ij = |X_i - X_j|可以得到各个对象与理想点之间的相对接近程度. 其中当某对象与其他所有对象的距离均小于等于某一阈值时该对象即被视为最优选择.

然而Topsis算法在实际应用中仍有一些局限性。其一,在传统Topsis算法中,并未充分考虑各目标之间的差异程度。其二,在计算效率方面也存在一定的瓶颈。其三,在权重分配策略上相对较为僵化。基于上述分析与改进需求,在此提出了一种新型的决策方法——TopSIS。

TopSIS算法的基本思路如下:该方法旨在通过多指标评价模型筛选出最优方案。具体操作步骤包括:第一步按照重要性排序确定各目标的位置;第二步计算各决策方案在各个指标上的表现并评估其重要程度;第三步根据评估结果设定相应的权值系数矩阵,并对未被重视的方案赋予零权值;第四步通过应用这些确定的权值系数来评估每个方案的具体指标得分;第五步将各指标得分乘以对应的权数以获得综合评分;最后按照综合评分从高到低排序后选择排名前K的目标作为最终结果。

基于以上步骤,TopSIS算法的伪代码如下:

将所有目标按照重要性进行排序,并根据各个目标的重要性程度设定其对应的权重系数w_i;计算各子项目的评价值si=(d_i × w_i)/∑w_i以及dj=(-d_j × w_j)/∑w_j;求得的各子项目的评价值s_ij及其对应的项目编号(x_i,y_j),其中i,j分别取值于[1,m]和[1,n];对各子项目的评价值进行降序排列以确定最终排名;通过调用函数get_index(xi,yi)获取其在列表中的位置索引,并返回该位置的目标编号及评价值

其中,di表示第i个目标的当前值,wi表示第i个目标的权重值。

TopSIS算法的优点是:

考虑到目标间的差异,并对各目标设定权值以增强模型的鲁棒性。
无需指定目标数目而可自动调整其参数以实现动态适应。
基于最小化原则能够有效规避"多目标矛盾"的问题。
具备在线更新权重的能力以持续提升模型的性能水平。

3.核心算法原理和具体操作步骤以及数学公式讲解

Topsis算法的本质是通过将目标值按照重要程度排序并在坐标轴上定位来实现方案之间的相对评价与选择;其主要功能是通过设定各个指标在坐标轴上的权重来衡量它们的重要性;该方法主要依靠各评估指标间的权重差异来进行排序和优先级判断。

1.读取数据集和目标属性信息

Topsis算法涉及目标的重要程度及其相关数据集的信息。例如,请考虑一个数据集包含销售额、利润、市场份额和顾客满意度四个指标。其中销售额被赋予了最高的重要性权重(即其重要性最高),利润其次重要性权重为次高水平(即其重要性次之),而顾客满意度则被赋予了最低的重要性权重(即其重要性最低)。那么构建的数据集中将包含销售额、利润、市场份额和顾客满意度四个变量值。通常情况下,在构建的数据集中会包含多维度的信息(即每条记录可能还涉及用户的其他属性),这些额外信息对目标的影响程度各不相同。

2.计算每个目标的重要性

重要性的计算有多种度量方式。其中一种普遍采用的方法是通过加权求和的方式对指标值进行综合评价,其中权重系数体现了各个指标的重要性程度。Topsis算法则采用了" Topsis锚点法 "这一术语来描述其重要的度量方法。

Topsis锚点法通过将各指标数值求和来确定基准点位置。随后计算各指标的平均值,并将其与单个指标的具体数值进行对比差额计算。接着对这些差额进行累加处理最终得到的结果绝对值越大则表明该指标在综合评价中的重要性越高

其中,I为每个指标的重要性。

3.计算每个目标的坐标轴位置

在计算完每个指标的重要性之后, 就可以确定它们的坐标轴位置. Topsis算法能够提供两种方法: 一种是基于等权重划分坐标轴的方法, 另一种则采用"类内均匀分布"策略.

等权重划分坐标轴

在Topsis算法中,通过将坐标轴划分为等距区间来确定各评价点的位置.随后计算各点的目标值与相应权重的乘积.例如,假设有五个评价点标记为A,B,C,D和E的情况下,按照重要性从高到低排序后排列.其中若销售额位于A-B区间时,则该评价点的权重达到最大;若落在E-C区间,则该评价点的权重降至最低.

该方法采用相等权重划分坐标轴时存在不足之处,在各维度之间的间距上未能准确反映它们之间的真实联系。

类内均匀分布法

该方法是一种用于计算坐标轴的技术。它假设每个类别中的样本数量相等,并基于此确定各分类别的最大值和最小值作为特征点,并将这些特征点分别设置在坐标轴左侧端点位置和右侧端点位置。接着,在这两个极端特征点之间进行中间两个特征点的平均分配操作,直至各类样本的数量达到一致目标。

在分析不同类别间的差异时,默认情况下我们假定存在三个类别A、B、C,并分别计算出它们的最大值数值分别为9、6和12。通过坐标系的可视化表示方法,在二维空间中我们可以清晰地观察到这三个数据点的位置分布情况:具体来说,在坐标轴上会呈现出三个独立的点位分布情况:分别是位于x轴上的位置分别为9(标记为A)、6(标记为B)以及12(标记为C)。根据计算结果可以看出,在这些数据点中类别A对应的数值具有最大的波动性特征属性表现形式,在排序过程中占据主导地位;而类别B的数据特征相对次之;最后则是类别C的数据特征属性表现形式处于最低水平状态。

类内均匀分布法相比等权重划分坐标轴,可以提供更加精确的目标分割。

4.计算每个目标的得分值

得分值的计算公式如下:

在其中,在坐标轴中定义了一个位置参数\pi来表示目标i的位置关系。具体来说,在二维空间中使用dist_{ij}来衡量目标i与目标j之间的距离关系。为了防止分母出现过小的情况(即趋近于零的情况),我们取一个非常小的正值\epsilon作为调节因子。

得分值越高,表明该目标的重要性越高。

5.对目标进行排序

最终阶段是对所有待评价的目标集合按照某种规则进行排序并选择其中的前K个。
该算法不仅对每个单独的目标进行排序处理,并在此基础上进一步筛选出最具代表性的K个。
在选择过程中,则可以选择依据各指标的得分值来进行降序排列;或者根据各个指标对所在维度坐标轴的影响程度来进行筛选。

4.具体代码实例和解释说明

下面展示Topsis算法的代码实例:

复制代码
    import pandas as pd
    from math import sqrt
    
    def topsis(data, weights, impacts):
    # Calculate the euclidean distance between two vectors
    def dist(a, b):
        return sqrt(sum((a - b) ** 2))
    
    # Get the number of rows and columns in data matrix
    m = len(data)
    n = len(data[0])
    
    # Normalize weights vector
    s_w = sum(weights)
    norm_w = [w / s_w for w in weights]
    
    # Multiply each row of input dataset by corresponding weight value
    weighted_dataset = [[norm_w[i] * x for i, x in enumerate(row)] for row in data]
    
    # Create an empty dictionary to store the best target values (Yi*) and their indexes
    results = {}
    
    # Iterate through all possible combinations of output variables
    for j in range(1, n + 1):
    
        # Initialize positive and negative impact values
        pos_imp = neg_imp = 0
    
        if impacts[j - 1] == '+':
            pos_imp = 1
        else:
            neg_imp = 1
    
        # Find the maximum and minimum values of the jth variable across all the observations
        max_var = min_var = float('-inf')
        for i in range(m):
            val = abs(weighted_dataset[i][j - 1])
            if val > max_var:
                max_var = val
            elif val < min_var:
                min_var = val
    
        # If all the values are equal, divide them equally amongst K targets
        if max_var == min_var:
    
            avg = round(max_var / 2)
            results[(pos_imp,'min')] = avg
            results[(neg_imp,'max')] = avg
    
        else:
            # Divide the range of jth variable into k segments based on its highest value
            segs = [(round(((j - 1) * i) / (k - 1)),
                     round(((j - 1) * (i + 1)) / (k - 1)))
                    for i in range(k)]
    
            # For each observation, calculate its position along the coordinate axis
            positions = []
            for i in range(m):
    
                # Calculate the distance from the ith point to each segment
                d = [abs(weighted_dataset[i][j - 1] - seg[0]) if weighted_dataset[i][j - 1] < seg[0]
                     else abs(weighted_dataset[i][j - 1] - seg[1]) if weighted_dataset[i][j - 1] >= seg[1]
                     else 0
                     for seg in segs]
    
                # Add up the distances of the observation to all the segments
                denom = sum([(seg[1] - seg[0]) ** 2 for seg in segs]) + epsilon *
                pos_dis = sum([d_val / denom * ((segs[idx][1] - segs[idx][0]) ** 2)
                               for idx, d_val in enumerate(d)])
                neg_dis = sum([-d_val / denom * ((segs[idx][1] - segs[idx][0]) ** 2)
                               for idx, d_val in enumerate(d)])
    
                # Append the position value to the list
                positions += [(pos_imp * pos_dis), (-neg_imp * neg_dis)]
    
            # Assign the resultant score to Yi*
            scores = [positions[i] / sqrt(sum([(pos[i] - neg[i]) ** 2 for i in range(len(positions))]))
                      for i in range(len(positions))]
            sorted_scores = sorted(enumerate(scores), key=lambda x: x[1], reverse=True)
    
            k_best = set()
            for tup in sorted_scores[:k]:
                k_best.add(tup[0])
    
            # Store the index of the selected top K targets
            for i in k_best:
                result_key = tuple([impacts[j - 1], str(round(segs[int((i % (n - 1)) / (n // k))]
                                                                       [-1], decimals))])
                results[result_key] = weighted_dataset[i][-1]
    
    # Return the final ranked list
    ranking = [(y[0][1:], y[1]) for y in sorted(results.items(), key=lambda x: (x[0][0], float(x[0][1]), -float(x[0][2])))
              ]
    return ranking
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

在代码示例中,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下

在代码中依次命名为dist的函数旨在计算两个输入向量之间的欧几里德距离。该函数的作用是精确地计算这两个向量之间的欧几里得度量。

随后,在程序中计算得出输入数据集的具体规模:其包含一定数量的样本以及相应的特征维度。接下来, 程序对权重向量进行了标准化处理, 以提高计算效率为目标。

代码创建了一个空字典results,用来存储最佳目标值(Yi*)和它们的索引。

代码依次遍历所有输出变量的所有组合。对于每一个输出变量j,代码设置了正面影响量和负面影响量。若目标方向为正面,则设置正面影响量为1;反之则将负面影响量设为1。代码获取了第j个变量的最大与最小的数值范围。

当所有变量数值相同时,则均匀地将它们分派给K个目标;反之,在某些情况下(即变量数值不均时),代码会依据第j个变量的最大值将其划分为k区间。接着,在每个数据点处(即观察对象中),代码会计算其在坐标轴上的具体位置。

针对每一个观测数据点,在算法中都会被计算出与各自区间中心点之间的欧氏距离。随后会将该观测数据点与各区间中心点之间的距离累加,并用总样本数量作为分母进行平均处理。最终会将所有坐标轴上的目标位置进行汇总,并乘以各自的权重系数来获得综合评价得分。

该代码将得分值按照由高到低的顺序排列,并选择排名靠前的K个目标。接着,该代码输出这些目标及其对应的得分值排名信息。

5.未来发展趋势与挑战

尽管该方法取得了一定成效(虽然Topsis算法取得了成功),然而该方法仍存在明显的局限性(但Topsis算法仍然还有很多局限性)。其中(其中),最显著的问题在于其计算复杂度较高(最突出的一个限制就是计算时间复杂度高)。由于该方法需通过计算各项指标得分来实现(由于Topsis算法需要计算每个目标的得分值),因此当处理具有较高维度的数据时(当数据集的维度较大时),运算的时间开销变得相当可观(运算的时间开销非常大)。因此进一步优化的空间较大(因此,Topsis算法在计算上具有很大的改进空间)。

此外,在Topsis算法基于最小化原则运作的情况下,并不能有效解决"多目标冲突"的问题。假设有两个目标维度,在其中一个是与另一个方向相反的情况下,则对于该数据集而言,“无论哪一个优先级设定都不会得到资源分配的公平性”。

针对这两个问题,在现有条件下已有很多解决方案。例如,在这种情况下我们可以采用多重权重方案并将其应用于各个关键指标中同时对于那些具有过高优先级的目标我们将其赋予负权重这有助于避免多目标间的矛盾另外我们还可以考虑采用层次化的方法将目标进行分类然后分别对各类别进行排序从而实现整体优化

6.附录常见问题与解答

Q: 为什么要使用TOPSIS?

A:TOPSIS是一种用于综合评价指标的体系。该方法的特点在于具有易懂性、计算过程较为简便且具备良好的扩展性,在实际应用中广泛应用于多个领域中的多目标优化问题。

Q: TOPSIS算法的优点是什么?

A:TOPSIS算法的优点如下:

该系统开发了一种创新性的TopSIS决策树算法,在资源占用方面表现出显著优势的同时能够加快模型训练效率。该算法支持在线更新权重值并持续优化模型性能。通过综合考量各目标间的差异并设定合理的权重系数安排能够显著增强模型的抗干扰能力。无需预先设定目标数量该系统能够自动根据数据特征进行调整以适应不同场景需求。该算法采用最小化策略通过构建高效的优化框架可有效避免传统多目标方法中的矛盾问题。

全部评论 (0)

还没有任何评论哟~