奇异值分解指定保持能量的降维方法

2024-05-12 20:38:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用SVD来减少一些数据集的维数。但是,当前的sklearn接口只允许我指定要减少到的组件数量(通过n_components参数)。在

这感觉像是“硬编码”,因为有些数据集的维要比其他数据集大得多,而且没有正确的组件数量来确定先验的eem>。指定要从原始矩阵(或者更具体地说,在本例中是dataset)保留的能量量是一个更好的选择(我能抓到的最快的“reference”在this book,在chapter 11(更具体地说,本PDF的第20页,在“我们应该保留多少个单数值?”盒子)。在

在scikit learn中,我有什么方法可以使用SVD做到这一点?

我已经尝试过修改源代码以允许这样做,但是当前代码会执行一个“优化步骤”,这取决于传递给代码的组件的数量。如果我不传递组件的数量(即保留默认数量),那么只有12个组件将被分解(能量计算将只使用这12个组件)。为了进行基于能量的计算,我必须将n_components设置为每个数据集的特征总数(安全方面),这对于一些较大的数据集来说是非常缓慢的。在

有什么办法解决这个问题吗?在


Tags: 数据代码编码参数数量components组件矩阵
1条回答
网友
1楼 · 发布于 2024-05-12 20:38:50

正如您所看到的from the documentation,您可以使用解释的方差比(我认为这是您正在寻找的)或使用“mle”估计。在

但是,PCA类将始终计算完整的SVD,因此不会得到加速。您可以使用RandomizedPCA,但这不允许根据解释的方差比率选择组件的数量。无论如何,您应该尝试一下,因为对于大型数据集,它可能比PCA快得多,即使您计算所有组件(假设n_features不是很大)。在

相关问题 更多 >