• <Programming Collective Intelligence> Chapter2:Making Recommendations


    <Programming Collective Intelligence>

    Chapter2:Making Recommendations

    • 欧几里得距离评价

    • 皮尔逊相关度评价

    1. 它相比于欧几里德距离评价,其在数据不是很规范的时候(比如,影评者对影片的评价总是相对于平均水平偏离很大的时候),会给出更好的结果。      

    2. 如果某人总是倾向于给出比另一个人更高的分值,而两者的分值之差又始终保持一致,则他们依然可能会存在很好的相关性。而欧几里德距离评价会因为一个人的评价之中比另外一个人的更为“严格”(从而导致评价始终相对偏低),从而得出两者不相近的结论,即使他们的品位很相似也是如此。

    • 其他相似度计算函数

    Key:

        P15:

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

    1. 通过函数找出与自己有相似品味的影评者,并按相似度从大到小排序。

    2. 对于自己未看过的影片,建立一张表,表的内容包括:品位相似的影评者以及其对应的相似度,对于自己未看过影片的评分(影评者可以看过也可以没有看过)。

    3. 对于某一个未看过的电影,影评者的相似度(可理解为权值,不同评论者的权值不同,相似度越高,权值越高)乘以其对该电影的评分,其他影评者也得到一个值(如果没有看过,则为零),然后累加,记为其他影评者对于该电影者的评价总和,之后总和需要除以所有对该电影评过分的影评者的相似度之和。

    4. 最后得到的结果,表示为自己对于没有看过的电影,通过自己品位相似的影评者得到的预测评分,根据预测评分,来给出决策。

     

    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。

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

    1. 首先,按照书本提供的下载地址:http://code.google.com/p/pydelicious/source[需要FQ]下载.zip文件。解压之后得到文件夹。

    2. 命令行cd到解压后的文件夹,然后输入sudo python setup.py install,错误提示:Feedparser not available, no RSS parsing.[意思是缺少feedparser,需要安装feedparser]

    3. 安装feedparser,下载地址:http://download.csdn.net/download/dixin28/5271130[需要积分],或者https://github.com/kurtmckee/feedparser[需要FQ],下载文件夹。

    4. 命令行cd到feedparser的文件夹,然后输入sudo python setup.py install,feedparser安装完成。

    5. 命令行cd回到pydelicious文件夹,再次输入sudo python setup.py install,此时会发现pydelicious安装成功。

    6. 测试pydelicious这一package是否能够导入,命令行输入python之后,再输入import pydelicious,如果没有报错,这说明pydelicious安装成功。

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

    1. 命令行输入python:

      >>>import pydelicious

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

    2. 此时会报错,无论是否FQ,显示获取失败。

        仔细看提问者的问题,重点是后面提出解决办法的几个回答。

     

        You should modify the__init__.py to:

        rss = http_request('http://feeds.delicious.com/v2/rss').read()

        所以解决的办法是:

    1. 打开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)

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

    3. 命令行输入python:

      >>>import pydelicious

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

    4. 此时会发现成功获取到了内容(注意检查网络,如果仍然无法获取,记得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:

    1.  

    Still have Question:

    1. 皮尔逊相关度理论的学习

  • 相关阅读:
    yeoman+grunt/gulp+bower构建angular项目
    eclipse配置svn 并从svn下载maven项目 配置tomcat启动maven项目(二)
    eclipse配置svn 并从svn下载maven项目 配置tomcat启动maven项目
    mysql Oracle常用使用区别
    海思平台交叉编译curl支持SSL功能
    Gitlab 自动构建心得
    openssl windows平台编译库
    更换树莓派源成国内源
    使用ntp协议同步本地时间(C语言)
    网络分析纪录
  • 原文地址:https://www.cnblogs.com/Chinawolfman/p/5434041.html
Copyright © 2020-2023  润新知