[数学建模从入门到入土] 评价模型

[数学建模从入门到入土] 评价模型

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

评价类问题

针对多个候选对象(方案, 产品, 项目, 政策, 指标集)或多个维度的表现(性能, 成本, 风险, 收益)进行综合比较和衡量, 从而得到合理的等级划分排序

  1. 标准化
  2. 确定权重

标准化

重要性:

  1. 消除量纲影响
  2. 统一取值范围
1. min-max normalization

缩放到0-1区间

对于越大越好的:
x ′ = x − x min ⁡ x max ⁡ − x min ⁡ x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}} x′=xmax−xminx−xmin

对于越小越好的:
x ′ = x max ⁡ − x x max ⁡ − x min ⁡ x' = \frac{x_{\max} - x}{x_{\max} - x_{\min}} x′=xmax−xminxmax−x

  • 优点: 简单直观
  • 缺点: 异常值敏感
2. mean normalization

缩放到-1-1区间, 均值为0
x ′ = x − μ x max ⁡ − x min ⁡ x' = \frac{x - \mu}{x_{\max} - x_{\min}} x′=xmax−xminx−μ

  • 优点: 简单直观, 保留数据中心化
  • 缺点: 异常值敏感
3. z-score normalization

均值为0, 方差为1的标准正态分布 (适用于消除异常值影响)
x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x′=σx−μ

  • 优点: 适用于正态分布的数据
  • 缺点: 不适用于正态分布的数据; 异常值敏感
4. vector normalization

适用于欧几里得空间中的多维数据 (x除以其模长)
x ′ = x ∑ i = 1 n x i 2 x' = \frac{x}{\sqrt{\sum_{i=1}^n x_i^2}} x′=∑i=1nxi2 x

  • 优点: 适用于计算欧几里得距离(文本分类, 图像处理)
  • 缺点: 不适用于需要保留数据间原有比例关系的场景
5. score normalization

缩放, 用于评分系统
x ′ = x ∑ i = 1 n x i x' = \frac{x}{\sum_{i=1}^n x_i} x′=∑i=1nxix

  • 优点: 直观, 用于评分
  • 缺点: 不适用于需要保留数据绝对值的场景; 极端值敏感
6. log

适用于数据分布高度偏斜 (+1避免对数零的情况)
x ′ = log ⁡ ( x + 1 ) x' = \log(x+1) x′=log(x+1)

  • 优点: 适用于高度偏斜的数据
  • 缺点: 对非正值无效

确定权重

1.主观赋权

专家经验

  • 层次分析AHP
  • 模拟层次分析
  • 德尔菲法
2.客观赋权

数据本身

  • 熵权法EWM
  • 因子分析
  • 变异系数法

3.组合赋权

  • 加权平均法
  • 乘法融合法
  • 优化模型
层次分析AHP
  • 建立递阶层次结构模型

  • 构造出各层次中的所有判断矩阵

    ( a i j a_{ij} aij: 第i个指标相对第j个指标的重要程度)

  • 一致性检验

  • 求权重后进行评价

    (各指标乘以其对应的权重, 加和得到总分)

例子:

熵权法EWM

对于某个指标, 可以用熵值来判断某个指标的离散程度

信息熵值越小, 指标的离散程度就越大, 该指标的影响/权重就越大

(如果某项指标的值都相等, 则该指标不起作用)

(依据的原理: 指标的变异程度越小, 其反映的信息量越少, 对应的权重越低)

  1. 数据标准化
    z i j = x i j ∑ i = 1 n x i j 2 z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^n}x_{ij}^2} zij=∑i=1n xij2xij

  2. 计算第j个指标下, 第i个样本所占的比重
    p i j = z i j ~ ∑ i = 1 n z i j ~ p_{ij}=\frac{\widetilde{z_{ij}}}{\sqrt{\sum_{i=1}^n}\widetilde{z_{ij}}} pij=∑i=1n zij zij

  3. 计算熵权
    e j = − 1 ln ⁡ n ∑ i = 1 n p i j ln ⁡ ( p i j ) ( j = 1 , 2 , . . . , m ) d j = 1 − e j W j = d j ∑ j = 1 m d j e_j = -\frac{1}{\ln n}\sum_{i=1}^n p_{ij} \ln(p_{ij}) \quad (j = 1,2,...,m) \\ d_j = 1 - e_j \\ W_j = \frac{d_j}{\sum_{j=1}^m d_j} ej=−lnn1i=1∑npijln(pij)(j=1,2,...,m)dj=1−ejWj=∑j=1mdjdj

