【发布时间】:2015-12-30 23:35:00
【问题描述】:
我有一个 svmlight 数据集形式的 15M+ 训练实例数据集。我使用 sklearn.datasets.load_svmlight_file() 读取了这些数据。数据本身并不稀疏,因此我不介意将其转换为任何其他密集表示(我更喜欢这样)。
在我的程序中的某个时刻,我需要将数百万个新数据记录(实例)添加到我的训练数据(随机位置)中。我使用了 vstack 并尝试转换为密集矩阵,但效率低下或未能给出正确的结果(详情如下)。有什么方法可以有效地完成这项任务吗?
我正在实现 DAgger 算法,在第一次迭代中它试图添加大约 7M 新的训练实例。我想在随机位置添加这些新实例。我尝试了 vstack(鉴于我的数据是 csr 格式,我希望它至少不会太低效)。但是24小时后它还没有完成。
在以 svmlight 格式加载数据后,我尝试将数据转换为 numpy.matrix 格式。抽样表明它可以帮助我加快速度,但有趣的是,我在转换后的数据集和原始数据集上训练得到的结果似乎彼此不匹配。 sklearn 似乎不像我想的那样与 numpy 矩阵一起工作。我在 sklearn 文档中找不到任何内容。
我认为的另一种方法是从一开始就定义一个更大的数据集,以便在内存中“保留”足够的空间,但是当我使用 sklearn 训练或测试功能时,我会将我的数据集索引到最后的“真实”记录。这样,我想,vstack 不需要在内存中开辟一个新的大空间,这会使整个操作花费更长的时间。对此有何想法?
【问题讨论】:
标签: python-2.7 numpy scipy scikit-learn