【问题标题】:Sklearn: How to apply dimensionality reduction on huge data set?Sklearn:如何在庞大的数据集上应用降维?
【发布时间】:2016-04-19 10:17:54
【问题描述】:

问题:在对 800 万个特征应用 PCA 时出现 OutOfMemory 错误。

这是我的代码片段:-

from sklearn.decomposition import PCA as sklearnPCA
sklearn_pca = sklearnPCA(n_components=10000)
pca_tfidf_sklearn = sklearn_pca.fit(traindata_tfidf.toarray())

我想将 PCA / 降维技术应用于文本提取的特征(使用 tf-idf)。目前我有大约 800 万个这样的功能,我想减少这些功能并对我正在使用 MultiNomialNB 的文档进行分类。

由于 OutOfMemory 错误,我被卡住了。

【问题讨论】:

    标签: python python-2.7 python-3.x scikit-learn pca


    【解决方案1】:

    我也遇到过类似的问题。使用受限玻尔兹曼机 (RBM) 而不是 PCA 解决了这个问题。从数学上讲,这是因为 PCA 只查看特征矩阵的特征值和特征向量,而 RBM 作为神经网络来考虑数据中特征的所有乘法可能性。因此,在决定哪些特征更重要时,RBM ​​需要考虑的范围要大得多。然后,它将特征的数量减少到比 PCA 更重要的特征更小的尺寸。但是,请务必在将 RBM 应用于数据之前对数据进行特征缩放和规范化。

    【讨论】:

      【解决方案2】:

      我想,traindata_tfidf 实际上是稀疏形式。尝试使用scipy sparse 格式之一而不是数组。另请查看SparsePCA 方法,如果没有帮助,请使用MiniBatchSparsePCA

      【讨论】:

      • 感谢您的建议,我正在执行您的建议。此外,800 万个特征中的 10000 个还可以吗?
      • 一如既往,视情况而定。有几种确定最佳 PC 数量的技术。就个人而言,我会从 50 这样的小数字开始,然后根据整体模型性能决定是否增加它。
      • 我尝试使用 sparcepca
        from sklearn.decomposition import SparsePCA, MiniBatchSparsePCA spca = SparsePCA(n_components=100, random_state=42) newtfidf = spca.fit_transform(X_train_tfidf.todense()) OutOfMemory 错误...有什么问题吗? Ram 120GB 和 24GB 的可用内存仍然......
      • 可能你不应该打电话给todense()X_train_tfidf 的类型是什么?还要检查RandomizedPCA,稀疏格式可能会更好。
      • PCA 为 O(n^3)(需要 SVD 分解)我认为它不是 8e6 功能的正确工具。
      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多