文档章节

mahout demo

xiaomin0322
 xiaomin0322
发布于 06/20 17:12
字数 360
阅读 7
收藏 0

package com.datamine.CollaborativeFiltering.mysql;
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.EuclideanDistanceSimilarity;
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;

import java.util.ArrayList;
import java.util.List;

public class ItemRecommender extends RecommenderBase {

    public static ArrayList<Integer> recommend(long uid, int count) throws Exception {
        DataModel dataModel = getDataModel();

        UserSimilarity userSimilarity = new EuclideanDistanceSimilarity(dataModel);
        UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(3, userSimilarity, dataModel);
        UserBasedRecommender userBasedRecommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, userSimilarity);

        List<RecommendedItem> recommendations = userBasedRecommender.recommend(uid, count);
        ArrayList<Integer> list = new ArrayList<>();
        for (RecommendedItem recommendation : recommendations) {
            list.add((int) recommendation.getItemID());
        }

        return list;
    }

    
    public static void main(String[] args) {
        
    }
}

package com.datamine.CollaborativeFiltering.mysql;
import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
import org.apache.mahout.cf.taste.impl.model.jdbc.ReloadFromJDBCDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.JDBCDataModel;

public class RecommenderBase {

    public static DataModel getDataModel() throws TasteException {
        MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();
        dataSource.setURL("jdbc:mysql://localhost/drupal7?user=USER&password=PASSWORD");

        JDBCDataModel dm = new MySQLJDBCDataModel(dataSource, "rec_vote", "uid", "nid", "vote", null);
        DataModel reloadFromJDBCDataModel = new ReloadFromJDBCDataModel(dm);

        return reloadFromJDBCDataModel;
    }

}

package com.datamine.CollaborativeFiltering.mysql;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
import java.util.ArrayList;
import java.util.List;

public class SimilarityRecommender extends RecommenderBase {

    public static ArrayList<Integer> recommend(long nid, int count) throws TasteException {
        DataModel dataModel = getDataModel();

        ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
        GenericItemBasedRecommender genericItemBasedRecommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);

        List<RecommendedItem> recommendations = genericItemBasedRecommender.mostSimilarItems(nid, count);
        ArrayList<Integer>list = new ArrayList<>();
        for (RecommendedItem recommendation : recommendations) {
            list.add((int) recommendation.getItemID());
        }

        return list;
    }

}

package com.datamine.CollaborativeFiltering;

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

import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;

/**
 * 基于物品的协同过滤
 * @author Administrator
 *
 */
public class ItemCF2 {

    final static int RECOMMENDER_NUM = 3; //推荐物品数目
    
    public static void main(String[] args) throws Exception {
        
        File file = new File("data/CF.data");
        
        //构造数据模型
        DataModel model = new FileDataModel(file); 
        
        //使用皮尔松算法 计算内容之间的相似度
        ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(model); 
        
        //构造推荐引擎 基于物品的推荐
        GenericItemBasedRecommender r = new GenericItemBasedRecommender(model, itemSimilarity);
        
        //迭代获取用户的id
            //获得推荐结果,给userID推荐howMany个Item
            List<RecommendedItem> list = r.mostSimilarItems(1580, RECOMMENDER_NUM);
            for(RecommendedItem items : list){
                System.out.printf("(%s,%f)",items.getItemID(),items.getValue());
            }
            System.out.println();
        
    }
    
}
 

© 著作权归作者所有

共有 人打赏支持
xiaomin0322
粉丝 99
博文 3539
码字总数 164915
作品 0
上海
架构师
Mahout之Taste Webapp实战

Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚...

一枚Sir
2014/06/23
0
0
hadoop 推荐引擎资料记录

在hadoop上做推荐系统,主要的开源软件是mahout,不仅实现了基于协同的算法,还实现了很多机器学习算法。很有学习价值。 官网地址:http://mahout.apache.org 简介:http://www.ibm.com/deve...

七水禾
2014/03/24
0
0
探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(二)

基于 Apache Mahout 实现高效的协同过滤推荐 Apache Mahout 是 Apache Software Foundation (ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方...

东方神剑
2014/11/13
0
0
探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类(四)

狄利克雷聚类算法 前面介绍的三种聚类算法都是基于划分的,下面我们简要介绍一个基于概率分布模型的聚类算法,狄利克雷聚类(Dirichlet Processes Clustering)。 首先我们先简要介绍一下基于...

东方神剑
2014/11/13
0
0
Mahout In Aciotn

Mahout In Aciotn 作者:Jack Zhang 来自开拓者部落 ,qq群:248087140,欢迎加入我们! 本文欢迎转载,转载请注明出处 http://my.oschina.net/u/1866370/blog/287907 i.Java和IDE(略) ii...

开拓者-2017
2014/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

驰狼课堂

http://www.chilangedu.com/

求是科技
11分钟前
0
0
jumpserver 报错"Incorrect string value

申明 本文所有内容参考自jumpserver记录命令无法入库问题 #1773 简介 jumpserver 1.4.0在jumpserver.log中大量报错,错误日志 File "/opt/jumpserver/apps/terminal/api.py", line 246, i...

zhnxin
17分钟前
1
0
用户管理相关配置文件及命令

9月19日任务 2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 扩展知识 实用小工具 简单命令行下实现Linux/Windows文件互传 前提:使用远程工具Xsh...

robertt15
35分钟前
0
0
presto 架构

presto 介绍 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 是一种Massively parallel processing (MPP)架构,多个节点管道式执⾏ ⽀持任意数据源(通过扩展式Connect...

张欢19933
35分钟前
0
0
Ajax技术应用

1. 相关概述 1. ajax:即异步js与xml,可以实现客户端与服务端之间数据的异步交互。对于普通的B/S 模式是采用的同步方式,即一次请求必须等待一次服务器响应完成,而异步则是客户端发送请求后...

江左煤郎
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部