作为特定的具体示例,一种选择是“最近的K邻居”算法。
为简化起见,假设您只有十本书,而您只是在跟踪每个用户查看每本书的次数。然后,对于每个用户,您可能会有一个数组int timesViewed[10]
,其中的值timesViewed[i]
是用户查看书号的次数i
。
然后,您可以使用相关函数将用户与所有其他用户进行比较,例如Pearson相关。计算当前用户c
与另一个用户之间的相关性,o
得出的值介于-1.0和1.0之间,其中-1.0表示“该用户c
与另一个用户完全相反o
”,而1.0表示“该用户c
与另一个用户相同o
” 。
如果计算c
每个用户与另一个用户之间的corellation ,则会得到一个结果列表,该结果显示用户的观看模式与每个其他用户的观看模式有多相似。然后,您选择K
(例如5、10、20)个最相似的结果(因此命名为算法),即K
相关得分最接近1.0的用户。
现在,您可以对每个用户timesViewed
数组进行加权平均。例如,我们要说的averageTimesViewed[0]
是timesViewed[0]
这K个用户中每个K用户的平均值,并按其相关分数加权。然后彼此做同样的事情averageTimesViewed[i]
。
现在,您有了一个数组averageTimesViewed
,大致来说,它包含查看方式与最相似的K位用户c
查看每本书的平均次数。推荐averageTimesViewed
分数最高的书,因为这是其他用户最感兴趣的书。
通常也值得将用户已经阅读过的书籍排除在推荐范围之外,但是在计算相似度/相关性时仍要考虑这些因素仍然很重要。
还要注意,可以将其扩展以考虑其他数据(例如购物车列表等)。另外,您 可以根据需要 选择所有用户(即K
=用户数量),但这并不总是会产生有意义的结果,通常选择一个合理的较小K
值即可获得良好的结果,并且计算速度更快。