除以 ln ⁡ n \ln n lnn是为了使信息熵始终在[0,1]区间

由于信息熵 e j e_j ej越大, 其信息效用越小, 所以需要用1来减

-> 信息效用 d j d_j dj越大, 其权重 W j W_j Wj越大
例子:

组合赋权法
  • 线性加权平均法:

    设定参数 α , β α,β α,β 且 α + β = 1 α + β=1 α+β=1,则
    W ∗ = α W A H P + β W E W M W^* = αW_{AHP} + βW_{EWM} W∗=αWAHP+βWEWM

    可根据决策者对主客观判断的信任度调节 α , β α,β α,β

  • 乘法组合法:

    将对应指标的AHP和EWM权重相乘后归一化
    w i ∗ = w i A H P ⋅ w i E W M ∑ j w j A H P ⋅ w j E W M w_i^* = \frac{w_i^{AHP} \cdot w_i^{EWM}}{\sum_j w_j^{AHP} \cdot w_j^{EWM}} wi∗=∑jwjAHP⋅wjEWMwiAHP⋅wiEWM

    若两种方法对同一指标权重均高,则综合后该指标权重更突出

  1. 准备数据:已有指标数据并通过 AHP 求得 W A H P W_{AHP} WAHP,通过 EWM 求得 W E W M W_{EWM} WEWM
  2. 选择组合策略:根据需求选择加权平均法或乘法组合法
  3. 计算综合权重
  4. 归一化处理:若计算后 Σ w ≠ 1 \Sigma w≠1 Σw=1,则归一化使 Σ w ∗ = 1 \Sigma w^*=1 Σw∗=1
  5. 验证与分析:比较 w ∗ w^* w∗ 与 W A H P , W E W M W_{AHP},W_{EWM} WAHP,WEWM,分析组合后权重的变化特性

逼近理想解排序法TOPSIS

通过计算各方案与理想解和负理想解的距离, 对多个方案进行排序

核心思想: 最优方案应该同时最接近理想解和最原理负理想解

TOPSIS基于欧几里得距离

e.g. 供应商的选择, 投资策略, 资源分配

  1. 数据标准化(x->z)

  2. 加权处理(z->v)

  3. 确定理想解和负理想解

    (分别计算各指标的最优值和最劣值)
    理想解: A + = ( max ⁡ ( v i 1 ) , max ⁡ ( v i 2 ) , ... , max ⁡ ( v i n ) ) 负理想解: A − = ( min ⁡ ( v i 1 ) , min ⁡ ( v i 2 ) , ... , min ⁡ ( v i n ) ) \text{理想解:}\quad A^+ = \left(\max(v_{i1}), \max(v_{i2}), \dots, \max(v_{in})\right) \\ \text{负理想解:}\quad A^- = \left(\min(v_{i1}), \min(v_{i2}), \dots, \min(v_{in})\right) 理想解:A+=(max(vi1),max(vi2),...,max(vin))负理想解:A−=(min(vi1),min(vi2),...,min(vin))

  4. 计算距离
    D i + : 第i个方案与理想解的欧几里得距离 D i − : 第i个方案与负理想解的欧几里得距离 D_i^+: \text{第i个方案与理想解的欧几里得距离} \\ D_i^-: \text{第i个方案与负理想解的欧几里得距离} Di+:第i个方案与理想解的欧几里得距离Di−:第i个方案与负理想解的欧几里得距离

  5. 计算贴近度

    (贴近度越大, 方案越优)
    C i = D i − D i + + D i − C_i = \frac{D_i^-}{D_i^+ + D_i^-} Ci=Di++Di−Di−

例子:

py 复制代码
import numpy as np

def normalize_data(data, criteria_types):
    normalized_data = np.zeros_like(data, dtype=float)
    n, m = data.shape

    for j in range(m):
        column_data = data[:, j]
        if criteria_types[j] == 1:  # 正向指标
            normalized_data[:, j] = (
                (column_data - np.min(column_data)) / (np.max(column_data) - np.min(column_data))
            )
        else:  # 逆向指标
            normalized_data[:, j] = (
                (np.max(column_data) - column_data) / (np.max(column_data) - np.min(column_data))
            )
    return normalized_data

