2011-04-06 44 views
0

我有一个由数百万个示例组成的数据集,其中每个示例都包含128个以名称分类的连续值特征。我试图找到一个强大的数据库/索引来用作高维数据的KNN分类器。我试过Weka's IBk classifier,但它扼杀了这么多的数据,即使这样它也必须加载到内存中。 Lucene,特别是通过PyLucene接口,会是一个可能的选择吗?使用PyLucene作为K-NN分类器

我发现Lire,它似乎以类似的方式使用Lucene,但在审查代码后,我不确定它们是如何拉断它,或者如果它是我试图的相同的东西做。

我意识到Lucene是作为文本索引工具而设计的,而不是作为通用分类器,但可以以这种方式使用吗?

+1

要处理“数以百万计的例子”,你应该采取看看apache mahout - 分布式机器学习框架 - 它似乎有kNN:https://issues.apache.org/jira/browse/MAHOUT-115。 – Skarab 2011-04-06 21:28:04

+0

我找不到Mahout的KNN的任何文档,除了在Taste组件中对其进行简要引用外,它明确指出它仅支持布尔特性。 Mahout不能用作通用KNN。 – Cerin 2011-04-07 00:03:07

回答

1

根据您告诉我们的信息,Lucene似乎不是正确的选择。 Lucene会为您提供一种存储数据的方式,但就检索而言,它并不是用于执行任何操作,而是对文本字符串进行搜索。由于K-NN非常简单,所以最好在典型的RDBMS或类似Berkeley DB中创建自己的数据存储。您可以创建基于各种尺寸的子超立方体的按键/标记以加快速度 - 从要分类的物品的桶开始并向外移动...

+0

我还没有看到任何关于KNN分类的RDBM支持,除了GIS标准之外,大多数只有昂贵的专有系统才支持。我不确定你的意思是用“hypercubes”创建键/标记。你能否引用一些资料来源? – Cerin 2011-04-06 19:34:50

+0

如果您使用RDBMS,则必须自行推出。如果你有一个大的数据集,你可以在BDB或RDMNS中存储所有对,然后在每个维度上对它们进行索引。对于两个维度来说,这将像在参数的空间上绘制网格一样。然后,您会查找单元格和相邻单元格以查找最近的项目。没有消息来源,只是一个想法。 – dfb 2011-04-06 21:10:06

0

这在Lucene中已经用geospatial searches完成。当然,built-in地理空间搜索只使用两个维度,所以您必须修改一下。但使用数字范围查询的基本思想是可行的。

(注意:我不知道任何人做高维k近邻使用Lucene,所以我不能在这将是多么快评)