Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 将培训实例插入scikit学习数据集_Python 2.7_Numpy_Scipy_Scikit Learn - Fatal编程技术网

Python 2.7 将培训实例插入scikit学习数据集

Python 2.7 将培训实例插入scikit学习数据集,python-2.7,numpy,scipy,scikit-learn,Python 2.7,Numpy,Scipy,Scikit Learn,我有一个数据集,以svmlight数据集的形式包含15个以上的培训实例。我使用sklearn.datasets.load_svmlight_file()读取这些数据。数据本身不是稀疏的,所以我不介意将其转换为任何其他密集表示(我更喜欢) 在我的程序中的某个时刻,我需要将数百万条新数据记录(实例)添加到我的训练数据中(在随机位置)。我使用了vstack并尝试转换为密集矩阵,但要么效率低下,要么无法给出正确的结果(详情如下)。有没有办法有效地完成这项任务 我正在实现DAgger算法,在第一次迭代中,

我有一个数据集,以svmlight数据集的形式包含15个以上的培训实例。我使用sklearn.datasets.load_svmlight_file()读取这些数据。数据本身不是稀疏的,所以我不介意将其转换为任何其他密集表示(我更喜欢)

在我的程序中的某个时刻,我需要将数百万条新数据记录(实例)添加到我的训练数据中(在随机位置)。我使用了vstack并尝试转换为密集矩阵,但要么效率低下,要么无法给出正确的结果(详情如下)。有没有办法有效地完成这项任务

我正在实现DAgger算法,在第一次迭代中,它试图添加大约700万个新的训练实例。我想在随机位置添加这些新实例。我尝试了vstack(鉴于我的数据是csr格式的,我希望它至少不会太低效)。然而,24小时后,它还没有完成

在以svmlight格式加载数据之后,我尝试将数据转换为numpy.matrix格式。一个样本显示它可以帮助我加快速度,但有趣的是,我从转换数据集和原始数据集的训练中得到的结果似乎不匹配。看来sklearn不像我想象的那样与numpy矩阵一起工作。我在sklearn文档中找不到任何内容


我认为的另一种方法是从一开始就定义一个更大的数据集,以便在内存中“保留”足够的空间,但当我使用sklearn train或test features时,我会将数据集索引到最后一个“true”记录。通过这种方式,我认为vstack不需要在内存中打开一个新的大空间,这会使整个操作花费更长的时间。对此有何想法?

首先:我猜测稀疏数据给出的答案与转换为密集数据的相同数据给出的答案不同的原因是,我对稀疏数据的表示是从一开始的特征索引,而不是从零开始的(因为我以前使用的oll库要求这样)。所以我的第一列都是零,当转换为稠密时,它没有被保留,这就是为什么使用稠密表示时会得到更好的结果

第二:在该比例下向稀疏矩阵添加新行是没有效率的。即使您在开始时保留了一个较大的矩阵(带有填充的零)以供以后替换,也不行。这可能是因为稀疏矩阵存储在中的结构(在crs的情况下,它使用三个数组,一个用于行数,一个用于行中的非零列索引,一个用于值本身;请查看文档)


解决方案:我发现最好的方法是从一开始就使用密集表示(当然,如果这是一个选项的话)。收集需要添加到培训集中的所有实例。实例化一个新矩阵,使其达到聚合数据的大小,然后开始“随机”添加上一个训练集中的实例,以及要添加的新实例。为了使其随机,我生成了一个随机位置的排序列表,告诉我什么时候应该从新实例中添加数据,否则就从旧实例中复制数据。

首先:我猜稀疏数据给出的答案与转换为密集数据的同一数据给出的答案不同,我的稀疏表示是从一开始而不是从零开始的特征索引(因为我以前使用的oll库需要这样做)。所以我的第一列都是零,当转换为稠密时,它没有被保留,这就是为什么使用稠密表示时会得到更好的结果

第二:在该比例下向稀疏矩阵添加新行是没有效率的。即使您在开始时保留了一个较大的矩阵(带有填充的零)以供以后替换,也不行。这可能是因为稀疏矩阵存储在中的结构(在crs的情况下,它使用三个数组,一个用于行数,一个用于行中的非零列索引,一个用于值本身;请查看文档)

解决方案:我发现最好的方法是从一开始就使用密集表示(当然,如果这是一个选项的话)。收集需要添加到培训集中的所有实例。实例化一个新矩阵,使其达到聚合数据的大小,然后开始“随机”添加上一个训练集中的实例,以及要添加的新实例。为了使其随机,我生成了一个随机位置的排序列表,告诉我什么时候应该从新实例添加数据,否则就从旧实例复制数据