def weighted_normalization(normalized_data, weights):
    # todo
    normalized_data = np.asarray(normalized_data, dtype=float)
    weights = np.asarray(weights, dtype=float)

    if normalized_data.ndim != 2:
        raise ValueError("normalized_data 必须是二维矩阵 (n, m)")
    if weights.ndim != 1:
        raise ValueError("weights 必须是一维向量 (m,)")
    if normalized_data.shape[1] != weights.shape[0]:
        raise ValueError(f"维度不匹配: normalized_data.shape={normalized_data.shape}, weights.shape={weights.shape}")

    w_sum = weights.sum()
    if not np.isfinite(w_sum) or w_sum <= 0:
        raise ValueError("weights 之和必须为正且有限")
    # 如果你希望权重一定归一化,可以保留这句
    weights = weights / w_sum

    return normalized_data * weights
def calculate_ideal_solutions(weighted_data):
    ideal_solution = np.max(weighted_data, axis=0)
    negative_ideal_solution = np.min(weighted_data, axis=0)
    return ideal_solution, negative_ideal_solution

def calculate_distances(weighted_data, ideal_solution, negative_ideal_solution):
    n = weighted_data.shape[0]
    d_plus = np.zeros(n)
    d_minus = np.zeros(n)

    for i in range(n):
        d_plus[i] = np.sqrt(np.sum((weighted_data[i] - ideal_solution) ** 2))
        d_minus[i] = np.sqrt(np.sum((weighted_data[i] - negative_ideal_solution) ** 2))

    return d_plus, d_minus

def calculate_closeness(d_plus, d_minus):
    return d_minus / (d_plus + d_minus)

data = np.array([
    [100, 8, 10],
    [150, 7, 8],
    [120, 9, 12]
])

criteria_types = [-1, 1, -1]

weights = np.array([0.4, 0.3, 0.3])

normalized_data = normalize_data(data, criteria_types)
print("标准化后的数据:")
print(normalized_data)

weighted_data = weighted_normalization(normalized_data, weights)
print("\n加权标准化后的数据:")
print(weighted_data)

ideal_solution, negative_ideal_solution = calculate_ideal_solutions(weighted_data)
print("\n理想解:", ideal_solution)
print("负理想解:", negative_ideal_solution)

d_plus, d_minus = calculate_distances(weighted_data, ideal_solution, negative_ideal_solution)
print("\n与理想解的距离:", d_plus)
print("与负理想解的距离:", d_minus)

closeness = calculate_closeness(d_plus, d_minus)
print("\n各方案的贴近度:", closeness)


suppliers=["供应商A", "供应商B", "供应商C"]
ranking = sorted(zip(suppliers, closeness), key=lambda x: x[1], reverse=True)
print("\n推荐排序:")
for i, (supplier, score) in enumerate(ranking, 1):
    print(f"{i}. {supplier}: {score:.4f}")

补充-一致矩阵

对于正互反矩阵A: A ∈ R n × n A\in\mathbb{R}^{n\times n} A∈Rn×n
A = [ a 11 a 12 ... a 1 n a 21 a 22 ... a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ... a n n ] A = \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \dots & a_{nn} \end{bmatrix} A= a11a21⋮an1a12a22⋮an2......⋱...a1na2n⋮ann

a i j > 0 , a i i = 1 , a i j = 1 a j i a_{ij}>0,\quad a_{ii}=1,\quad a_{ij}=\frac{1}{a_{ji}} aij>0,aii=1,aij=aji1

