http://www.douban.com/note/319219518/?type=like

win7基于mahout推荐之用户相似度计算

2013-12-03 09:19:11
 
 事情回到半年前,我想做关于推荐系统的东西,结果看到了强大的apache mahout,然后各种安装linux,hadoop,apache,mahout,taste,结局是,一个星期的努力,失败....
linux实在是hold不住啊,最后放弃了,可是最近计算用户相似度,实在是喜欢mahout 的开源,硬着头皮使用win7,+eclipse+maven+mahout0.8,下了好多东西;
网站:mahout下载网站
上面的东西基本都下载完了,可是怎么安装又成了问题,我已经在电脑上安装了maven3.1
但是直接使用maven导入到eclipse还是又问题,各种红叉,几个有用的网址:
其中遇到的问题有:
1,mvn install的时候不能下载;解决方法:安装代理:这里的原因是我使用的学校的网络可能会屏蔽一些网址,具体看一下http://www.cnblogs.com/chenying99/archive/2013/06/09/3127930.html我使用的是第三种方法。见下面详情‘

2,最简单的一个例子,http://blog.csdn.net/aidayei/article/details/6626699
按照他的方法,可以直接使用mahout 但是我没有找到怎样加入javadoc,即查看源码,所以最后放弃了~

3,使用Loglikelihood 对数似然相似度计算,因为在http://www.oschina.net/question/780962_125354
http://www.cnblogs.com/dlts26/archive/2012/06/20/2555772.html
还有:http://www.oschina.net/question/780962_130015
中分别介绍的了各种相似度计算,我的数据是用户选择参与或者不参与所以最合适的应该是使用对数似然相似度计算;
上面的3个网站是对对数似然相似度的解释。

4,代码:
  @Test
  public void testCorrelationUserSimilarity() throws Exception {
          // step:1 构建模型 2 计算相似度 3 查找k紧邻 4 构造推荐引擎
          //-Xms1024m -Xmx1024m
        DataModel model =new FileDataModel(new File("./data/core_userNo_eventNo.txt"));//文件名一定要是绝对路径
        UserSimilarity similarityLog =new LogLikelihoodSimilarity(model);
        for(int i =1;i<=500;i++){
                for(int j =i+1;j<=500;j++){
                        System.out.println("用户"+i+"和"+j+"的相似度:"+similarityLog.userSimilarity(i, j));
                }
        }
        
        UserNeighborhood neighborhood =new NearestNUserNeighborhood(2,similarityLog,model);
        Recommender recommender= new GenericUserBasedRecommender(model,neighborhood,similarityLog);
        List<RecommendedItem> recommendations =recommender.recommend(1, 2);//为用户1推荐两个ItemID
        for(RecommendedItem recommendation :recommendations){
        //System.out.println(recommendation);
        }
  }

5,结果:

win7基于mahout推荐之用户相似度计算-LMLPHP
发现之间要么没有NaN,要么相似度还是很大》。。。看懂原理吧

----------------------------------------------------
第三种:设置HTTP代理
有时候你所在的公司由于安全因素考虑,要求你使用通过安全认证的代理访问因特网或无法访问。这种情况下,就需要为Maven配置HTTP代理,才能让它正 常访问外部仓库,以下载所需要的资源。 首先确认自己无法直接访问公共的Maven中央仓库,直接运行命令ping repo1.maven.org可以检查网络。如果真的需要代理,先检查一下代理服务器是否畅通,比如现在有一个IP 地址为218.14.227.197,端口为3128的代理服务,我们可以运行telnet 218.14.227.197 3128来检测该地址的该端口是否畅通。如果得到出错信息,需要先获取正确的代理服务信息;如果telnet 连接正确,则输入ctrl+],然后q,回车,退出即可。 检查完毕之后,编辑~/.m2/settings.xml文件(如果没有该文件,则复 制$M2_HOME/conf/settings.xml)。添加代理配置如下:
<settings>
-----------
<proxies>
    <proxy>
 
      <id>my-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>218.14.227.197</host>
      <port>3128</port>
      <!--
      <username>***</username>
      <password>***</password>
      <nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
      -->
    </proxy>
  </proxies>
-----------------
</settings>
这段配置十分简单,proxies下可以有多个proxy元素,如果你声明了多个proxy元素,则默认情况下第一个被激活的proxy会生效。这里声明 了一个id为my-proxy的代理,active的值为true 表示激活该代理,protocol表示使用的代理协议,这里是http。当然,最重要的是指定正确的主机名(host 元素)和端口(port 元素)。上述XML配置中我注释掉了username、password、nonProxyHost几个元素,当你的代理服务需要认证时,就需要配置 username和password。nonProxyHost元素用来指定哪些主机名不需要代理,可以使用 | 符号来分隔多个主机名。此外,该配置也支持通配符,如*.google.com表示所有以google.com结尾的域名访问都不要通过代理

6.加入javadoc ,下载mahout-distribution-0.8-src.zip 大概12m,添加到javadoc 搞定;
    怎样关联呢?http://blog.csdn.net/moruihong/article/details/7687365

 
 
05-11 17:53