Mahout-推荐入门介绍
更新时间 2021-09-19 16:59:04    浏览 0   

TIP

本文主要是介绍 Mahout-推荐入门案例 。

# mahout 推荐系统 之 hello world

# 前言

推荐系统的输入是必要的 ,这些数据是推荐的基础。因为非常熟悉的推荐系统引擎将item(物品)推荐给user(用户),很容易的认为偏好(Preference)是user和item之间的联系。偏好包含了一个user ID和一个item ID,通常情况下,一个数值代表了user对item偏好的强度。Mahout中ID都是数值,实际上是整数(lang型)。偏好值可以是任何值,值越大代表这正向偏好 越大。例如,这些值可能是1到5的打分,user将1给于他不喜欢的,5给他很喜欢的。

基础数据:intro.csv

1,101,5.0
1,102,3.0
1,103,2.5

2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0

3,101,2.5
3,104,4.0
3,105,4.5
3,107,5.0

4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0

5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0

用户1和用户5具有相同的喜好。他们都喜欢101这本书,对102的喜欢弱一些,对103的喜欢更弱。同理,用户1和4具有相同的兴趣,他们都喜欢101和103,没有信息显示用户4喜欢102。另一方面,用户1和用户2的兴趣好像正好相反,用户1喜欢 101,但用户2讨厌101,用户1喜欢103而用户2正好相反。用户1和3的交集很少,只有101这本书显示了他们的兴趣。

# 简单的推荐程序demo,如下:

package com.xh.recommender;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
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.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

/**
 * @author xiaohe
 * @version V1.0.0
 * @Description: mahout 推荐简介
 * @date: 2018-8-20 20:51
 * @Copyright: 
 */
public class RecommenderIntro {

    private static Logger logger = LoggerFactory.getLogger(RecommenderIntro.class);

    public static void main(String[] args) throws Exception {
        final String filePath = "recommend/intro.csv";
        URL url = RecommenderIntro.class.getClassLoader()
                .getResource(filePath);
        File modelFile = new File(url.getFile());
        if(!modelFile.exists()) {
            System.err.println("Please, specify name of file, or put file 'input.csv' into current directory!");
            System.exit(1);
        }
        /**
         *
         * 装载  数据  文件
         * DataModel 实现储存并为计算机提供所需的所有偏好、用户和物品数据
         *
         */
        DataModel model = new FileDataModel(modelFile);
        /**
         * UserSimilarity 实现给出两个用户之间的相似度
         * 可以从多种可能度量或计算机中选一种作为依赖
         */
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);

        // UserNeighborhood 实现   明确与给定用户最相似的一组用户
        UserNeighborhood neighborhood =
                new NearestNUserNeighborhood(2, similarity, model);

        /**
         *
         * 生成推荐引擎
         * Recommender 合并所有的组件为用户推荐物品
         *
         */
        Recommender recommender = new GenericUserBasedRecommender(
                model, neighborhood, similarity);
        // 为用户1 推荐2件  物品
        List<RecommendedItem> recommendations =
                recommender.recommend(1, 2);

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

    }

}

# 项目结构如图:

wxmp

# 附上pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<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>com.xh</groupId>
    <artifactId>springboot-mahout</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>springboot-mahout Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.mahout/mahout-core -->
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-core</artifactId>
            <version>0.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>springboot-mahout</finalName>
    </build>
</project>

# 参考文章

  • https://blog.csdn.net/qq_37502106/article/details/82054167
更新时间: 2021-09-19 16:59:04
  0
手机看
公众号
讨论
左栏
全屏
上一篇
下一篇
扫一扫 手机阅读
可分享给好友和朋友圈