2017年6月3日机器学习笔记
来源:互联网 发布:淘宝评论员兼职赚钱吗 编辑:程序博客网 时间:2024/05/17 21:54
Collaborative Filtering
David Goldberg 1992 《Using collaborative filtering to weave an information tapestry》
Tapestry框架 web端 (—>待了解)
1.搜集偏好 Collecting Preferences
python 嵌套字典 数据库
2.寻找相似的用户 Finding Similar Users
相似度评价:
1.欧几里得距离 Euclidean Distance Score
—————————————————————————————————
代码段
from math import sqrt#返回一个有关person1与person2的基于距离的相似度评价def sim_distance(prefs,person1,person2): #得到shared_items的列表 si = {} for item in prefs[person1]: if item in prefs[person2]: si[item] = 1 #如果两者没有共同之处,则返回0 if len(si) == 0: return 0 #计算所有差值的平方和 sum_of_squares = sum([pow(prefs[person1][item] - prefs[preson2][item],2) for item in prefs[person1] if item in prefs[person2]]) return 1/(1+sqrt(sum_of_squares))
—————————————————————————————————
2.皮尔逊相关度评价 Pearson Correlation Score
修正夸大分值(grade inflation)在数据不规范的时候会倾向于给出更好的结果
—————————————————————————————————
计算公式
—————————————————————————————————
代码段
def sim_pearson(prefs,person1,person2): # 得到双方都曾评价过的物品列表 si={} for item in prefs[person1]: if item in prefs[person2]: si[item] = 1 # 得到列表元素的个数 n = len(si) # 如果两者没有共同之处,则返回1 if n==0: return 1 # 对所有偏好求和 sum1 = sum([prefs[person1][item] for item in si]) sum2 = sum([prefs[person2][item] for item in si]) #求平方和 sum1sq = sum([pow(prefs[person1][item],2) for item in si]) sum2sq = sum([pow(prefs[person2][item],2) for item in si]) #求乘积之和 pSum = sum([prefs[person1][item]*prefs[person2][item] for item in si]) #计算皮尔逊评价值 num = pSum-(sum1*sum2/n) den = sqrt((sum1sq-pow(sum1,2)/n)*(sum2sq-pow(sum2,2)/n)) if den == 0: return 0 r = num/den return r
—————————————————————————————————
3.应该选择哪一种相似性度量方法 Which Similarity Metric Should You Use
(1)欧几里得算法
(2)皮尔逊相关度
(3)Jaccard系数 (—>待了解)
(4)曼哈顿距离算法
4.为评论者打分Ranking the Critics
—————————————————————————————————
代码段
#从反映偏好的字典中返回最为匹配者#返回结果的个数和相似度函数均为可选参数def topMatches(prefs,person,n=5,similarity=sim_pearson): scores=[(similarity(prefs,person,other),other)for other in prefs if other != person]#对列表进行排序,评价值最高者排在最前面 score.sort() score.reverse() return scores[0:n]
—————————————————————————————————
5.推荐物品Recommending Items
加权评价值
—————————————————————————————————
代码段
#利用所有他人评价值的加权平均,为某人提供建议def getRecommendations(prefs,person,similarity = sim_pearson): totals = {} simSums = {} for other in prefs: #不用和自己做对比 if other == person: continue sim = similarity(prefs,person,other) #忽略评价值为零或小于零的情况 if sim<=0:continue for item in prefs[other]: #只对自己还没有看过的影片进行评价 if item not in prefs[person] or prefs[person][item] == 0: totals.setdefault(item,0) #相似度*评价值 totals[item]+=prefs[other][item]*sim #相似度之和 simSums.setdefault(item,0) simSums[item]+=sim #建立一个归一化的列表 rankings = [(total/simSums[item],item) for item,total in totals.items()] #返回经过排序的列表 rankings.sort() rankings.reverse() return rankings
—————————————————————————————————
阅读全文
1 0
- 2017年6月3日机器学习笔记
- PHP&MySQL学习笔记2017年1月18日
- 2017年1月21日学习笔记 Spring是什么?
- 2017年5月4日C++学习笔记
- 2017年9月8日学习笔记
- 前端学习笔记 2017年9月11日
- 学习笔记 2017年9月12日
- 学习笔记 2017年9月13日
- 学习笔记 2017年9月14日
- bat学习笔记-2017年11月18日
- Python学习笔记2017年12月22日
- Python学习笔记2017年12月23日
- Python学习笔记2017年12月24日
- Python学习笔记2017年12月25日
- STM32学习笔记 2014年11月6日下午
- 2015年03月6日 iOS学习笔记
- 【嵌入式学习笔记】2016年8月6日
- 学习笔记2009年3月24日
- Loading界面的制作(一)
- HTML5利用Canvas绘制图形(绘制渐变、模式、变换)
- 高性能MySQL_第3版(中文)pdf
- MySQL (六)--查询处理
- 矩阵乘法
- 2017年6月3日机器学习笔记
- Unity5 GI与PBS渲染从用法到着色代码
- [4]深度学习和Keras----斯坦福的一个可在线运行的卷积神经网络的Demo
- test
- 统计
- 图的存储结构
- Android优化技巧—内存优化
- 《eclipse》
- 树形结构