其为一致矩阵的充要条件是:
{ a i j > 0 所有元素均大于 0 a 11 = a 22 = ⋯ = a n n = 1 对角线元素均为 1 [ a i 1 , a i 2 , ... , a i n ] = k i [ a 11 , a 12 , ... , a 1 n ] 矩阵每行成比例(r(A)=1) \begin{cases} a_{ij} > 0 & \text{所有元素均大于 0} \\ a_{11} = a_{22} = \dots = a_{nn} = 1 & \text{对角线元素均为 1} \\ \left[ a_{i1}, a_{i2}, \dots, a_{in} \right] = k_i \left[ a_{11}, a_{12}, \dots, a_{1n} \right] & \text{矩阵每行成比例(r(A)=1)} \end{cases} ⎩ ⎨ ⎧aij>0a11=a22=⋯=ann=1[ai1,ai2,...,ain]=ki[a11,a12,...,a1n]所有元素均大于 0对角线元素均为 1矩阵每行成比例(r(A)=1)

故而, 一致矩阵只有一个特征值 n n n, 其余为0

特征值为n时, 其特征向量对应为:
k [ 1 a 11 1 a 12 ⋮ 1 a 1 n ] , k ≠ 0 k \begin{bmatrix} \frac{1}{a_{11}} \\ \frac{1}{a_{12}} \\ \vdots \\ \frac{1}{a_{1n}} \end{bmatrix}, \quad k \ne 0 k a111a121⋮a1n1 ,k=0

推论: n阶正互反矩阵A为一致矩阵 当且仅当 最大特征值 λ m a x = n \lambda_{max}=n λmax=n

若正互反矩阵A的最大特征值 λ m a x > n \lambda_{max}>n λmax>n, 则需要一致性检验(判断该矩阵的一致性是否在接受范围内)

补充-层次分析法若未通过一致性检验

1.算术平均法求权重
  1. 第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
  2. 第二步:将归一化的各列相加(按行求和)
  3. 第三步:将相加后得到的向量中每个元素除以n即可得到权重向量

假设判断矩阵:
A = [ a 11 ... a 1 n ⋮ ⋱ ⋮ a n 1 ... a n n ] A= \begin{bmatrix} a_{11} & \dots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{n1} & \dots & a_{nn} \end{bmatrix} A= a11⋮an1...⋱...a1n⋮ann

那么算术平均法求得的权重向量:
w i = 1 n ∑ j = 1 n a i j ∑ k = 1 n a k j ( i = 1 , 2 , 3 , . . . , n ) w_i = \frac{1}{n}\sum_{j=1}^n \frac{a_{ij}}{\sum_{k=1}^n a_{kj}} \quad (i = 1,2,3,...,n) wi=n1j=1∑n∑k=1nakjaij(i=1,2,3,...,n)

2.几何平均法求权重
  1. 第一步:将判断矩阵的各行元素相乘得到的值组成一个列向量
  2. 第二步:将得到的列向量的每个分量开n次方
  3. 第三步:对该列向量进行归一化即可得到权重向量

假设判断矩阵:
A = [ a 11 ... a 1 n ⋮ ⋱ ⋮ a n 1 ... a n n ] A= \begin{bmatrix} a_{11} & \dots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{n1} & \dots & a_{nn} \end{bmatrix} A= a11⋮an1...⋱...a1n⋮ann

那么几何平均法求得的权重向量:
w i = ( ∏ j = 1 n a i j ) 1 n ∑ k = 1 n ( ∏ j = 1 n a k j ) 1 n ( i = 1 , 2 , . . . , n ) w_i = \frac{\left(\prod_{j=1}^n a_{ij}\right)^{\frac{1}{n}}}{\sum_{k=1}^n \left(\prod_{j=1}^n a_{kj}\right)^{\frac{1}{n}}} \quad (i = 1,2,...,n) wi=∑k=1n(∏j=1nakj)n1(∏j=1naij)n1(i=1,2,...,n)

3.特征值法求权重

一致矩阵有一个特征值 n n n,其余特征值均为 0 0 0

另外,我们很容易得到,特征值为 n n n时,对应的特征向量刚好为权重向量

假如我们的判断矩阵一致性可以接受,那么我们可以仿照一致矩阵权重的求法

  1. 第一步:求出矩阵 A A A的最大特征值 λ m a x \lambda_{max} λmax以及其对应的特征向量 x x x
  2. 第二步:对求出的特征向量进行归一化即可得到我们的权重

( A − λ m a x E ) x = 0 (A-\lambda_{max}E)x=0 (A−λmaxE)x=0

相关推荐
阡陌..2 小时前
浅谈SAR图像处理---形态学滤波
图像处理·人工智能·python
renhongxia12 小时前
多机器人环境监测中的异质性,用于解决时间冲突任务
人工智能·信息可视化·语言模型·自然语言处理·数据分析·机器人
源于花海2 小时前
迁移学习的第三类方法:子空间学习(2)——流形学习
人工智能·机器学习·迁移学习·流形学习·子空间学习
方安乐2 小时前
杂记:文档解析器之MinerU
人工智能
AI猫站长2 小时前
快讯|星海图、众擎机器人、魔法原子释放IPO信号,2026年或成上市大年
人工智能·机器人·具身智能·灵心巧手·上市·星海图·众擎机器人
鲁邦通物联网2 小时前
基于容器化的边缘计算网关应用部署实践:Python+MQTT
人工智能·边缘计算·数据采集·工业数据采集·边缘计算网关·5g数采
方安乐2 小时前
杂记:文档解析器
人工智能
+电报dapp1292 小时前
2025区块链革命:当乐高式公链遇见AI预言机,三大行业已被颠覆
人工智能·金融·web3·去中心化·区块链·哈希算法·零知识证明
linux kernel2 小时前
第三部分:应用层
网络·linux网络