当我们在K最近邻居中有稀疏数据集时如何计算距离

时间:2011-09-19 02:47:45

标签: machine-learning distance multidimensional-array nearest-neighbor knn

我正在为非常稀疏的数据实现K最近邻算法。我想计算测试实例与训练集中每个样本之间的距离,但我很困惑。

因为训练样本中的大多数功能在测试实例中不存在,反之亦然(缺少功能)。

如何在这种情况下计算距离?

2 个答案:

答案 0 :(得分:3)

确保我正确理解问题:每个样本形成一个非常稀疏的向量。样本之间缺失的数据不同,因此很难使用任何欧几里德或其他距离度量来衡量样本的相似性。

如果是这种情况,我已经看到这个问题出现在机器学习之前 - 在Netflix奖项竞赛中,但没有特别适用于KNN。场景非常相似:每个用户个人资料都有一些电影的评分,但几乎没有用户看过所有17,000部电影。平均用户资料非常少。

不同的人有不同的方法来解决问题,但我记得的方式是他们插入了缺失值的虚拟值,通常是所有数据样本中特定值的平均值。然后他们正常使用欧几里德距离等。您可能仍然可以在该论坛上找到有关此缺失值问题的讨论。对于那些试图实现奇异值分解的人来说,这是一个特别常见的问题,这种问题变得非常流行,如果我没记错的话,我会讨论这个问题。

您可以从这里开始: http://www.netflixprize.com//community/viewtopic.php?id=1283

你将不得不挖掘一下。 Simon Funk对此采取了一些不同的方法,但它更特殊于SVD。你可以在这里找到它:http://www.netflixprize.com//community/viewtopic.php?id=1283 如果你想跳到相关部分,他会称它们为空格。

祝你好运!

答案 1 :(得分:1)

如果你在非常高的空间工作。最好在所有可用数据上使用SVD,LDA,pLSV或类似方法进行空间缩减,然后在通过该方式转换的训练数据上训练算法。其中一些算法是可扩展的,您可以在Mahout项目中找到实现。特别是我更喜欢使用更一般的功能然后进行这样的转换,因为它更容易调试和功能选择。为此目的结合一些功能,使用词干分析器,思考更一般。