【2025五一数学建模竞赛B题】 矿山数据处理问题|建模过程+完整代码论文全解全析
你是否在寻找数学建模比赛的突破点?数学建模进阶思路!
作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析,帮助你全面理解并掌握如何解决类似问题。
详见文末
部分可视化(做了模糊处理,正文里的比这个更细致)
第一个问题是:根据附件1中的数据A和B,建立数学模型,对数据A进行某种变换,使得变换后的结果与数据B尽可能接近。计算变换后的结果与数据B的误差,并分析误差的来源(如数据噪声、模型偏差等)对结果的影响。
1. 理解问题
首先,我们需要理解问题的本质:
- 给定:附件1中的数据A和数据B。
- 目标:对数据A进行某种变换,使得变换后的结果尽可能接近数据B。
- 输出:
- 变换后的结果。
- 变换后的结果与数据B的误差。
- 误差来源分析,如数据噪声、模型偏差等。
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′=k⋅A+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=1∑n(Bi′−Bi)2=i=1∑n(k⋅Ai+c−Bi)2
对 $ k $ 和 $ c $ 求偏导,并令偏导数为0,可以解出 $ k $ 和 $ c $。
3.3 求解过程
-
定义误差平方和函数:
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=1∑n(k⋅Ai+c−Bi)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 ∂k∂S=2i=1∑n(k⋅Ai+c−Bi)⋅Ai=0 -
对 $ 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 ∂c∂S=2i=1∑n(k⋅Ai+c−Bi)=0 -
整理得到方程组:
{ 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} {k∑i=1nAi2+c∑i=1nAi=∑i=1nAiBik∑i=1nAi+c⋅n=∑i=1nBi -
解这个方程组即可得到 $ 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=1∑n(Bi′−Bi)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=1∑n∣Bi′−Bi∣
- 相关系数(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(Bi′−B′ˉ)2∑i=1n(Bi−Bˉ)2∑i=1n(Bi′−B′ˉ)(Bi−Bˉ)
5. 误差来源分析
- 数据噪声:原始数据A和B中可能包含噪声,这些噪声会影响到 $ k $ 和 $ c $ 的求解,从而导致变换后的结果与数据B之间存在误差。
- 模型偏差:假设数据A和数据B之间的关系是线性的,但实际关系可能是非线性的。这种情况下,线性模型无法完全捕捉到两者之间的关系,从而产生误差。
- 采样偏差:数据A和B的采样可能不均匀,或者存在异常值,这也会影响到模型的求解和误差的大小。
6. 模型扩展
如果线性模型无法很好地拟合数据A和数据B之间的关系,可以考虑更复杂的模型
问题1的详细LaTeX数学公式
1. 问题描述
给定数据集 A ∈ R n × m A \in \mathbb{R}^{n \times m} A∈Rn×m 和 B ∈ R n × m B \in \mathbb{R}^{n \times m} B∈Rn×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} W∈Rm×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 Wmin∥AW−B∥F2
其中 ∥ ⋅ ∥ 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=∥E∥F
5. 误差来源分析
- 数据噪声:原始数据 A A A 和 B B B 可能包含噪声,影响 W W W 的估计。
- 模型偏差:假设线性变换可能不足以完全描述 A A A 和 B B B 之间的关系。
- 过拟合/欠拟合:模型的复杂度可能不合适,导致对噪声过度敏感或无法捕捉真实关系。
- 数值误差:计算过程中可能引入数值不稳定性。
6. 误差影响
- 数据噪声:可能导致 W W W 的估计偏差,增加误差。
- 模型偏差:如果 A A A 和 B B B 之间的关系是非线性的,线性模型无法准确描述,误差会较大。
- 过拟合/欠拟合:过拟合时模型对噪声敏感,欠拟合时无法捕捉真实关系,均可能导致误差增加。
- 数值误差:计算 W W W 时的舍入误差或矩阵条件数过大会影响结果精度。
7. 公式
-
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} ∥E∥F=i=1∑nj=1∑m∣eij∣2 -
最小二乘解:
W = ( A T A ) − 1 A T B W = (A^T A)^{-1} A^T B W=(ATA)−1ATB -
误差矩阵:
E = A W − B E = A W - B E=AW−B
注意
- 以上假设了线性变换,实际问题中可能需要更复杂的变换。
- 如果数据维度较高,可能需要考虑正则化或降维技术。
- 实际计算中要注意矩阵 ( A T A ) (A^T A) (ATA) 的可逆性。
问题1分析
首先,我们需要理解问题1的要求:
- 数据理解:我们有数据A和B,其中A是一个多维数组(具体是几维需要看数据),B也是一个多维数组。我们的目标是对A进行某种变换,使其尽可能接近B。
- 变换要求:这个变换可以是线性的(例如,矩阵乘法、缩放、旋转等),也可以是非线性的(例如,多项式变换、指数变换等)。
- 误差计算:变换后,我们需要计算A变换后的结果与B之间的误差。
- 误差分析:我们需要分析误差的来源,例如数据噪声、模型偏差等。
由于没有具体的数据文件,我们假设数据A和B都是二维数组(矩阵),并且它们的形状相同。我们可以尝试几种常见的变换方法:
- 线性变换:假设A可以通过一个矩阵乘法加上一个偏置项来近似B,即
B ≈ A * W + b
。 - 非线性变换:可以使用多项式回归或其他非线性方法。
由于问题中没有明确说明数据的具体形式,我们将采用最简单的线性变换方法,即最小二乘法来找到最佳的 W
和 b
。
解决方案
- 线性变换模型:假设
B = A * W + b
,其中W
是权重矩阵,b
是偏置项。 - 参数估计:使用最小二乘法来估计
W
和b
。 - 误差计算:使用均方误差(MSE)或其他指标来计算变换后的A与B之间的误差。
- 误差分析:分析误差的来源,例如数据噪声(数据本身的随机性)、模型偏差(线性模型的局限性)等。
实现步骤
- 加载数据A和B。
- 假设A和B的形状都是
(m, n)
,则W
的形状应该是(n, n)
,b
的形状应该是(m, n)
。但是通常在实际建模中,我们会将这个问题简化为多个独立的线性回归问题,即对B的每一列进行建模。 - 对于B的每一列
B[:, i]
,我们可以使用A的所有列来预测它,即B[:, i] ≈ A * W[:, i] + b[i]
。这样,我们可以为B的每一列拟合一个线性模型。 - 将所有列的模型组合起来,得到完整的变换模型。
- 计算变换后的A与B之间的误差。
- 分析误差。
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. 模型偏差:我们使用的是线性模型,如果真实关系是非线性的,则模型无法捕捉这种关系。
# 在实际应用中,还需要考虑其他因素,比如数据采集的误差、模型的假设是否合理等。
注意事项
- 上述代码假设A和B是二维数组,且形状相同。在实际问题中,需要根据数据的具体情况调整代码。
- 如果A和B的维度不同,可能需要更复杂的变换方法。
- 线性模型可能不是最优的,如果数据之间存在非线性关系,可以考虑使用多项式回归、支持向量回归等方法。
- 误差分析部分需要根据具体数据和应用背景进行更深入的分析。
问题2
问题2. 请分析附件2中给出的一组矿山监测数据,建立数据压缩模型,对附件2中的数据进行降维处理,计算压缩效率(包括但不限于压缩比、存储空间节省率等)。进一步建立数据还原模型,将降维后的数据进行还原,分析降维和还原对数据质量的影响,提供还原数据的准确度(MSE不高于0.005)和误差分析。(要求在保证还原数据的准确度的前提下,尽可能地提高压缩效率)
问题2的具体要求:
- 对附件2中的矿山监测数据进行降维处理;
- 建立数据压缩模型,并计算压缩效率(如压缩比、存储空间节省率等);
- 建立数据还原模型,将降维后的数据还原,并分析降维和还原对数据质量的影响;
- 提供还原数据的准确度(MSE不高于0.005)和误差分析;
- 在保证还原数据的准确度的前提下,尽可能地提高压缩效率。
问题分析
- 数据压缩模型:可以选择主成分分析(PCA)或其他降维方法,以减少数据的维度。
- 压缩效率:压缩效率可以通过计算压缩比和存储空间节省率来衡量。压缩比是原始数据大小与压缩后数据大小的比值。存储空间节省率是指压缩后节省的存储空间占原始存储空间的比例。
- 数据还原模型:需要设计一个方法,将降维后的数据尽可能还原到原始数据空间。可以使用PCA的逆变换或其他重建方法。
- 数据质量评估:使用均方误差(MSE)来衡量还原数据与原始数据的差异,确保MSE不高于0.005。
- 误差分析:分析降维和重建过程中误差的来源和影响,确保模型的有效性。
- 提高压缩效率:在满足MSE要求的前提下,尽可能减少降维后的数据维度,提高压缩效率。
步骤1:数据压缩(降维)
-
选择降维方法:主成分分析(PCA)是一种经典且广泛应用的降维方法,它通过线性变换将原始数据变换到新坐标系中,使得第一个新坐标轴(第一主成分)的方差最大,第二个新坐标轴(第二主成分)的方差次之,以此类推。PCA可以有效降低数据的维度并保留主要信息。
-
实施PCA:
- 对数据进行标准化(均值为0,方差为1)。
- 计算数据的协方差矩阵。
- 计算协方差矩阵的特征值和特征向量。
- 选择前k个特征向量(主成分),将原始数据投影到这k个主成分上,得到降维后的数据。
-
确定主成分数量k:
- 可以通过累计方差贡献率来确定k,通常选择使累计方差贡献率达到较高值(如95%)的k。
- 或者通过迭代,逐步增加k,直到MSE满足要求(不高于0.005)为止,同时尽量减小k以提高压缩效率。
步骤2:数据还原
-
数据还原:使用PCA的逆变换将降维后的数据还原到原始数据空间。
- 将降维后的数据与相应主成分的转置相乘,得到还原后的数据。
- 注意:由于PCA降维过程中会丢失一些信息,因此还原后的数据与原始数据会有差异。
-
计算MSE:计算还原数据与原始数据之间的均方误差(MSE),确保MSE不高于0.005。
步骤3:计算压缩效率
-
压缩比:原始数据大小与压缩后数据大小的比值。假设原始数据有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。 -
存储空间节省率:
存储空间节省率 = 原始数据大小 − 压缩后数据大小 原始数据大小 × 100 % \text{存储空间节省率} = \frac{\text{原始数据大小} - \text{压缩后数据大小}}{\text{原始数据大小}} \times 100\% 存储空间节省率=原始数据大小原始数据大小−压缩后数据大小×100%
其中,压缩后数据大小包括降维后的数据大小和主成分的大小。
步骤4:误差分析与模型评估
- 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} Σ=n1ZTZ∈Rm×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λi∑i=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=ZVk∈Rn×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^=ZkVkT∈Rn×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=1∑nj=1∑m(Xij−X^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%=(1−nmk(n+m))×100%
4. 误差分析与模型评估
分析降维和还原过程中的误差来源,包括:
- 主成分数量选择导致的方差损失
问题2的详细数学公式
1. 数据标准化(Standardization)
在进行PCA之前,通常需要对数据进行标准化处理,使每个特征均值为0,方差为1。设原始数据矩阵为 X ∈ R n × m X \in \mathbb{R}^{n \times m} X∈Rn×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} C∈Rm×m 为:
C = 1 n − 1 X std T X std C = \frac{1}{n - 1} X_{\text{std}}^T X_{\text{std}} C=n−11XstdTXstd
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} V∈Rm×m 是特征向量矩阵,每一列是一个特征向量。
4. 选择主成分(Principal Components Selection)
将特征值从大到小排序,选择前 k k k 个最大的特征值对应的特征向量,构成投影矩阵 W ∈ R m × k W \in \mathbb{R}^{m \times k} W∈Rm×k。降维后的数据 Z ∈ R n × k Z \in \mathbb{R}^{n \times k} Z∈Rn×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^std∈Rn×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=1∑nj=1∑m(Xij−X^ij)2
7. 压缩比(Compression Ratio)
假设原始数据 X ∈ R n × m X \in \mathbb{R}^{n \times m} X∈Rn×m 的大小为 n × m n \times m n×m,降维后数据 Z ∈ R n × k Z \in \mathbb{R}^{n \times k} Z∈Rn×k 的大小为 n × k n \times k n×k,投影矩阵 W ∈ R m × k W \in \mathbb{R}^{m \times k} W∈Rm×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的解题步骤
- 数据预处理:对附件2中的数据进行标准化处理。
- PCA降维:计算标准化后数据的协方差矩阵,进行特征值分解,选择合适的主成分数量 k k k,使得还原后的数据的MSE不高于0.005。
- 数据还原:将降维后的数据还原,并计算MSE。
- 计算压缩效率:计算压缩比和存储空间节省率。
- 误差分析:分析降维和还原对数据质量的影响。
注意事项
- 在选择主成分数量 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}')
解释
- 数据读取与标准化:首先读取附件2中的数据,并进行标准化处理,使得每个特征的均值为0,方差为1。标准化是PCA的必要步骤,因为PCA对特征的尺度敏感。
- PCA降维:使用
sklearn.decomposition.PCA
进行降维。在这里,我们假设主成分数量k=2
,但实际应用中需要根据累计方差贡献率或MSE要求来选择合适的k
值。 - 数据还原:通过
inverse_transform
方法将降维后的数据还原到原始特征空间,然后再将标准化后的数据还原到原始尺度。 - MSE计算:计算还原数据与原始数据之间的均方误差(MSE)。
- 压缩效率计算:计算压缩比和存储空间节省率。假设原始数据大小为
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
值。 - 存储空间节省率和压缩比只是理论上的计算,实际存储时还需要考虑数据的存储格式和精度等因素。
小天会给大家带来所有题目完整思路+完整代码+完整论文全解全析
其中更详细的思路、各题目思路、代码、成品论文等,可以点击下方名片: