当前位置: 首页 > news >正文

【2025五一数学建模竞赛B题】 矿山数据处理问题|建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路!

作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析,帮助你全面理解并掌握如何解决类似问题。

详见文末
在这里插入图片描述部分可视化(做了模糊处理,正文里的比这个更细致)
在这里插入图片描述
第一个问题是:根据附件1中的数据A和B,建立数学模型,对数据A进行某种变换,使得变换后的结果与数据B尽可能接近。计算变换后的结果与数据B的误差,并分析误差的来源(如数据噪声、模型偏差等)对结果的影响。

1. 理解问题

首先,我们需要理解问题的本质:

  • 给定:附件1中的数据A和数据B。
  • 目标:对数据A进行某种变换,使得变换后的结果尽可能接近数据B。
  • 输出
    1. 变换后的结果。
    2. 变换后的结果与数据B的误差。
    3. 误差来源分析,如数据噪声、模型偏差等。

2. 数据探索

在进行建模之前,我们需要对数据进行探索,了解其基本特征和关系。例如:

  • 数据A和数据B的维度、分布、统计特性等。
  • 数据A和数据B之间的关系(线性、非线性、周期性等)。
  • 是否存在异常值或噪声。

由于附件1中的数据A和B没有具体给出,我们在这里假设数据A和数据B都是n维向量。

3. 建立模型

3.1 线性变换模型

假设数据A和数据B之间的关系是线性的,我们可以建立一个线性变换模型:

B ′ = k ⋅ A + c B' = k \cdot A + c B=kA+c

其中,$ B’ $ 是变换后的结果,$ k $ 是缩放系数,$ c $ 是偏移量。我们的目标是找到最佳的 $ k $ 和 $ c $,使得 $ B’ $ 尽可能接近 $ B $。

3.2 最小二乘法求解

为了找到最佳的 $ k $ 和 $ c $,我们可以使用最小二乘法。最小二乘法的目标是使误差平方和最小:

