在类knn算法中,我们需要将模型数据加载到缓存中以预测记录。
这是knn的例子。
因此,如果模型是一个大文件(比如1或2GB),我们就可以将它们加载到分布式缓存中。例子:
为了预测1个目标,我们需要找到模型结果中单个记录与所有记录之间的距离,并找到最小距离。所以我们需要得到我们手中的模型结果。如果是大文件,则不能将其加载到分布式缓存中以查找距离。
一种方法是将模型结果分割成若干个文件,对该文件中的所有记录进行距离计算,求出类标签的最小偏差和最大发生率,并对结果进行预测。
如何分割文件并在这些分区上执行操作?
ie 1 record <Distance> file1,file2,....filen
2nd record <Distance> file1,file2,...filen
我就是这么想的。
还有别的办法吗。
任何指点都能帮我。
1条答案
按热度按时间sy5wg1nm1#
我认为数据的划分方式主要取决于数据本身。
因为您有一个包含一堆行的模型,并且您希望找到与输入数据接近的k行,所以简单的解决方案是逐个比较它们。这可能会很慢,因为要经历数百万次1-2gb的数据(我假设您有大量要分类的记录,否则不需要hadoop)。
这就是为什么需要有效地修剪模型(分区),以便只比较最有可能最接近的那些行。这是一个很难解决的问题,需要对操作的数据有一定的了解。
您可以使用的其他技巧包括:
对输入数据进行预排序,以便将来自同一分区的输入项进行比较。同样取决于你操作的数据。
使用随机访问索引文件(如hadoop的map文件)更快地找到数据并进行缓存。
最终,您的模型可能更容易存储在lucene索引中,因此您可以通过查找索引来实现分区的效果。对数据进行预排序仍然很有用。