<Programming Collective Intel

2017-03-05  本文已影响111人  _Randolph_

Chapter 1 & 2:Introduction to Collective Intelligence & Making Recommendations

  • The formula for this is more complicated than the Euclidean distance score, but it tends to give better results in situations where the data isn’t well normalized—for example, if critics’ movie rankings are routinely more harsh than average. 它相比于欧几里德距离评价更加复杂,但其在数据不是很规范的时候(比如,影评者对影片的评价总是相对于平均水平偏离很大的时候),会给出更好的结果。
  • If one critic is inclined to give higher scores than the other, there can still be perfect correlation if the difference between their scores is consistent. The Euclidean distance score described earlier will say that two critics are dissimilar because one is consistently harsher than the other, even if their tastes are very similar. 如果某人总是倾向于给出比另一个人更高的分值,而两者的分值之差又始终保持一致,则他们依然可能会存在很好的相关性。而欧几里德距离评价会因为一个人的评价之中比另外一个人的更为“严格”(从而导致评价始终相对偏低),从而得出两者不相近的结论,即使他们的品位很相似也是如此。

1.Key:

在[推荐物品]的模块中,提到了一种方法:

  1. 通过函数找出与自己有相似品味的影评者,并按相似度从大到小排序。
  2. 对于自己未看过的影片,建立一张表,表的内容包括:品位相似的影评者以及其对应的相似度,对于自己未看过影片的评分(影评者可以看过也可以没有看过)。
  3. 对于某一个未看过的电影,影评者的相似度(可理解为权值,不同评论者的权值不同,相似度越高,权值越高)乘以其对该电影的评分,其他影评者也得到一个值(如果没有看过,则为零),然后累加,记为其他影评者对于该电影者的评价总和,之后总和需要除以所有对该电影评过分的影评者的相似度之和。
  4. 最后得到的结果,表示为自己对于没有看过的电影,通过自己品位相似的影评者得到的预测评分,根据预测评分,来给出决策。

2.Need to know:

在[构建一个基于del.icio.us的链接推荐系统]的模块中:
首先我们需要下载 pydelicious 这一个 package。[这个package 不支持 python3.x]

我的尝试:

  1. 通过 Pycharm 自带的“便利” package下载。出错,原因:无法找到对应的版本。
  2. 通过命令行输入 sudo pip install pydelicious。出错,原因:Could not find a version that satisfies the requirement pydelicious (from versions: )No matching distribution found for pydelicious。
  3. 通过命令行输入 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。

初次尝试失败之后,在 Stackoverflow 寻找解决办法:

  1. 首先,按照书本提供的下载地址:the pydelicious download page
    [需要翻墙] 下载 pydelicious-0.5.0.zip 文件。解压之后得到文件夹。
  2. 命令行 cd 到解压后的文件夹,然后输入 sudo python setup.py install,错误提示:Feedparser not available, no RSS parsing.
    意思是缺少 feedparser,需要安装feedparser。
  3. 安装 feedparser,下载地址:the feedparser download page[需要积分],或者 the feedparser download page[需要翻墙],下载文件夹。
  4. 命令行 cd 到 feedparser 的文件夹,然后输入 sudo python setup.py install,feedparser 安装完成。
  5. 命令行 cd 回到 pydelicious 文件夹,再次输入 sudo python setup.py install,此时会发现 pydelicious 安装成功。
  6. 测试 pydelicious 是否能够导入,命令行输入 python 之后,再输入import pydelicious,如果没有报错,这说明 pydelicious 安装成功。

本以为问题得到了解决,可以按照书上的代码继续进行:

命令行输入python:

>>> import pydelicious
>>> pydelicious.get_popular(tag='python')

此时会报错,无论是否翻墙,显示获取失败。


我在 Stackoverflow上找到了原因:the answer[需要翻墙]
仔细看提问者的问题,重点是后面提出解决办法的几个回答。

You should modify the __init__.py to:
rss =http_request('http://feeds.delicious.com/v2/rss') .read()

所以解决的办法是:
打开 pydelicious 的文件夹,找到子文件夹 pydelicious 下的 __init__.py 文件,修改三处地方:

命令行 cd 到 pydelicious 安装总文件夹,重新输入 sudo python setup.py install
命令行输入 python:

>>> import pydelicious
>>> pydelicious.get_popular(tag='python')

此时会发现成功获取到了内容(注意检查网络,如果仍然无法获取,记得翻墙)。


本以为到此终于告一段落,但是实际上:

>>> import pydelicious
>>> pydelicious.get_popular(tag='python')
>>> pydelicious.get_popular(tag='xxx')

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...


3.Correct errors in printing:

# 如果两者没有共同之处,则返回1
if n==0: return 1

需要更正为:

# 如果两者没有共同之处,则返回0
if n==0: return 0

4.Practice:


5.Still have Question:

  1. 皮尔逊相关度理论的学习(已完成)
上一篇下一篇

猜你喜欢

热点阅读