我有一个我认为是简单的机器学习问题。
这是基本问题:我反复收到一个新对象和有关该对象的描述列表。例如:新对象:'bob'
新对象描述:['tall','old','funny']
。然后,我必须使用某种机器学习来查找先前处理过的具有 10 个或更少的最相似描述的对象,例如 past_similar_objects: ['frank','steve','joe']
。接下来,我有一个算法,可以直接衡量这些对象是否确实与 bob 相似,例如,correct_objects: ['steve','joe']
。然后为分类器提供成功匹配的反馈训练。然后这个循环重复一个新对象。a 这是伪代码:
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 个(或更少)最相似的对象。如果没有这个限制,一个明显的欺骗是分类器可以只返回所有过去的对象:)
为此目的,什么是体面、快速的机器学习算法?
注意: calc_successful_matches 距离度量的计算成本非常高,这就是为什么我使用快速机器学习算法来尝试在我实际进行昂贵的计算之前猜测哪些对象会接近。