【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值。
  • 存储空间节省率和压缩比只是理论上的计算,实际存储时还需要考虑数据的存储格式和精度等因素。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-02&#…

Yolo迁移训练-带训练源码

目录 下载Git 拉下yolo模型 下载labelimg 准备训练集 迁移训练 继续训练 下载Git Git - Downloading Package 拉下yolo模型 然后用克隆脚本拉下yolo模型 python clone_yolo.py import os import subprocess import sys import shutildef check_git_installed():"…

LangChain框架-PromptTemplate 详解

摘要 本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用…

中小企业设备预测性维护三步构建法:从零到精的技术跃迁与中讯烛龙实践

在工业4.0浪潮中,中小企业常陷入"设备故障频发"与"数字化成本高企"的双重困境。本文基于半导体、食品加工等行业实证数据,结合中讯烛龙系统技术突破,为中小企业提供一套零基础、低门槛、可扩展的预测性维护实施框架&…

C30-函数

一 函数的优点 避免代码冗长模块化的设计思路(十分类似组装电脑)按功能划分,每个函数代表一个功能 二 函数的三要素 函数要先定义再使用(就像是变量一样)三要素: 函数名→体现功能参数列表 比如yf(x)→x就是参数又如yf(x,y)→x,y就是参数→参数的个数取决于需求 返回值:比如…

【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案

在使用 Spring Boot 构建多模块项目,集成 MyBatis-Plus 时,很多开发者会遇到类似如下启动报错: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl与unique_ptr的问题

PImpl与std::unique_ptr组合 pimpl(Pointer to Implementation)是C程序开发中非常常用的技巧之一,它的好处有: 节省程序编译时间保持程序/库的二进制兼容性隐藏实现细节 举例一个常见的pimpl的使用示例: // a.h class Impl; //前置声明 c…

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍:C类和对象:构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数: 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类…

CTF - PWN之ORW记录

CTF - Pwn之ORW记录https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q

RabbitMQ 中的六大工作模式介绍与使用

文章目录 简单队列(Simple Queue)模式配置类定义消费者定义发送消息测试消费 工作队列(Work Queues)模式配置类定义消费者定义发送消息测试消费负载均衡调优 发布/订阅(Publish/Subscribe)模式配置类定义消…

民宿管理系统6

普通管理员管理&#xff1a; 新增普通管理员&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…

vue3+ant design vue + Sortable实现多级表格列拖动

1、最近遇到个需求&#xff0c;需使用vue3ant design vue Sortable实现多级表格的表头允许用户拖拽移动。即当用户拖拽一级表头时&#xff0c;其对应的子级表头及数据应同步移动&#xff0c;并且只允许一级非固定表头允许拖拽。 2、代码 <a-table:data-source"rowDat…

第五十四篇 AI与数据分析

一、AI数据分析就像做菜 想象你在厨房做一道新菜&#xff0c;AI数据分析的流程其实非常相似&#xff1a; 买菜&#xff08;获取数据&#xff09; 去市场挑选新鲜蔬菜 从Excel/数据库获取数据例&#xff1a;pd.read_csv(超市销售表.csv) 洗菜切菜&#xff08;清洗数据&#x…

差分OPA verilogaA 模型

做电路设计&#xff0c;需要提前用理想模型如VerilogA模型做验证。这里分享一个由ahdlib库里单端opamp改造而来的差分opamp。参考何乐年的《模拟集成电路设计与仿真》10.4节423页&#xff1b; 描述的小信号模型如上。 VerilogA 用到了SRI/C&#xff0c;GBWgm/C,gaingm*r1等概念…

Solidity语言基础:区块链智能合约开发入门指南

一、Solidity概述 Solidity是以太坊生态系统中最重要的智能合约编程语言&#xff0c;由Gavin Wood于2014年提出。作为面向合约的高级语言&#xff0c;它结合了JavaScript、Python和C的语法特点&#xff0c;专为在以太坊虚拟机&#xff08;EVM&#xff09;上运行而设计。 核心…

开启智能Kubernetes管理新时代:kubectl-ai让操作更简单!

在如今的科技世界中,Kubernetes 已经成为容器编排领域的标杆,几乎所有现代应用的基础设施都离不开它。然而,面对复杂的集群管理和日常运维,许多开发者常常感到无所适从。今天,我们将为大家介绍一款结合了人工智能的强大工具——kubectl-ai。它不仅能帮助开发者更加顺畅地与…

2003-2020年高铁站开通时间数据

2003-2020年高铁站开通时间数据 1、时间&#xff1a;2003-2020年 2、来源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指标&#xff1a;高铁站名称、开通时间、所在省份、所在城市、所属线路名称 4、说明&#xff1a; Hsrwsnm[高铁站名…

神经网络—感知器、多层感知器

文章目录 前言一、生物神经元与感知器的类比二、感知器1、简单感知器2、多层感知器&#xff08;1&#xff09;多层感知机结构 3、神经网络结构 总结1、感知器的局限性如何突破感知器的局限性&#xff1f; 2、感知器的应用 前言 感知器&#xff08;Perceptron&#xff09;是神经…

避免数据丢失:在存储测试数据之前,要做好Redis持久化

Redis提供两种持久化方法&#xff1a; 一、RDB&#xff08;Redis DataBase&#xff09;&#xff1a; 1、周期性保存内存快照到磁盘&#xff08;生成 dump.rdb 文件&#xff09;。 2、配置save 相关参数。 我本地的配置如下&#xff1a; &#xff08;1&#xff09;配置文件re…

Oracle EBS FORM快捷键与触发器的关系与使用

Oracle EBS FORM快捷键与触发器的引用 1、快捷键作用&#xff0c;可以看文档fmrweb.res 2、文件内容&#xff1a;标识了快捷键的作用 9 : 0 : “Tab” : 1 : “Next Field” 9 : 1 : “ShiftTab” : 2 : “Previous Field” 116 : 0 : “F5” : 3 : “Clear Field” 38 : 0 :…