如何评估torch.pca_lowrank()返回的PCA质量?附精度指标计算方法
计算PCA的累积方差百分比与精度指标
一、累积方差百分比计算
PCA中,奇异值的平方和对应数据的总方差,前k个奇异值的平方和占总方差的比例就是累积方差解释率。基于torch.pca_lowrank返回的降序排列的S(奇异值),可以直接计算:
# 计算总方差(所有奇异值的平方和) total_variance = torch.sum(S ** 2) # 计算前n_components个奇异值对应的累积方差 cumulative_variance = torch.sum(S[:self.n_components] ** 2) # 转换为百分比 cumulative_variance_percent = (cumulative_variance / total_variance) * 100
如果需要查看每个主成分逐步累积的方差占比,可用torch.cumsum生成序列:
cumulative_variance_steps = torch.cumsum(S ** 2, dim=0) cumulative_percent_steps = (cumulative_variance_steps / total_variance) * 100
二、重构精度相关指标(0-100%范围)
利用重构后的矩阵approx,可以计算以下实用精度指标:
1. 重构误差占比(越低精度越高)
计算原矩阵与重构矩阵的Frobenius范数平方的比值,转换为百分比:
# 原矩阵的Frobenius范数平方 original_norm_sq = torch.norm(A, p='fro') ** 2 # 重构误差的Frobenius范数平方 error_norm_sq = torch.norm(A - approx, p='fro') ** 2 # 误差占比百分比 error_percent = (error_norm_sq / original_norm_sq) * 100
2. 重构保留精度(越高精度越高)
用100%减去误差占比,得到保留的精度百分比:
retention_accuracy_percent = 100 - error_percent
3. 均方误差百分比
以原矩阵方差为基准,计算均方误差的占比:
# 计算原矩阵的全局元素方差 original_var = torch.var(A) # 计算重构的均方误差 mse = torch.mean((A - approx) ** 2) # MSE占原方差的百分比 mse_percent = (mse / original_var) * 100
内容的提问来源于stack exchange,提问作者Serge Rogatch
相关产品推荐
相关产品推荐

