[推荐算法]Pearson Correlation Similarity 的python实现
2015-08-13 23:19
585 查看
皮尔逊相似度是推荐算法中常见的 计算相似度的方法,其公式如下:
从公式可以看出 该算法有几个缺点:
1,如果用户A对所有item的评分都一样,那么将无法计算别人跟A的相似度(分母为0);所以该算法不适用于 boolean preference类型的推荐
2,如果用户A只对1个item进行了评分,那么也无法计算别人跟A的相似度(分母为0);所以对于数据量较小,或者矩阵非常之稀疏的数据都不太好用
3,如果2个人有200个common item,尽管ratings并不总是一样,但她们的相似度 可能好于2个只有2 commen item的人的相似度(这个我不能直接从公式看出来,哪位大神指点一下)
下面是python实现:
从公式可以看出 该算法有几个缺点:
1,如果用户A对所有item的评分都一样,那么将无法计算别人跟A的相似度(分母为0);所以该算法不适用于 boolean preference类型的推荐
2,如果用户A只对1个item进行了评分,那么也无法计算别人跟A的相似度(分母为0);所以对于数据量较小,或者矩阵非常之稀疏的数据都不太好用
3,如果2个人有200个common item,尽管ratings并不总是一样,但她们的相似度 可能好于2个只有2 commen item的人的相似度(这个我不能直接从公式看出来,哪位大神指点一下)
下面是python实现:
#!/usr/bin/python import sys # input 2 vector array # output pearson correlation score def PearsonCorrelationSimilarity(vec1, vec2): value = range(len(vec1)) sum_vec1 = sum([ vec1[i] for i in value]) sum_vec2 = sum([ vec2[i] for i in value]) square_sum_vec1 = sum([ pow(vec1[i],2) for i in value]) square_sum_vec2 = sum([ pow(vec2[i],2) for i in value]) product = sum([ vec1[i]*vec2[i] for i in value]) numerator = product - (sum_vec1 * sum_vec2 / len(vec1)) dominator = ((square_sum_vec1 - pow(sum_vec1, 2) / len(vec1)) * (square_sum_vec2 - pow(sum_vec2, 2) / len(vec2))) ** 0.5 if dominator == 0: return 0 result = numerator / (dominator * 1.0) return result vec1 = [5.0, 3.0, 2.5] vec2 = [2.0, 2.5, 5.0] print PearsonCorrelationSimilarity(vec1, vec2)
相关文章推荐
- [2015-08-10] python021
- python编码的理解
- 第0004道练习题_Python统计文本里单词出现次数
- wxPython Cookbook (Chatper1)part 2
- 零基础学python-2.17 文件、open()、file()
- 零基础学python-2.17 文件、open()、file()
- python 一些有趣的模块
- 03 Python 基础 - 《Python 核心编程》
- Python - 安全替换字符串模板(safe_substitute) 详细解释
- Python的异常处理
- Python字符串处理
- 02 Python 起步 - 《Python 核心编程》
- python回调函数的使用方法
- python面向对象的理解
- python继承
- python is not like C
- python 正则表达式 groups和group有什么区别
- Python爬虫3
- python爬虫2
- Python爬虫1