Tag: 机器学习

使用O(1)中的前缀树查找单个最近邻居?

我正在读一篇论文,他们提到他们能够使用前缀树在O(1)中找到单个最近邻居。 我将描述一般问题,然后是经典解决方案,最后是论文中提出的解决方案: 问题 :给定一个位向量列表L(所有向量具有相同的长度)和查询位向量q,我们希望找到q的最近邻居。 距离度量是汉明距离(多少位不同)。 天真的方法是通过列表并计算列表中每个向量和q之间的汉明距离,这将取O(N)。 然而,鉴于我们将拥有数以百万计的非常昂贵的位向量,因此我们希望减少这一点。 经典解决方案 :这个问题的经典解决方案是使用近似来找到最近邻居,从而实现O(logN)。 这样做的方法是首先按字典顺序对L进行排序,以使相似的位向量彼此接近。 然后给定q,我们在排序列表上应用二进制搜索以获得q在排序列表中的位置,并获取列表上方和下方的向量(因为它们类似于排序)并计算他们之间的距离,选择最短的汉明距离。 然而,仅仅进行一次排序我们仍然会遗漏许多类似的向量,因此为了覆盖尽可能多的相似向量,我们使用P个列表和P个jumbling函数。 每个jumbling函数对应于每个列表。 然后我们将每个位向量插入到P中的每个列表中,然后用相应的jumbling函数对其进行混音。 因此,我们最终得到P列表,每个列表都有位向量,但位数不同。 我们再次按字典顺序对P中的每个列表进行排序。 现在给出q,我们对P中的每个列表应用相同的二进制搜索,但是在这里我们在根据我们访问的列表将jumbling函数应用于q之前。 在这一步中,我们得到P个最相似的向量到q,所以我们最终得到一个与q最相似的向量。 这样我们就可以覆盖尽可能多的相似向量。 通过忽略排序所需的时间,定位最近邻居所需的时间是O(log n),这是在每个列表上进行二进制搜索的时间。 建议的解决方案 :文中提出的这个解决方案(但没有任何解释)说我们可以使用前缀树在O(1)时间内获得最近邻居。 在论文中,他们说他们使用P个前缀树和P个jumbling函数,其中每个jumbling函数对应于每个树。 然后,在用相应的混音函数对每个向量的位进行混音后,它们将位向量插入到每个树中。 给定q,我们将跳跃函数应用于对应于每个树的q,并且我们从每个树中检索q最相似的向量。 现在我们最终得到从树中检索到的P位向量。 在论文中,他们说只是从前缀树获得最相似的q向量是O(1)。 我根本不理解这一点,因为我知道搜索前缀树是O(M),其中M是位向量的长度。 有人理解为什么是O(1)? 这是我所指的论文(第3.3.2节):实时网络上基于内容的人群检索 http://students.cse.tamu.edu/kykamath/papers/cikm2012/fp105-kamath.pdf 我还希望你能回答我与此相关的另一个问题: 如何在NN搜索的前缀树中查找最相似的位向量?

管道中的Spark MLLib 2.0分类function

我正在尝试基于日志文件构建决策树。 某些function集很大,包含数千个唯一值。 我正在尝试在Java中使用管道和数据框架的新习惯用法。 我为每个分类function列构建了一个包含多个StringIndexer管道阶段的管道。 然后我使用VectorAssembler创建一个特征向量。 在VectorAssembler阶段之后,结果dataframe对我来说是完美的。 我的管道看起来很像 StringIndexer-> StringIndexer-> StringIndexer-> VectorAssembler-> DecisionTreeClassifier 但是我收到以下错误: DecisionTree要求maxBins(= 32)至少与每个分类要素中的值的数量一样大,但是分类要素5具有49个值。 考虑使用大量值删除此和其他分类function,或添加更多培训示例。 我可以通过使用规范化器解决此问题,但随后生成的决策树无法满足我的需求,因为我需要生成具有原始特征值的DSL决策树。 我无法手动设置maxBins,因为整个管道一起执行。 我希望结果决策树具有StringIndexer生成的值(例如,Feature 5 <= 132)。 此外,但不太重要,我希望能够为功能指定我自己的名称(例如,而不是'功能5',说'域')

在Weka中使用StringToWordVector和内部数据结构

