我想用SVD来减少一些数据集的维数。但是,当前的sklearn接口只允许我指定要减少到的组件数量(通过n_components
参数)。在
这感觉像是“硬编码”,因为有些数据集的维要比其他数据集大得多,而且没有正确的组件数量来确定先验的eem>。指定要从原始矩阵(或者更具体地说,在本例中是dataset)保留的能量量是一个更好的选择(我能抓到的最快的“reference”在this book,在chapter 11(更具体地说,本PDF的第20页,在“我们应该保留多少个单数值?”盒子)。在
在scikit learn中,我有什么方法可以使用SVD做到这一点?
我已经尝试过修改源代码以允许这样做,但是当前代码会执行一个“优化步骤”,这取决于传递给代码的组件的数量。如果我不传递组件的数量(即保留默认数量),那么只有12个组件将被分解(能量计算将只使用这12个组件)。为了进行基于能量的计算,我必须将n_components
设置为每个数据集的特征总数(安全方面),这对于一些较大的数据集来说是非常缓慢的。在
有什么办法解决这个问题吗?在
正如您所看到的from the documentation,您可以使用解释的方差比(我认为这是您正在寻找的)或使用“mle”估计。在
但是,
PCA
类将始终计算完整的SVD,因此不会得到加速。您可以使用RandomizedPCA
,但这不允许根据解释的方差比率选择组件的数量。无论如何,您应该尝试一下,因为对于大型数据集,它可能比PCA
快得多,即使您计算所有组件(假设n_features
不是很大)。在相关问题 更多 >
编程相关推荐