如何使用 Scipy 的 Kd 树函数加速 K-最近邻 (KNN)



我想使用Scipy的Kd树来加快KNN搜索,但我不清楚如何将数据格式化为1)-创建树和2)-使用树来加快搜索。

为了详细说明,我有一个Netflix训练数据的pandas数据帧,它由用户列、他们评分的每个电影项目以及他们给它的评分组成(见下文)。使用这些训练数据,我现在通过计算测试用户的最近邻居(KNN)来预测测试用户的评级。最近的邻居是使用皮尔逊相关系数计算的,而不是欧氏距离。一旦计算出最近邻居,我想使用最近邻居来预测/猜测测试用户的评级。

然而,我的用户和电影列表很大(netflix数据),计算数千部电影中数千名用户的最近邻居在计算上变得不可行。Kd树方法已被建议作为加速K最近邻的方法。

有没有一种方法可以使用Scipy的Kd树来加快这种方法?如果是,那么数据需要采用什么格式才能使用Kd树方法?我知道这个问题有一个内置的滑雪套件学习功能,但我需要能够独立实现。

Goal: predict user 1 rating on movie 10 by finding most similar users 
Training data
user    movie   rating
2         7      5.0
3        10      3.0
4         4      1.0
50     3363      2.0
50       7       3.0
83      50       4.0
83       7       5.0
etc

Scipy的KD树仅支持p-范数度量(例如,p=2是标准欧几里得距离)。如果您想要更通用的指标,scikit learn的BallTree支持许多不同的指标。特别是,相关度量与Pearson相关系数有关,因此您可以将算法建立在使用该度量进行有效搜索的基础上。

也就是说,如果你有数千个维度,基于树的方法通常不会比暴力更好。更好的方法是使用某种近似算法,如位置敏感哈希,并为相关距离设计哈希函数。

相关内容

  • 没有找到相关文章

最新更新