<Programming Collective Intelligence> Chapter2:Making Recommendations
<Programming Collective Intelligence>
Chapter2:Making Recommendations
欧几里得距离评价
皮尔逊相关度评价
它相比于欧几里德距离评价,其在数据不是很规范的时候(比如,影评者对影片的评价总是相对于平均水平偏离很大的时候),会给出更好的结果。
如果某人总是倾向于给出比另一个人更高的分值,而两者的分值之差又始终保持一致,则他们依然可能会存在很好的相关性。而欧几里德距离评价会因为一个人的评价之中比另外一个人的更为“严格”(从而导致评价始终相对偏低),从而得出两者不相近的结论,即使他们的品位很相似也是如此。
其他相似度计算函数
Key:
P15:
在[推荐物品]的模块中,提到了一种方法:
通过函数找出与自己有相似品味的影评者,并按相似度从大到小排序。
对于自己未看过的影片,建立一张表,表的内容包括:品位相似的影评者以及其对应的相似度,对于自己未看过影片的评分(影评者可以看过也可以没有看过)。
对于某一个未看过的电影,影评者的相似度(可理解为权值,不同评论者的权值不同,相似度越高,权值越高)乘以其对该电影的评分,其他影评者也得到一个值(如果没有看过,则为零),然后累加,记为其他影评者对于该电影者的评价总和,之后总和需要除以所有对该电影评过分的影评者的相似度之和。
最后得到的结果,表示为自己对于没有看过的电影,通过自己品位相似的影评者得到的预测评分,根据预测评分,来给出决策。
Need to know:
在[构建一个基于del.icio.us的链接推荐系统]的模块中:
首先我们需要下载pydelicious这一个package。[这个package不支持python3.x]
我的尝试:
通过Pycharm自带的“便利”package下载。出错,原因:无法找到对应的版本。
通过命令行输入sudo pip install pydelicious。出错,原因:Could not find a version that satisfies the requirement pydelicious (from versions: )No matching distribution found for pydelicious。
通过命令行输入sudo pip install pydelicious --allow-external pydelicious --allow-unverified pydelicious。出错,原因:Could not find a version that satisfies the requirement pydelicious (from versions: )No matching distribution found for pydelicious。
初次尝试失败之后,上网寻找解决办法:
首先,按照书本提供的下载地址:http://code.google.com/p/pydelicious/source[需要FQ]下载.zip文件。解压之后得到文件夹。
命令行cd到解压后的文件夹,然后输入sudo python setup.py install,错误提示:Feedparser not available, no RSS parsing.[意思是缺少feedparser,需要安装feedparser]
安装feedparser,下载地址:http://download.csdn.net/download/dixin28/5271130[需要积分],或者https://github.com/kurtmckee/feedparser[需要FQ],下载文件夹。
命令行cd到feedparser的文件夹,然后输入sudo python setup.py install,feedparser安装完成。
命令行cd回到pydelicious文件夹,再次输入sudo python setup.py install,此时会发现pydelicious安装成功。
测试pydelicious这一package是否能够导入,命令行输入python之后,再输入import pydelicious,如果没有报错,这说明pydelicious安装成功。
本以为问题得到了解决,可以按照书上的代码继续进行下去的时候:
命令行输入python:
>>>import pydelicious
>>>pydelicious.get_popular(tag='python')
此时会报错,无论是否FQ,显示获取失败。
我在stackoverflow.com上找到了原因:http://stackoverflow.com/questions/29543799/pydelicious-get-popularprogramming-doesnt-return-any-valid-url[需要FQ]
仔细看提问者的问题,重点是后面提出解决办法的几个回答。
You should modify the__init__.py to:
rss = http_request('http://feeds.delicious.com/v2/rss').read()
所以解决的办法是:
打开pydelicious的文件夹,找到子文件夹pydelicious下的__init__.py文件,修改三处地方:
DLCS_RSS = 'http://feeds.delicious.com/v2/rss/'
rss = http_request('http://feeds.delicious.com/v2/rss').read()
def get_popular(tag =""):
return getrss(tag = tag, popular =0)
命令行cd到pydelicious安装总文件夹,重新输入sudo python setup.py install。
命令行输入python:
>>>import pydelicious
>>>pydelicious.get_popular(tag='python')
此时会发现成功获取到了内容(注意检查网络,如果仍然无法获取,记得FQ)。
本以为到此终于告一段落,但是实际上:
>>>import pydelicious
>>>pydelicious.get_popular(tag='python')
>>>pydelicious.get_popular(tag='xxx')
意思是无论我如何更改tag的值,返回的内容会发现是一样。这个问题,stackoverflow老外也同样遇到了:
I see the resource code again. Maybe it is wrong.Because If you edit the code,the procedural answer always remain unchanged...I'm studing...
我个人觉得可能是DLCS_RSS的网址还需要更改一下(因为这本书在刚出来的时候,pydelicious还是支持原del.icio.us的网站,是不需要去更改__init.py__的文件等,后来是unspported,所以需要更改__init.py__文件中的RSS订阅源,也许可能这个订阅源还不是最新的,反正是坑...),或者说是get_popular的function有误(这个不太坑呢个),总而言之,折腾了一下晚上,感觉是遇到了坑,不过好歹也算是解决出来了。
貌似有deliciousapi这个package作为替代,我也尝试过,但运行说明文档中的几个函数,发现会报错,希望如果有人知道如何用deliciousapi替代pydelicious完成第二章后续的几个模块,请务必告诉我!
新手实践这本书的时候,完全可以跳过这个坑,因为没有必要,只需要get第二章几个重要的算法或者是思想就可以了。
Correct errors in printing:
P13:
# 如果两者没有共同之处,则返回1
if n==0: return 1
需要更正为:
# 如果两者没有共同之处,则返回0
if n==0: return 0
Practice:
Still have Question:
皮尔逊相关度理论的学习
<Programming Collective Intelligence> Chapter2:Making Recommendations的更多相关文章
- Programming Collective Intelligence
最近正在拜读 O'reilly出版的Programming Collective Intelligence,准备研究研究搜索引擎了,童鞋们,到时候会考虑公布源码哦!
- 上课总结-数据库Chapter2: 关系数据库
Chapter2: 关系数据库 一.搞懂主键 外键关系 主键(主码):能唯一标识一个元组的某一属性组. 外键:不是这组数据的主键 但是另一组数据的唯一主键(当这组数据的主键有2个时 可以作为外键) 例 ...
- [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01
注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...
- 重读The C programming Lanuage 笔记四:c预处理
C预处理器执行宏替换.条件编译以及包含指定的文件.以#开头的命令行就是与处理器的对象.这些命令行的语法独立于语言的其他部分,它们可以出现在任何地方,其作用可延续到所在编译单元的末尾(与作用域无关).行 ...
- 对动态规划(Dynamic Programming)的理解:从穷举开始(转)
转自:http://janfan.cn/chinese/2015/01/21/dynamic-programming.html 动态规划(Dynamic Programming,以下简称dp)是算法设 ...
- ESSENTIALS OF PROGRAMMING LANGUAGES (THIRD EDITION) :编程语言的本质 —— (一)
# Foreword> # 序 This book brings you face-to-face with the most fundamental idea in computer prog ...
- Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
Jerry的Restful ABAP Programming模型介绍系列的前两篇文章: 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 Jerry带 ...
- 【javascript模式】Chapter2: 基本 技巧
1 尽量少用全局变量,最好一个应用程式只有一个全局变量 隐含全局变量(不使用var声明)与明确定义的全局变量区别: (1)使用var创建的全局变量(在函数外部声明)不能用delete删除 (2) ...
- 重读The C programming Lanuage 笔记三:简单计算器程序
//简单计算器 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <str ...
随机推荐
- 阿铭linux笔记
2015-09-06虚拟机网络设置.wmv: curl 获取在命令行显示的网页 dhclient 分配ip地址 ifdown eth0 关闭网卡eth0 ifup eh0 ...
- mongodb 基本语法
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作. 输入help可以看到基本操作命令: show dbs:显示数据库列表 show collections:显示 ...
- UESTC 75 The Queen's New Necklaces
题意:一个项链的珠子的颜色有若干种.每种颜色的珠子个数为Ai.求有多少种不同的项链? 我们考虑,如果旋转i个珠子,那么会产生gcd(n,i)个循环节,每个循环节的大小我们假设为K,那么如果有一个颜色的 ...
- linux会话命令screen详解
Screen会话命令 我其实是把文件下载到 /home/zhang/temp/ 里面,当我N久以后再联上服务器,想看看文件下载情况怎样,那又要 cd 老半天,这时候 screen 就是好帮手了. 顾名 ...
- 优化C#程序的48种方法
一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...
- 【CF 549G Happy Line】排序
题目链接:http://codeforces.com/problemset/problem/549/G 题意:给定一个n个元素的整数序列a[], 任意时刻对于任一对相邻元素a[i-1]. a[i],若 ...
- jQuery ajax - getScript() 方法和getJSON方法
实例 使用 AJAX 请求来获得 JSON 数据,并输出结果: $("button").click(function(){ $.getJSON("demo_ajax_js ...
- if条件语句练习(相亲)
public class a { public static void main(String[] arg){ //F是房子,Q是钱,N是能力,等于0说明没有,等于1说明有: 有一项具备则可以嫁,都不 ...
- Ubuntu Eclipse的Tomcat小问题:不能输入server name,不能启动tomcat
Ubuntu的Eclipse上安装Tomcat环境,这是让人烦啊,万幸还是终于解决了. Eclipse上Tomcat的搭建: 1.点击Eclipse上的菜单:Windows - Preference, ...
- [转载]Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
转载:http://blog.csdn.net/ithomer/article/details/6100734 知识背景: 210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式 ...