作为特定的具体示例,一种选择是“最近的K邻居”算法。
为简化起见,假设您只有十本书,而您只是在跟踪每个用户查看每本书的次数。然后,对于每个用户,您可能会有一个数组
inttimesViewed[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值即可获得良好的结果,并且计算速度更快。



