mahout学习笔记

在这些算法中间并没有解决我的问题

 

我希望达到的效果是

 

在查询出相关产品的时候能够生成一张 线性图标

这样能够直观的描述 产品 在我的产品库的位置

以及能够直观的描述出热点产品 能描述 这些热点产品以及 其短期内和其他热点产品的关联

 

主要我想的是  我想在一张 向量图中间 来标识产品 这个产品之间的关联 以及其他的什么

可以有不同的字段来标识

 

 

这样我希望 通过描述出 这些 查询产品 与产品的相关度的 算法

来帮助我实现绘画出 这张图

GenericUserBasedRecommender  

 

这个是基于用户之间的 相识度来推荐产品的 一种算法

 

基于UserSimilarity   UserNeighborhood这两个实现的一种算法

 

想发的基础是说

 

通过建立一种人与人之间的相似度物品与物品之间的相似度

UserSimilarity:用于定义两个用户之间的相似度的界面

ItemSimilarity:用于定义两个项目之间的相似度的界面

            //PearsonCorrelationSimilarity:基于皮尔逊相关系数计算相似度

            //EuclideanDistanceSimilarity:基于欧几里德距离计算相似度

            //TanimotoCoefficientSimilarity:基于Tanimoto 系数计算相似度

            //UncerteredCosineSimilarity:计算 Cosine相似度

然后

UserNeighborhood:用于计算相似用户邻近度的界面

       //NearestNUserNeighborhood:对每个用户取固定数量 N的最近邻居

    //ThresholdUserNeighborhood:对每个用户基于一定的限制,取落在相似度门限内的所有用户为邻居。

 

最后  GenericUserBasedRecommender  

 这个推荐的原理 是说  通过  UserNeighborhood 算出于当前用户类似的用户

然后遍历 这些 类似用户的产品 (排除掉自己已经 存在(投票啊 购买啊什么的 排除掉自己的)) 

 

然后通过 这里有一个小技巧  使用了一个 PriorityQueue

这个queue 是一个队列

这个队列 判断 如果遍历到的产品 大于这个队列中间 最小的值 就插入队列 然后队列中最小的 出列

 

最终返回一个 list  这个list 就是推荐给 这个用户的相关的产品

 

类似代码为

 

         UserSimilarity  similarity = new PearsonCorrelationSimilarity(model);

         UserNeighborhood neighborhood = newNearestNUserNeighborhood(2,similarity, model);

Recommenderrecommender = new GenericUserBasedRecommender(model,neighborhood, similarity);

          List<RecommendedItem> recommendations =recommender.recommend(1, 2);

   for (RecommendedItem recommendation :recommendations) {

                               System.out.println(recommendation);

                }


SlopeOneRecommender

 

相关介绍

http://www.cppblog.com/AutomateProgram/archive/2010/07/19/120790.html

 

http://www.cnblogs.com/breezedeus/archive/2011/03/11/1981781.html

 

代码类似:

 

DataModelmodel=new  GenericDataModel(preferences);//DataModel的建立 DiffStoragediffStorage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED,  Long.MAX_VALUE);

                                      Recommender recommenderdef = new SlopeOneRecommender(model,Weighting.UNWEIGHTED, Weighting.UNWEIGHTED, diffStorage);  

算法基础

 

皮尔逊相关系数

 

即相关分析中的相关系数r,分别对XY基于自身总体标准化后计算空间向量的余弦夹角

 

 

皮尔逊相关系数是一种度量两个变量间相关程度的方法。它是一个介于 1 和 -1 之间的值,其中,1 表示变量完全正相关, 0 表示无关,-1 表示完全负相关。

  

Tanimoto 系数计算相似度

http://www.360doc.com/content/09/0203/14/96202_2448777.shtml

在这里Na代表用户a保存的所有链接数,Nb代表用户b保存的所有链接数,Nc则代表用户Na和Nb间共同拥有的链接数。譬如,如果我保存了10个链接,你保存了20个链接,我们共有的链接为5个,那么我们间的相似性为5/(10+20-5)=0.2。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值