我正在尝试使用Weka获取文档聚类。 这个过程是一个更大的管道的一部分,我真的不能写出arff文件。 我将每个文档中的所有文档和单词包都作为Map<String, Multiset>结构,其中键是文档名称, Multiset值是文档中单词的包 。 我有两个问题,真的: (1)目前的方法最终聚集了术语,而不是文件: public final Instances buildDocumentInstances(TreeMap<String, Multiset> docToTermsMap, String encoding) throws IOException { int dimension = TermToDocumentFrequencyMap.navigableKeySet().size(); FastVector attributes = new FastVector(dimension); for (String s : TermToDocumentFrequencyMap.navigableKeySet()) attributes.addElement(new Attribute(s)); List instances = Lists.newArrayList(); for (Map.Entry<String, Multiset> entry : docToTermsMap.entrySet()) { Instance instance = new Instance(dimension); for (Multiset.Entry ms_entry : […]

Mallet主题建模

我一直在使用mallet来推断包含100,000行(大约34 MB的mallet格式)的文本文件的主题。 但现在我需要在包含一百万行(大约180MB)的文件上运行它,我得到一个java.lang.outofmemoryexception。 有没有办法将文件拆分成较小的文件并为所有文件中存在的数据构建模型? 提前致谢

Encog – 如何加载神经网络的训练数据

我在行动中看到的NeuralDataSet对象并不是XOR,只有两个小数据数组……我无法从MLDataSet的文档中找到任何东西。 似乎一切都必须立即加载。 但是,我想循环训练数据,直到我达到EOF然后将其计为1个纪元。但是,我所看到的所有数据必须从头开始加载到1个2D数组中。 我怎么能绕过这个? 我已经读过这个问题了,答案并没有真正帮助我 。 除此之外,我还没有在这里找到类似的问题。

使用LIBSVM来预测用户的真实性

我打算使用LibSVM来预测Web应用程序中的用户真实性。 (1)收集特定用户行为的数据(例如,登录时间,IP地址,国家等)。(2)使用收集的数据训练SVM(3)使用实时数据比较并生成真实性水平的输出 有人可以告诉我怎样才能用LibSVM做这样的事情? Weka可以帮助解决这些类型的问题吗?

在Java中为Maxent类文件创建训练数据

我正在尝试为maxent分类器创建java实现。 我需要将句子分为n不同的类。 我在stanford maxent分类器中查看了ColumnDataClassifier 。 但我无法理解如何创建培训数据。 我需要训练数据的forms,其中训练数据包括句子单词的POS标签,以便用于分类器的function将像前一个单词,下一个单词等。 我正在寻找训练数据,其中包含POS TAGGING和句子类提到的句子。 例子: 我/(POS)名称/(POS)是/(POS)XYZ /(POS)CLASS 任何帮助将不胜感激。

使用LingPipe对朴素贝叶斯进行数据分类

我想根据内容将某些数据分类到不同的类中。 我使用朴素贝叶斯分类器做了它,我得到一个输出作为它所属的最佳类别。 但是现在我想将除了训练集之外的新闻分类为“其他”课程。 我不能手动将除训练数据之外的每个/每个数据添加到某个类中,因为它有大量其他类别。那么有没有办法对其他数据进行分类? private static File TRAINING_DIR = new File(“4news-train”); private static File TESTING_DIR = new File(“4news-test”); private static String[] CATEGORIES = { “c1”, “c2”, “c3”, “others” }; private static int NGRAM_SIZE = 6; public static void main(String[] args) throws ClassNotFoundException, IOException { DynamicLMClassifier classifier = DynamicLMClassifier.createNGramProcess(CATEGORIES, NGRAM_SIZE); for (int i = 0; i […]

多标签文档分类

我有一个数据库,我根据以下三个字段存储数据:id,text,{labels}。 请注意,每个文本都已分配给多个label \ tag \ class。 我想构建一个模型(weka \ rapidminer \ mahout),它可以推荐\将一堆标签\ tags \ classes分类到给定的文本。 我听说过SVM和朴素贝叶斯分类器,但不确定它们是否支持多标签分类。 任何引导我走向正确方向的东西都非常受欢迎!

apache spark MLLib:如何为字符串function构建标记点?

我正在尝试使用Spark的MLLib构建一个NaiveBayes分类器,它将一组文档作为输入。 我想把一些东西作为特征(即作者,显式标签,隐式关键字,类别),但看文档似乎LabeledPoint只包含双打,即看起来像LabeledPoint[Double, List[Pair[Double,Double]] 。 相反,我从其余代码输出的内容将类似于LabeledPoint[Double, List[Pair[String,Double]] 。 我可以编造自己的转换,但看起来很奇怪。 我怎么用MLLib来处理这个问题? 我相信答案是在HashingTF类中(即散列function),但我不明白它是如何工作的,它似乎需要某种容量值,但我的关键字和主题列表实际上是无限的(或更好,未知在开始)。