我有一个简单的机器学习问题。
这里有一个基本的问题:我反复得到一个新对象和一个关于该对象的描述列表。例如:new_object:'bob'new_object_descriptions:['tall','old','funny']。然后,我必须使用某种机器学习来查找以前处理过的对象,这些对象具有10种或以下最相似的描述,例如,过去的“相似”对象:['frank','steve','joe']。接下来,我有一个算法可以直接测量这些对象是否真的与Bob相似,例如,正确的_Objects:['steve','joe']。然后对分类器进行成功匹配的反馈训练。然后用一个新对象重复这个循环。

这是伪代码:

Classifier=new_classifier()

while True:
    new_object,new_object_descriptions = get_new_object_and_descriptions()
    past_similar_objects = Classifier.classify(new_object,new_object_descriptions)
    correct_objects = calc_successful_matches(new_object,past_similar_objects)
    Classifier.train_successful_matches(object,correct_objects)

但是,有一些规定可能限制可以使用的分类器:
将有数百万个对象放入这个分类器,因此分类和培训需要很好地扩展到数百万个对象类型,而且仍然很快。我相信这会取消垃圾邮件分类器之类的东西的资格,它只适合两种类型:垃圾邮件还是非垃圾邮件。(更新:如果有问题的话,我可以把范围缩小到数千个对象,而不是数百万个对象。)
同样,我更喜欢数百万物体被分类时的速度,而不是准确度。
更新:分类器应该根据过去培训的反馈返回10个(或更少)最相似的对象。如果没有这个限制,一个明显的欺骗就是分类器可以返回所有过去的对象:)
什么是合适的、快速的机器学习算法?
注意:计算成功的匹配距离度量非常昂贵,这就是为什么我使用一个快速机器学习算法来尝试在实际进行昂贵的计算之前猜测哪些对象将接近的原因。

最佳答案

一个似乎满足您需求的算法(可能类似于统计学家约翰的建议)是Semantic Hashing。其基本思想是,它训练一种深度信念网络(一种神经网络,有些人称之为“神经网络2.0”,目前是一个非常活跃的研究领域),将一个对象的描述列表散列成二进制数,从而使数字之间的汉明距离Rs对应于相似的物体。因为这只需要按位运算,所以速度非常快,而且因为您可以使用它来创建最近邻样式的算法,所以它自然会归纳为大量类。这是非常先进的东西。缺点:理解和实现并不容易,需要一些参数调整。作者提供了一些matlab代码。一个更容易实现的算法,并且与这个算法密切相关,是位置敏感的散列。
既然你说你有一个昂贵的距离函数,你想快速近似,我会想起另一个非常有趣的算法,它可以做到这一点,here。这个方法使用升迁来创建一个快速的度量,它近似于一个昂贵的度量。在某种意义上,它与上述想法类似,但所使用的算法不同。这篇文章的作者有几篇关于相关技术的论文,它们都是相当好的质量(发表在顶级会议上),您可能想看看。

08-25 08:01
查看更多