【发布时间】:2017-03-30 18:58:20
【问题描述】:
我有一个关于我在做 PCA 时没有预料到的结果的问题。
我已经使用参考数据成功计算了主成分,然后作为检查以确保正在发生的事情是我认为正在发生的事情,我将参考数据投影到其特征函数的整个基础上(保留所有组件)然后转换回来,(这是在 python 中,所以它是 pca.fit(ref_data) 后跟 ref_data_transform =pca.transform.(ref_data) 后跟 pca.inverse_transform(ref_data_transform) 我得到完全相同的数据。这不是一个惊喜。
同样不足为奇的是,随着我选择的主成分越来越少,原始数据与已投影到较小基础上然后再投影回来的数据之间的点对点差异会增加。也就是说,如果您绘制原始数据和“过滤”数据,它看起来会有所不同,随着您减少要投影的子空间的大小,差异会增加。我可以在一个向量中捕获每个数据点之间的差异,例如,difference_vec。
令我感到惊讶的是(至少对我而言)是,当我对任何一列 difference_vec 求和时,它总是等于零。也就是说,当我投影到越来越小的子空间时,任何原始数据点与被一些主成分过滤的相应数据点之间的实际差异会变大,但总误差始终为零。
如果我在这里犯了一些错误,我非常感谢我的任何见解,如果没有,为什么这个以前的“投影引发的错误”指标不起作用。
谢谢。
【问题讨论】:
-
非常巧妙的问题,我不确定为什么
sum(ref_data - inv_data)的结果为零——可能是 math.stackexchange.com 的问题。在比较这样的矩阵时,我使用矩阵范数,即numpy.linalg.norm(它将选择 Frobenius 范数)。在这种情况下,norm(ref_data - inv_data)肯定不会为零。但为什么sum为零仍然是一个有趣的问题。
标签: linear-algebra pca