gpt4 book ai didi

r - 在 R 中对非常大的数据集进行 PCA

转载 作者:行者123 更新时间:2023-12-04 11:34:18 27 4
gpt4 key购买 nike

我在 CSV 文件中有一个非常大的训练集(~2Gb)。文件是 太大直接读入内存(read.csv() 使计算机停止),我想使用 PCA 减小数据文件的大小。问题是(据我所知)我需要将文件读入内存才能运行 PCA 算法(例如, princomp() )。

我试过 bigmemorybig.matrix 形式读取文件的包,但是 princompbig.matrix 上不起作用对象,它看起来不像 big.matrix可以转换成类似 data.frame 的东西.

有没有办法运行princomp在我丢失的大数据文件上?

我是 R 的相对新手,所以其中一些对于经验丰富的用户来说可能是显而易见的(提前道歉)。

感谢您提供任何信息。

最佳答案

我解决它的方法是迭代计算样本协方差矩阵。通过这种方式,您只需要任何时间点的数据子集。可以使用 readLines 仅读取数据的一个子集。您可以在其中打开与文件的连接并迭代读取。该算法看起来像(它是一个两步算法):

计算每列的平均值(假设是变量)

  • 打开文件连接 ( con = open(...) )
  • 读取 1000 行 ( readLines(con, n = 1000) )
  • 计算每列的平方和
  • 将这些平方和添加到变量 ( sos_column = sos_column + new_sos )
  • 重复 2-4 直到文件结束。
  • 除以行数减 1 得到平均值。

  • 计算协方差矩阵:
  • 打开文件连接 ( con = open(...) )
  • 读取 1000 行 ( readLines(con, n = 1000) )
  • 使用 crossprod 计算所有叉积
  • 将这些交叉积保存在变量
  • 重复 2-4 直到文件结束。
  • 除以行数减 1 得到协方差。

  • 当你有协方差矩阵时,只需调用 princompcovmat = your_covmatprincomp将跳过自己计算协方差矩阵。

    通过这种方式,您可以处理的数据集比可用的 RAM 大得多。在迭代过程中,内存使用量大致是块占用的内存(例如 1000 行),之后内存使用量仅限于协方差矩阵(nvar * nvar doubles)。

    关于r - 在 R 中对非常大的数据集进行 PCA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670972/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com