📜  Mahout-推荐

📅  最后修改于: 2020-11-30 05:25:41             🧑  作者: Mango


本章介绍了流行的称为推荐的机器学习技术其机制以及如何编写实现Mahout推荐的应用程序。

建议

曾经想知道亚马逊如何提供一系列推荐产品,以吸引您对您可能感兴趣的特定产品的注意!

假设您想从亚马逊购买《行动中的Mahout》这本书:

行动中的Mahout

除所选产品外,Amazon还显示相关推荐项目的列表,如下所示。

物品

这样的推荐列表是在推荐引擎的帮助下产生的。 Mahout提供了几种类型的推荐器引擎,例如:

  • 基于用户的推荐者,
  • 基于项目的推荐者,以及
  • 其他几种算法。

Mahout推荐引擎

Mahout具有一个非分布式,非基于Hadoop的推荐程序引擎。您应该传递一个文本文档,该文档具有用户对项目的首选项。并且该引擎的输出将是特定用户对其他项目的估计偏好。

考虑一个销售消费品的网站,例如手机,配件及其配件。如果要在这样的站点中实现Mahout的功能,则可以构建推荐引擎。该引擎分析用户的过去购买数据,并据此推荐新产品。

Mahout提供的用于构建推荐引擎的组件如下:

  • 数据模型
  • 用户相似度
  • 项目相似
  • 用户社区
  • 推荐人

从数据存储中,准备好数据模型,并将其作为输入传递给推荐器引擎。推荐引擎为特定用户生成推荐。下面给出了推荐引擎的体系结构。

推荐引擎的架构

推荐引擎

使用Mahout构建推荐器

以下是开发简单推荐程序的步骤:

步骤1:创建DataModel对象

PearsonCorrelationSimilarity类的构造函数需要一个数据模型对象,该数据模型对象包含一个包含产品的Users,Items和Preferences首选项详细信息的文件。这是样本数据模型文件:

1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0

2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0

3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0

4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0

DataModel对象需要file对象,其中包含输入文件的路径。创建DataModel对象,如下所示。

DataModel datamodel = new FileDataModel(new File("input file"));

步骤2:创建UserSimilarity对象

使用PearsonCorrelationSimilarity类创建UserSimilarity对象,如下所示:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

第三步:创建UserNeighborhood对象

该对象计算给定用户之类的用户的“邻居”。有两种类型的社区:

  • NearestNUserNeighborhood-此类计算包含与给定用户最近的n个用户的邻域。 “最近”由给定的UserSimilarity定义。

  • ThresholdUserNeighborhood-此类计算包含与给定用户的相似性达到或超过特定阈值的所有用户组成的邻域。相似性由给定的UserSimilarity定义。

在这里,我们使用ThresholdUserNeighborhood并将偏好限制设置为3.0。

UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);

步骤4:创建推荐对象

创建UserbasedRecomender对象。将上面创建的所有对象传递给其构造函数,如下所示。

UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

步骤5:将项目推荐给用户

使用Recommender界面的describe()方法向用户推荐产品。此方法需要两个参数。第一个代表我们需要向其发送推荐的用户的用户ID,第二个代表要发送的推荐的数量。这是recommerder ()方法的用法:

List recommendations = recommender.recommend(2, 3);

for (RecommendedItem recommendation : recommendations) {
   System.out.println(recommendation);
 }

范例程序

下面给出了设置推荐的示例程序。为用户ID为2的用户准备建议。

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;

import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;

import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;

import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class Recommender {
   public static void main(String args[]){
      try{
         //Creating data model
         DataModel datamodel = new FileDataModel(new File("data")); //data
      
         //Creating UserSimilarity object.
         UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
      
         //Creating UserNeighbourHHood object.
         UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
      
         //Create UserRecomender
         UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
        
         List recommendations = recommender.recommend(2, 3);
            
         for (RecommendedItem recommendation : recommendations) {
            System.out.println(recommendation);
         }
      
      }catch(Exception e){}
      
   }
  }

使用以下命令编译程序:

javac Recommender.java
java Recommender

它应该产生以下输出:

RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]