【问题标题】:sklearn Incremental Pca large datasetsklearn 增量 Pca 大数据集
【发布时间】:2018-09-11 13:35:34
【问题描述】:

我有一个大小为 42.9 GB 的大型数据集,它们以 numpy 的压缩 npz 格式存储。加载时的数据有

n_samples, n_features = 406762, 26421

我需要对此进行降维,因此需要使用 sklearn 的 PCA 方法。通常,我执行

from sklearn.decomposition import IncrementalPCA, PCA

pca = PCA(n_components=200).fit(x)
x_transformed = pca.transform(x)

由于无法将数据加载到内存中,因此我使用增量 PCA,因为它通过提供 partial_fit 方法具有核外支持。

from sklearn.decomposition import IncrementalPCA, PCA

ipca = IncrementalPCA(n_components=200)

for x in xrange(407):
    partial_x = load("...")
    ipca.partial_fit(partial_x)

现在,一旦模型适合完整的数据,我该如何执行转换?由于 transform 需要整个数据并且没有给出 partial_transform 方法。

编辑:#1

一旦计算了数据的降维表示,这就是我验证重构误差的方式。

from sklearn.metrics import mean_squared_error

reconstructed_matrix = pca_model.inverse_transform(reduced_x)
error_curr = mean_square_error(reconstructed_x, x)

如何计算大型数据集的误差? 另外,有没有办法可以使用 partial_fit 作为 GridSearch 或 RandomizedSearch 的一部分来找到最好的 n_components?

【问题讨论】:

  • Transform 将转换任何传递的内容。您可以一次传递一个样本的数据。无需一次呈现全部数据

标签: scikit-learn pca


【解决方案1】:

您可以按照适合模型的方式进行操作。转换函数不必一次应用于整个数据。

x_transform = np.ndarray(shape=(0, 200))
for x in xrange(407):
    partial_x = load("...")
    partial_x_transform = ipca.transform(partial_x)
    x_transform = np.vstack((x_transform, partial_x_transform))

要计算重构的均方误差,可以使用如下代码:

from sklearn.metrics import mean_squared_error

sum = 0
for i in xrange(407):
    # with a custom get_segment function
    partial_x_reduced = get_segment(x_reduced, i)
    reconstructed_matrix = pca_model.inverse_transform(partial_reduced_x)
    residual = mean_square_error(reconstructed_x, get_segment(x, i))
    sum += residual * len(partial_x_reduced)

mse = sum / len(x_reduced)

对于参数调整,您可以将组件数设置为您想要的最大值,转换您的输入,然后在您的网格搜索中,仅使用第一个 k 列,k 作为您的超参数.每次更改 k 时,您不必重新计算整个 PCA。

【讨论】:

  • 那行得通。现在,要计算重建误差,我需要执行 inverse_transform 方法。 inverse_transform 是否也以同样的方式工作?我已根据此评论编辑了问题。
猜你喜欢
  • 2015-10-04
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 2020-12-22
  • 2021-03-24
  • 2013-12-25
  • 2015-05-19
相关资源
最近更新 更多