ruby - 实现k最近邻需要哪些数据?

标签 ruby algorithm machine-learning nearest-neighbor knn

我目前有一个 reddit 克隆类型的网站。我正在尝试根据我的用户之前喜欢的帖子推荐帖子。

看起来 K 最近邻或 k 均值是执行此操作的最佳方法。

我似乎无法理解如何实际实现它。我看过一些数学公式(例如 k 表示维基百科页面),但它们对我来说并没有真正意义。

有人可以推荐一些伪代码,或者可以查看的地方,以便我更好地了解如何执行此操作吗?

最佳答案

K 最近邻(又名 KNN)是一种分类算法。

基本上,您采用包含 N 个项目的训练组并对它们进行分类。如何对它们进行分类完全取决于您的数据,以及您认为该数据的重要分类特征是什么。在您的示例中,这可能是帖子类别、谁发布了该项目、谁赞了该项目等。

一旦对“训练”数据进行分类,您就可以评估“未知”数据点。您可以通过在分类系统中找到与它最近的邻居来确定未知数的“类别”。如果按3个最近邻来确定分类,则可以称为3个最近邻算法。

如何确定“最近邻”在很大程度上取决于您如何对数据进行分类。将数据绘制到 N 维空间中非常常见,其中 N 代表您正在检查的不同分类特征的数量。

一个简单的例子:

假设您有一个位置的经度/纬度坐标,该位置可以位于世界上任何地方的任何陆地上。我们还假设您没有 map ,但是您确实有一个非常大的数据集,可以为您提供世界上许多不同城市的经度/纬度,并且您还知道那些国家/地区城市在。

如果我问你一个随机的经纬度点在哪个国家,你能算出来吗?你会怎么做才能弄明白?

经度/纬度数据自然落入 X、Y 图中。所以,如果你把所有的城市都画到这张图上,然后是未知点,你会怎么算出未知的国家?您可能会开始围绕该点绘制圆圈,逐渐变大,直到圆圈包含图上最近的 10 个城市。现在,您可以查看这 10 个城市的国家/地区。如果所有 10 个都在美国,那么您可以相当肯定地说您的未知点也在美国。但是如果只有6个城市在美国,另外4个在加拿大,你能说出你的未知点在哪里吗?您可能仍会猜测美国,但不确定性较低。

KNN 最困难的部分是弄清楚如何以一种可以确定质量相似的“邻居”以及与这些邻居的距离的方式对数据进行分类。

关于ruby - 实现k最近邻需要哪些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6206250/

相关文章:

ruby-on-rails - 如何修复 "Unknown ruby interpreter version (do not know how to handle)"

ruby - 如何将变量从 ruby​​ 传递到 sh 命令

machine-learning - 在进行迁移学习时,保留哪些 CNN 全连接层的最佳实践是什么?

ruby - 如何避免类和全局变量

ruby-on-rails - 使用基于已安装引擎的 url_for 获取基于约束的 url

algorithm - N序列的最长公共(public)子序列(不同用途)

algorithm - MATLAB:快速创建具有固定度数(行总和)的随机对称矩阵

algorithm - 确定 top 'm' 最常出现的 k-Page-sequence

python-3.x - 如果onehotencoder应用于训练数据,如何通过测试数据来获得模型预测

r - 带有 setpmax 和阈值的神经网络包中出现错误