minimize ∑ i = 1 n ( B i ′ − B i ) 2 = ∑ i = 1 n ( k ⋅ A i + c − B i ) 2 \text{minimize} \quad \sum_{i=1}^{n} (B_i' - B_i)^2 = \sum_{i=1}^{n} (k \cdot A_i + c - B_i)^2 minimizei=1n(BiBi)2=i=1n(kAi+cBi)2

对 $ k $ 和 $ c $ 求偏导,并令偏导数为0,可以解出 $ k $ 和 $ c $。

3.3 求解过程
  1. 定义误差平方和函数:
    S ( k , c ) = ∑ i = 1 n ( k ⋅ A i + c − B i ) 2 S(k, c) = \sum_{i=1}^{n} (k \cdot A_i + c - B_i)^2 S(k,c)=i=1n(kAi+cBi)2

  2. 对 $ k $ 求偏导:
    ∂ S ∂ k = 2 ∑ i = 1 n ( k ⋅ A i + c − B i ) ⋅ A i = 0 \frac{\partial S}{\partial k} = 2 \sum_{i=1}^{n} (k \cdot A_i + c - B_i) \cdot A_i = 0 kS=2i=1n(kAi+cBi)Ai=0

  3. 对 $ c $ 求偏导:
    ∂ S ∂ c = 2 ∑ i = 1 n ( k ⋅ A i + c − B i ) = 0 \frac{\partial S}{\partial c} = 2 \sum_{i=1}^{n} (k \cdot A_i + c - B_i) = 0 cS=2i=1n(kAi+cBi)=0

  4. 整理得到方程组:
    { k ∑ i = 1 n A i 2 + c ∑ i = 1 n A i = ∑ i = 1 n A i B i k ∑ i = 1 n A i + c ⋅ n = ∑ i = 1 n B i \begin{cases} k \sum_{i=1}^{n} A_i^2 + c \sum_{i=1}^{n} A_i = \sum_{i=1}^{n} A_i B_i \\ k \sum_{i=1}^{n} A_i + c \cdot n = \sum_{i=1}^{n} B_i \end{cases} {ki=1nAi2+ci=1nAi=i=1nAiBiki=1nAi+cn=i=1nBi

  5. 解这个方程组即可得到 $ k $ 和 $ c $。

4. 计算误差

计算变换后的结果 $ B’ = k \cdot A + c $ 与数据B之间的误差。常用的误差度量包括:

  • 均方误差(MSE): MSE = 1 n ∑ i = 1 n ( B i ′ − B i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (B_i' - B_i)^2 MSE=n1i=1n(BiBi)2
  • 平均绝对误差(MAE): MAE = 1 n ∑ i = 1 n ∣ B i ′ − B i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |B_i' - B_i| MAE=n1i=1nBiBi
  • 相关系数(R): R = ∑ i = 1 n ( B i ′ − B ′ ˉ ) ( B i − B ˉ ) ∑ i = 1 n ( B i ′ − B ′ ˉ ) 2 ∑ i = 1 n ( B i − B ˉ ) 2 R = \frac{\sum_{i=1}^{n} (B_i' - \bar{B'})(B_i - \bar{B})}{\sqrt{\sum_{i=1}^{n} (B_i' - \bar{B'})^2 \sum_{i=1}^{n} (B_i - \bar{B})^2}} R=i=1n(BiBˉ)2i=1n(BiBˉ)2 i=1n(BiBˉ)(BiBˉ)

5. 误差来源分析

  1. 数据噪声:原始数据A和B中可能包含噪声,这些噪声会影响到 $ k $ 和 $ c $ 的求解,从而导致变换后的结果与数据B之间存在误差。
  2. 模型偏差:假设数据A和数据B之间的关系是线性的,但实际关系可能是非线性的。这种情况下,线性模型无法完全捕捉到两者之间的关系,从而产生误差。
  3. 采样偏差:数据A和B的采样可能不均匀,或者存在异常值,这也会影响到模型的求解和误差的大小。

6. 模型扩展

如果线性模型无法很好地拟合数据A和数据B之间的关系,可以考虑更复杂的模型

问题1的详细LaTeX数学公式

1. 问题描述

给定数据集 A ∈ R n × m A \in \mathbb{R}^{n \times m} ARn×m B ∈ R n × m B \in \mathbb{R}^{n \times m} BRn×m,目标是找到一个变换 T T T,使得变换后的数据 T ( A ) T(A) T(A) B B B 尽可能接近。同时,计算变换后的误差,并分析误差来源。

2. 数学模型

假设变换 T T T 是一个线性变换,即存在矩阵 W ∈ R m × m W \in \mathbb{R}^{m \times m} WRm×m,使得:

T ( A ) = A W T(A) = A W T(A)=AW

目标是找到矩阵 W W W 使得 T ( A ) T(A) T(A) B B B 的误差最小化,即最小化:

min ⁡ W ∥ A W − B ∥ F 2 \min_{W} \| A W - B \|_F^2 WminAWBF2

其中 ∥ ⋅ ∥ F \|\cdot\|_F F 表示Frobenius范数。

3. 解

上述最小二乘问题的解为:

W = ( A T A ) − 1 A T B W = (A^T A)^{-1} A^T B W=(ATA)1ATB

A T A A^T A ATA 不可逆时,可以使用伪逆或正则化方法求解。

4. 误差计算

变换后的数据为:

B ^ = A W \hat{B} = A W B^=AW

误差矩阵为:

E = B ^ − B E = \hat{B} - B E=B^B

总误差可以用Frobenius范数衡量:

Error = ∥ E ∥ F \text{Error} = \| E \|_F Error=EF

5. 误差来源分析
  1. 数据噪声:原始数据 A A A B B B 可能包含噪声,影响 W W W 的估计。
  2. 模型偏差:假设线性变换可能不足以完全描述 A A A B B B 之间的关系。
  3. 过拟合/欠拟合:模型的复杂度可能不合适,导致对噪声过度敏感或无法捕捉真实关系。
  4. 数值误差:计算过程中可能引入数值不稳定性。
6. 误差影响
  1. 数据噪声:可能导致 W W W 的估计偏差,增加误差。
  2. 模型偏差:如果 A A A B B B 之间的关系是非线性的,线性模型无法准确描述,误差会较大。
  3. 过拟合/欠拟合:过拟合时模型对噪声敏感,欠拟合时无法捕捉真实关系,均可能导致误差增加。
  4. 数值误差:计算 W W W 时的舍入误差或矩阵条件数过大会影响结果精度。
7. 公式
  1. Frobenius范数
    ∥ E ∥ F = ∑ i = 1 n ∑ j = 1 m ∣ e i j ∣ 2 \| E \|_F = \sqrt{\sum_{i=1}^n \sum_{j=1}^m |e_{ij}|^2} EF=i=1nj=1meij2

  2. 最小二乘解
    W = ( A T A ) − 1 A T B W = (A^T A)^{-1} A^T B W=(ATA)1ATB

  3. 误差矩阵
    E = A W − B E = A W - B E=AWB

注意

  1. 以上假设了线性变换,实际问题中可能需要更复杂的变换。
  2. 如果数据维度较高,可能需要考虑正则化或降维技术。
  3. 实际计算中要注意矩阵 ( A T A ) (A^T A) (ATA) 的可逆性。

问题1分析

首先,我们需要理解问题1的要求:

  1. 数据理解:我们有数据A和B,其中A是一个多维数组(具体是几维需要看数据),B也是一个多维数组。我们的目标是对A进行某种变换,使其尽可能接近B。
  2. 变换要求:这个变换可以是线性的(例如,矩阵乘法、缩放、旋转等),也可以是非线性的(例如,多项式变换、指数变换等)。
  3. 误差计算:变换后,我们需要计算A变换后的结果与B之间的误差。
  4. 误差分析:我们需要分析误差的来源,例如数据噪声、模型偏差等。

由于没有具体的数据文件,我们假设数据A和B都是二维数组(矩阵),并且它们的形状相同。我们可以尝试几种常见的变换方法:

  1. 线性变换:假设A可以通过一个矩阵乘法加上一个偏置项来近似B,即 B ≈ A * W + b
  2. 非线性变换:可以使用多项式回归或其他非线性方法。

由于问题中没有明确说明数据的具体形式,我们将采用最简单的线性变换方法,即最小二乘法来找到最佳的 Wb

解决方案

  1. 线性变换模型:假设 B = A * W + b,其中 W是权重矩阵,b是偏置项。
  2. 参数估计:使用最小二乘法来估计 Wb
  3. 误差计算:使用均方误差(MSE)或其他指标来计算变换后的A与B之间的误差。
  4. 误差分析:分析误差的来源,例如数据噪声(数据本身的随机性)、模型偏差(线性模型的局限性)等。

实现步骤

  1. 加载数据A和B。
  2. 假设A和B的形状都是 (m, n),则 W的形状应该是 (n, n)b的形状应该是 (m, n)。但是通常在实际建模中,我们会将这个问题简化为多个独立的线性回归问题,即对B的每一列进行建模。
  3. 对于B的每一列 B[:, i],我们可以使用A的所有列来预测它,即 B[:, i] ≈ A * W[:, i] + b[i]。这样,我们可以为B的每一列拟合一个线性模型。
  4. 将所有列的模型组合起来,得到完整的变换模型。
  5. 计算变换后的A与B之间的误差。
  6. 分析误差。

Python代码实现

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 假设A和B是已经加载的numpy数组,形状为(m, n)
# 这里我们用随机数据模拟
m, n = 100, 5
A = np.random.rand(m, n)
B = np.random.rand(m, n)# 存储变换后的A
A_transformed = np.zeros_like(A)# 对B的每一列进行建模
for i in range(n):model = LinearRegression()model.fit(A, B[:, i])A_transformed[:, i] = model.predict(A)# 计算误差
mse = mean_squared_error(B, A_transformed)
print("均方误差 (MSE):", mse)# 误差来源分析
# 1. 数据噪声:由于A和B都是随机生成的,本身包含噪声。
# 2. 模型偏差:我们使用的是线性模型,如果真实关系是非线性的,则模型无法捕捉这种关系。
# 在实际应用中,还需要考虑其他因素,比如数据采集的误差、模型的假设是否合理等。

注意事项

  1. 上述代码假设A和B是二维数组,且形状相同。在实际问题中,需要根据数据的具体情况调整代码。
  2. 如果A和B的维度不同,可能需要更复杂的变换方法。
  3. 线性模型可能不是最优的,如果数据之间存在非线性关系,可以考虑使用多项式回归、支持向量回归等方法。
  4. 误差分析部分需要根据具体数据和应用背景进行更深入的分析。

问题2

问题2. 请分析附件2中给出的一组矿山监测数据,建立数据压缩模型,对附件2中的数据进行降维处理,计算压缩效率(包括但不限于压缩比、存储空间节省率等)。进一步建立数据还原模型,将降维后的数据进行还原,分析降维和还原对数据质量的影响,提供还原数据的准确度(MSE不高于0.005)和误差分析。(要求在保证还原数据的准确度的前提下,尽可能地提高压缩效率)

问题2的具体要求:

  1. 对附件2中的矿山监测数据进行降维处理;
  2. 建立数据压缩模型,并计算压缩效率(如压缩比、存储空间节省率等);
  3. 建立数据还原模型,将降维后的数据还原,并分析降维和还原对数据质量的影响;
  4. 提供还原数据的准确度(MSE不高于0.005)和误差分析;
  5. 在保证还原数据的准确度的前提下,尽可能地提高压缩效率。

问题分析

  1. 数据压缩模型:可以选择主成分分析(PCA)或其他降维方法,以减少数据的维度。
  2. 压缩效率:压缩效率可以通过计算压缩比和存储空间节省率来衡量。压缩比是原始数据大小与压缩后数据大小的比值。存储空间节省率是指压缩后节省的存储空间占原始存储空间的比例。
  3. 数据还原模型:需要设计一个方法,将降维后的数据尽可能还原到原始数据空间。可以使用PCA的逆变换或其他重建方法。
  4. 数据质量评估:使用均方误差(MSE)来衡量还原数据与原始数据的差异,确保MSE不高于0.005。
  5. 误差分析:分析降维和重建过程中误差的来源和影响,确保模型的有效性。
  6. 提高压缩效率:在满足MSE要求的前提下,尽可能减少降维后的数据维度,提高压缩效率。

步骤1:数据压缩(降维)

  1. 选择降维方法:主成分分析(PCA)是一种经典且广泛应用的降维方法,它通过线性变换将原始数据变换到新坐标系中,使得第一个新坐标轴(第一主成分)的方差最大,第二个新坐标轴(第二主成分)的方差次之,以此类推。PCA可以有效降低数据的维度并保留主要信息。

  2. 实施PCA

    • 对数据进行标准化(均值为0,方差为1)。
    • 计算数据的协方差矩阵。
    • 计算协方差矩阵的特征值和特征向量。
    • 选择前k个特征向量(主成分),将原始数据投影到这k个主成分上,得到降维后的数据。
  3. 确定主成分数量k

    • 可以通过累计方差贡献率来确定k,通常选择使累计方差贡献率达到较高值(如95%)的k。
    • 或者通过迭代,逐步增加k,直到MSE满足要求(不高于0.005)为止,同时尽量减小k以提高压缩效率。

步骤2:数据还原

  1. 数据还原:使用PCA的逆变换将降维后的数据还原到原始数据空间。

    • 将降维后的数据与相应主成分的转置相乘,得到还原后的数据。
    • 注意:由于PCA降维过程中会丢失一些信息,因此还原后的数据与原始数据会有差异。
  2. 计算MSE:计算还原数据与原始数据之间的均方误差(MSE),确保MSE不高于0.005。

步骤3:计算压缩效率

  1. 压缩比:原始数据大小与压缩后数据大小的比值。假设原始数据有n个样本,每个样本有m个维度,则原始数据大小为n×m。降维到k维后,压缩后数据大小为n×k,此外还需存储k个主成分(每个主成分是m维),大小为k×m。压缩比计算公式为:
    压缩比 = n × m n × k + k × m \text{压缩比} = \frac{n \times m}{n \times k + k \times m} 压缩比=n×k+k×mn×m
    如果n >> m,则压缩比近似为m/k。

  2. 存储空间节省率
    存储空间节省率 = 原始数据大小 − 压缩后数据大小 原始数据大小 × 100 % \text{存储空间节省率} = \frac{\text{原始数据大小} - \text{压缩后数据大小}}{\text{原始数据大小}} \times 100\% 存储空间节省率=原始数据大小原始数据大小压缩后数据大小×100%
    其中,压缩后数据大小包括降维后的数据大小和主成分的大小。

步骤4:误差分析与模型评估

  1. MSE计算:计算还原数据与原始数据的均方误差(MSE)。
    $$
    \text{MSE} = \frac{1}{n} \sum_{i=1}^n | x_i - \hat{x}_i

问题2的数学建模

1. 数据压缩(降维)模型

1.1 数据标准化

假设原始数据矩阵为 $ X \in \mathbb{R}^{n \times m} $,其中 $ n $ 为样本数,$ m $ 为特征数。首先对数据进行标准化处理,使得每个特征的均值为0,方差为1。标准化后的数据矩阵为 $ Z \in \mathbb{R}^{n \times m} $,其中:

Z i j = X i j − μ j σ j , i = 1 , … , n ; j = 1 , … , m Z_{ij} = \frac{X_{ij} - \mu_j}{\sigma_j}, \quad i = 1, \dots, n; \quad j = 1, \dots, m Zij=σjXijμj,i=1,,n;j=1,,m

其中,$ \mu_j = \frac{1}{n} \sum_{i=1}^n X_{ij} $ 是第 $ j $ 个特征的均值,$ \sigma_j = \sqrt{\frac{1}{n} \sum_{i=1}^n (X_{ij} - \mu_j)^2} $ 是第 $ j $ 个特征的标准差。

1.2 计算协方差矩阵

标准化后的数据 $ Z $ 的协方差矩阵为:

Σ = 1 n Z T Z ∈ R m × m \Sigma = \frac{1}{n} Z^T Z \in \mathbb{R}^{m \times m} Σ=n1ZTZRm×m

1.3 计算特征值和特征向量

对协方差矩阵 $ \Sigma $ 进行特征值分解:

Σ = V Λ V T \Sigma = V \Lambda V^T Σ=VΛVT

其中,$ V \in \mathbb{R}^{m \times m} $ 是特征向量矩阵,每一列是一个特征向量;$ \Lambda = \text{diag}(\lambda_1, \dots, \lambda_m) $ 是特征值对角矩阵,特征值按降序排列:$ \lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_m \geq 0 $。

1.4 选择主成分数量

选择前 $ k $ 个主成分,使得累计方差贡献率达到一定阈值(如95%)。累计方差贡献率为:

Cumulative Variance = ∑ i = 1 k λ i ∑ i = 1 m λ i \text{Cumulative Variance} = \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^m \lambda_i} Cumulative Variance=i=1mλii=1kλi

或者,通过迭代选择 $ k $,使得还原后的数据MSE不高于0.005。

1.5 数据降维

选择前 $ k $ 个特征向量 $ V_k \in \mathbb{R}^{m \times k} $,将原始数据投影到主成分上,得到降维后的数据:

Z k = Z V k ∈ R n × k Z_k = Z V_k \in \mathbb{R}^{n \times k} Zk=ZVkRn×k

2. 数据还原模型

2.1 数据还原

将降维后的数据 $ Z_k $ 还原到原始数据空间:

Z ^ = Z k V k T ∈ R n × m \hat{Z} = Z_k V_k^T \in \mathbb{R}^{n \times m} Z^=ZkVkTRn×m

然后,将 $ \hat{Z} $ 反标准化,得到还原后的原始数据 $ \hat{X} $:

X ^ i j = Z ^ i j ⋅ σ j + μ j , i = 1 , … , n ; j = 1 , … , m \hat{X}_{ij} = \hat{Z}_{ij} \cdot \sigma_j + \mu_j, \quad i = 1, \dots, n; \quad j = 1, \dots, m X^ij=Z^ijσj+μj,i=1,,n;j=1,,m

2.2 计算MSE

计算还原数据 $ \hat{X} $ 与原始数据 $ X $ 的均方误差(MSE):

MSE = 1 n m ∑ i = 1 n ∑ j = 1 m ( X i j − X ^ i j ) 2 \text{MSE} = \frac{1}{n m} \sum_{i=1}^n \sum_{j=1}^m (X_{ij} - \hat{X}_{ij})^2 MSE=nm1i=1nj=1m(XijX^ij)2

要求 $ \text{MSE} \leq 0.005 $。

3. 压缩效率计算

3.1 压缩比

原始数据大小为 $ n \times m $,降维后数据大小为 $ n \times k $,另外需要存储 $ k $ 个主成分(每个主成分是 $ m $ 维),大小为 $ k \times m $。压缩比为:

Compression Ratio = n × m n × k + k × m = n m k ( n + m ) \text{Compression Ratio} = \frac{n \times m}{n \times k + k \times m} = \frac{n m}{k (n + m)} Compression Ratio=n×k+k×mn×m=k(n+m)nm

3.2 存储空间节省率

存储空间节省率为:

Storage Saving Rate = ( n × m ) − ( n × k + k × m ) n × m × 100 % = ( 1 − k ( n + m ) n m ) × 100 % \text{Storage Saving Rate} = \frac{(n \times m) - (n \times k + k \times m)}{n \times m} \times 100\% = \left(1 - \frac{k (n + m)}{n m}\right) \times 100\% Storage Saving Rate=n×m(n×m)(n×k+k×m)×100%=(1nmk(n+m))×100%

4. 误差分析与模型评估

分析降维和还原过程中的误差来源,包括:

  • 主成分数量选择导致的方差损失

问题2的详细数学公式

1. 数据标准化(Standardization)

在进行PCA之前,通常需要对数据进行标准化处理,使每个特征均值为0,方差为1。设原始数据矩阵为 X ∈ R n × m X \in \mathbb{R}^{n \times m} XRn×m,其中 n n n 是样本数, m m m 是特征数。标准化后的数据矩阵 X std X_{\text{std}} Xstd 为:

X std = ( X − μ ) / σ X_{\text{std}} = \left( X - \mu \right) / \sigma Xstd=(Xμ)/σ

其中 μ ∈ R m \mu \in \mathbb{R}^m μRm 是每个特征的均值向量, σ ∈ R m \sigma \in \mathbb{R}^m σRm 是每个特征的标准差向量,除法为逐元素除法。

2. 计算协方差矩阵(Covariance Matrix)

标准化后数据的协方差矩阵 C ∈ R m × m C \in \mathbb{R}^{m \times m} CRm×m 为:

C = 1 n − 1 X std T X std C = \frac{1}{n - 1} X_{\text{std}}^T X_{\text{std}} C=n11XstdTXstd

3. 计算特征值与特征向量(Eigenvalues and Eigenvectors)

对协方差矩阵 C C C 进行特征值分解:

C = V Λ V T C = V \Lambda V^T C=VΛVT

其中 Λ = diag ( λ 1 , λ 2 , … , λ m ) \Lambda = \text{diag}(\lambda_1, \lambda_2, \dots, \lambda_m) Λ=diag(λ1,λ2,,λm) 是对角矩阵,对角线元素 λ i \lambda_i λi 是特征值, V ∈ R m × m V \in \mathbb{R}^{m \times m} VRm×m 是特征向量矩阵,每一列是一个特征向量。

4. 选择主成分(Principal Components Selection)

将特征值从大到小排序,选择前 k k k 个最大的特征值对应的特征向量,构成投影矩阵 W ∈ R m × k W \in \mathbb{R}^{m \times k} WRm×k。降维后的数据 Z ∈ R n × k Z \in \mathbb{R}^{n \times k} ZRn×k 为:

Z = X std W Z = X_{\text{std}} W Z=XstdW

5. 数据还原(Reconstruction)

使用投影矩阵 W W W 将降维后的数据 Z Z Z 还原到原始空间,得到 X ^ std ∈ R n × m \hat{X}_{\text{std}} \in \mathbb{R}^{n \times m} X^stdRn×m

X ^ std = Z W T \hat{X}_{\text{std}} = Z W^T X^std=ZWT

将标准化后的数据还原为原始尺度:

X ^ = X ^ std ⊙ σ + μ \hat{X} = \hat{X}_{\text{std}} \odot \sigma + \mu X^=X^stdσ+μ

其中 ⊙ \odot 表示逐元素乘法。

6. 计算均方误差(Mean Squared Error, MSE)

计算还原数据 X ^ \hat{X} X^ 与原始数据 X X X 的均方误差:

MSE = 1 n m ∑ i = 1 n ∑ j = 1 m ( X i j − X ^ i j ) 2 \text{MSE} = \frac{1}{n m} \sum_{i=1}^n \sum_{j=1}^m (X_{ij} - \hat{X}_{ij})^2 MSE=nm1i=1nj=1m(XijX^ij)2

7. 压缩比(Compression Ratio)

假设原始数据 X ∈ R n × m X \in \mathbb{R}^{n \times m} XRn×m 的大小为 n × m n \times m n×m,降维后数据 Z ∈ R n × k Z \in \mathbb{R}^{n \times k} ZRn×k 的大小为 n × k n \times k n×k,投影矩阵 W ∈ R m × k W \in \mathbb{R}^{m \times k} WRm×k 的大小为 m × k m \times k m×k。压缩比为:

压缩比 = n × m n × k + m × k \text{压缩比} = \frac{n \times m}{n \times k + m \times k} 压缩比=n×k+m×kn×m

8. 存储空间节省率(Storage Saving Ratio)

存储空间节省率为:

存储空间节省率 = n × m − ( n × k + m × k ) n × m × 100 % \text{存储空间节省率} = \frac{n \times m - (n \times k + m \times k)}{n \times m} \times 100\% 存储空间节省率=n×mn×m(n×k+m×k)×100%

问题2的解题步骤

  1. 数据预处理:对附件2中的数据进行标准化处理。
  2. PCA降维:计算标准化后数据的协方差矩阵,进行特征值分解,选择合适的主成分数量 k k k,使得还原后的数据的MSE不高于0.005。
  3. 数据还原:将降维后的数据还原,并计算MSE。
  4. 计算压缩效率:计算压缩比和存储空间节省率。
  5. 误差分析:分析降维和还原对数据质量的影响。

注意事项

  • 在选择主成分数量 k k k 时,需要权衡压缩效率和MSE的要求。可以通过逐步增加 k k k 并计算MSE,直到满足MSE ≤ 0.005。
  • 存储空间节省率和压缩比的计算需要考虑到存储降维后数据 Z Z Z 和投影矩阵 W W W 的空间。
  • 在还原数据时,需要将标准化后的数据还原到原始尺度,再计算MSE。
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error# 读取数据
data = pd.read_excel('附件2.xlsx', header=None)
X = data.values# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 初始化PCA,设置主成分数量为k,这里假设k=2
k = 2
pca = PCA(n_components=k)# 执行PCA降维
X_pca = pca.fit_transform(X_scaled)# 还原数据
X_reconstructed = pca.inverse_transform(X_pca)# 将标准化后的数据还原回原始尺度
X_reconstructed_original = scaler.inverse_transform(X_reconstructed)# 计算MSE
mse = mean_squared_error(X, X_reconstructed_original)# 压缩比和存储空间节省率计算
n, m = X.shape
original_size = n * m
compressed_size = n * k + k * m
compression_ratio = original_size / compressed_size
storage_saving = (original_size - compressed_size) / original_size * 100print(f'MSE: {mse}')
print(f'Compression ratio: {compression_ratio}')
print(f'Storage saving (%): {storage_saving}')

解释

  1. 数据读取与标准化:首先读取附件2中的数据,并进行标准化处理,使得每个特征的均值为0,方差为1。标准化是PCA的必要步骤,因为PCA对特征的尺度敏感。
  2. PCA降维:使用 sklearn.decomposition.PCA进行降维。在这里,我们假设主成分数量 k=2,但实际应用中需要根据累计方差贡献率或MSE要求来选择合适的 k值。
  3. 数据还原:通过 inverse_transform方法将降维后的数据还原到原始特征空间,然后再将标准化后的数据还原到原始尺度。
  4. MSE计算:计算还原数据与原始数据之间的均方误差(MSE)。
  5. 压缩效率计算:计算压缩比和存储空间节省率。假设原始数据大小为 n x m,压缩后数据大小为 n x k + k x m,其中 n x k是降维后的数据大小,k x m是主成分的大小。

注意事项

  • 在实际应用中,需要根据MSE的要求(不高于0.005)来选择合适的 k值。可以通过迭代尝试不同的 k值,直到满足MSE要求。
  • 如果 k值过大,虽然MSE会降低,但压缩效率也会降低。因此,需要在满足MSE要求的前提下,尽可能选择较小的 k值。
  • 存储空间节省率和压缩比只是理论上的计算,实际存储时还需要考虑数据的存储格式和精度等因素。

小天会给大家带来所有题目完整思路+完整代码+完整论文全解全析
其中更详细的思路、各题目思路、代码、成品论文等,可以点击下方名片:

相关文章:

  • qemu(4) -- qemu-system-arm使用
  • 从股指到期指,哪些因素影响基差?
  • Selenium3自动化测试,Python3测试开发教程视频测试用例设计
  • 学习与规划的融合Dyna-Q:python从零实现
  • 【Github仓库】Learn-Vim随笔
  • Redis ⑧-RESP | 渐进式遍历 | 数据库管理
  • 机器人--主机--控制系统
  • YOLOv8模型训练过程
  • MCP:智能家居的“大脑”,如何引领未来居住革命
  • LangChain4j +DeepSeek大模型应用开发——7 项目实战 创建硅谷小鹿
  • Python Cookbook-6.14 实现状态设计模式
  • DeepSeek 赋能自然语言处理:从理论到实践的全方位解析
  • Qt指南针
  • 支持selenium的chrome driver更新到136.0.7103.49
  • 打包 Python 项目为 Windows 可执行文件:高效部署指南
  • 33、VS中提示“以下文件中的行尾不一致。是否将行尾标准化?“是什么意思?
  • 【C语言练习】014. 使用数组作为函数参数
  • Java关键字解析
  • Canvas特效实例:黑客帝国-字母矩阵(字母雨)
  • OpenAI最新发布的GPT-4.1系列模型,性能体验如何?
  • 426.8万人次!长三角铁路创单日客发量历史新高
  • 新华时评:需要“重新平衡”的是美国心态
  • 三家“券商系”公募同日变更掌门人,新董事长均为公司股东方老将
  • 国家网信办举办在欧中资企业座谈会,就数据跨境流动等进行交流
  • 铁路迎来节前出行高峰,今日全国铁路预计发送旅客1870万人次
  • 宁波市纪委监委通报4起违反中央八项规定精神典型问题