icc*_*cco 5 ruby algorithm machine-learning nearest-neighbor knn
我目前有一个reddit-clone类型的网站.我正在尝试根据用户之前喜欢的帖子推荐帖子.
似乎K最近邻居或k均值是最好的方法.
我似乎无法理解如何实际实现这一点.我已经看到了一些数学公式(比如k上的那个就意味着维基百科页面),但它们对我来说并没有多大意义.
有人可能会推荐一些伪代码,或者看看这些地方,以便我可以更好地了解如何做到这一点?
K-Nearest Neighbor(又名KNN)是一种分类算法.
基本上,你需要一个N项训练组并对它们进行分类.您如何对它们进行分类完全取决于您的数据,以及您认为该数据的重要分类特征.在您的示例中,这可能是帖子的类别,发布项目的人员,向项目投票的人员等等.
一旦对此"培训"数据进行了分类,您就可以评估"未知"数据点.您可以通过在分类系统中找到它的最近邻居来确定未知的"类".如果您确定3个最近邻居的分类,则可以将其称为3最近邻居算法.
如何确定"最近邻居"在很大程度上取决于您对数据进行分类的方式.将数据绘制到N维空间中非常常见,其中N表示您正在检查的不同分类特征的数量.
一个简单的例子:
假设您拥有可以在世界任何地方的任何陆地上的位置的经度/纬度坐标.我们还假设您没有地图,但是您确实拥有一个非常大的数据集,可以为您提供世界上许多不同城市的经度/纬度,并且您还知道这些城市所在的国家/地区.
如果我问你哪个国家有一个随机经度纬度点,你能算出来吗?你会怎么做才能搞清楚?
经度/纬度数据自然地落入X,Y图中.那么,如果你将所有城市划分到这个图表上,然后是未知点,那么你将如何找出未知国家?您可能会开始围绕该点绘制圆圈,越来越大,直到圆圈包含地块上最近的10个城市.现在,您可以查看这10个城市的国家/地区.如果所有10个人都在美国,那么你可以相当肯定地说你的未知点也在美国.但如果只有6个城市在美国,其他4个在加拿大,你能说出你未知的地方吗?你可能仍然猜测美国,但不太确定.
KNN最棘手的部分是弄清楚如何对数据进行分类,以便您可以确定具有相似质量的"邻居"以及与这些邻居之间的距离.
| 归档时间: |
|
| 查看次数: |
2635 次 |
| 最近记录: |