• Mahout协同推荐简单实例


        上篇文章介绍了协同过滤的安装与配置,这篇找了几个协同过滤的简单例子,看一下

    Mahout给我们提供的强大的协同过滤算法。需要新建一个基于Maven的工程,下面是

    pom.xml需要导入的包。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>mahouttest</groupId>
      <artifactId>mahouttest</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
      <name>mahouttest</name>
      <url>http://maven.apache.org</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
        	<groupId>org.apache.mahout</groupId>
        	<artifactId>mahout-core</artifactId>
        	<version>0.8-SNAPSHOT</version>
        	<type>jar</type>
        	<scope>compile</scope>
        </dependency>
      </dependencies>
    

      这里我们导入的是最新的Mahout包,需要在本地的maven库中安装好。

    首先我们需要准备好测试的数据,我们就用《Mahout  in action》中的例子:

    1,101,5
    1,102,3
    1,103,2.5
    2,101,2
    2,102,2.5
    2,103,5
    2,104,2
    3,101,2.5
    3,104,4
    3,105,4.5
    3,107,5
    4,101,5
    4,103,3
    4,104,4.5
    4,106,4
    5,101,4
    5,102,3
    5,103,2
    5,104,4
    5,105,3.5
    5,106,4
    

    具体对应的关系图如下:

    下面我们用Mahout中三种不同的推荐代码来执行以下刚才给出的数据,看看Mahout中的推荐接口是

    如何使用的。

    1. 基于用户的协同推荐的代码:

    DataModel  model =new FileDataModel(new File("data/intro.csv"));
    UserSimilarity similarity =new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood =new NearestNUserNeighborhood(2,similarity,model);
    Recommender recommender= new GenericUserBasedRecommender(model,neighborhood,similarity);
    List<RecommendedItem> recommendations =recommender.recommend(1, 1);
    for(RecommendedItem recommendation :recommendations){
    	System.out.println(recommendation);
    }
    

    执行后的结果是:RecommendedItem[item:104, value:4.257081]

    2. 基于Item的协同过滤的代码:

    DataModel  model =new FileDataModel(new File("data/intro.csv"));
    ItemSimilarity similarity =new PearsonCorrelationSimilarity(model);
    Recommender recommender= new GenericItemBasedRecommender(model,similarity);
    List<RecommendedItem> recommendations =recommender.recommend(1, 1);
    for(RecommendedItem recommendation :recommendations){
        System.out.println(recommendation);
    }
    

    执行后的结果是:RecommendedItem[item:104, value:5.0]

    3. SlopeOne推荐算法

    DataModel  model =new FileDataModel(new File("data/intro.csv"));
    Recommender recommender= new SlopeOneRecommender(model);
    List<RecommendedItem> recommendations =recommender.recommend(1, 1);
    for(RecommendedItem recommendation :recommendations){
        System.out.println(recommendation);
    }
    

    执行结果是:RecommendedItem[item:105, value:5.75]

  • 相关阅读:
    linux启动流程
    监控命令
    ansible组
    公钥和秘钥
    SSH协议介绍
    Java并发编程笔记之ThreadLocal内存泄漏探究
    【死磕 Java 集合】— ConcurrentSkipListMap源码分析
    GraphX介绍
    Storm内部的消息传递机制
    JanusGraph Server配置
  • 原文地址:https://www.cnblogs.com/cstar/p/2821316.html
Copyright © 2020-2023  润新知