mahout(Taste)初探


mahout是 Apache Software Foundation (ASF)开发的一个开源项目,主要包括了一些经典机器学习算法的实现,并且通过对hadoop的支持可以很容易的拓展到云上,对mahout的关注主要是因为它收纳了Taste框架。

一、关于安装

有两种方式可以使用mahout,一种是直接安装:按照JDK->maven->mahout->hadoop的顺序,参照http://www.docin.com/p-239482860.html,这个过程我只完成了一半,因为后来发现mahout可以直接在eclipse里集成,非常简单->(http://www.cnblogs.com/dlts26/archive/2011/09/13/2174889.html)

二、taste实施流程

在《mahout in action》里有这么一张图:

 

可以看到mahout实现推荐的一个大致流程,首先将数据组织成DataModel格式,在此基础上计算UserSimilarity,并形成UserNeighborhood记录,之后把这些数据塞进现成的recommender接口里就可以得到相应的推荐结果,下面是一个实例

 

class RecommenderIntro {
public static void main(String[] args) throws Exception {
    DataModel model = new FileDataModel(new File("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);
    } 
} 
} 


只有几行代码,感觉流程很是简单,但是应用到实际环境中其实并不容易,我现在看到的难点起码有以下几个:

 

1. 数据格式。大部分网站的数据应该是存在数据库里了,那么mahout所要求的数据model的格式是DataModel,这中间需要经历一个转换,好在已经有现成的MySQLJDBCModel ,但是其默认是通过JNDI方式查找数据源,如果想单独加载数据库运行一个推荐算法,就要通过这种方式

 

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setServerName("my_database_host");
dataSource.setUser("my_user");
dataSource.setPassword("my_password");
dataSource.setDatabaseName("my_database_name");
JDBCDataModel dataModel = new MySQLJDBCDataModel(
dataSource, "my_prefs_table", "my_user_column", 
"my_item_column", "my_pref_value_column");

这种连接方式效率很成问题,肯定不能用在生产环境,而我们自己直接实现DataModel接口所要实现的方法又过多(详情可见mahout api ,https://builds.apache.org//job/Mahout-Quality/javadoc/)比如生产用的hibernate或ibatis,如何生成mahout需要的model,要好好考虑一下。

 

 

2. 计算效率。mahout是通过DataModel形式对preference记录存储做了优化的,但是具体在应用中的表现,如内存占用率、响应速度还需要进一步考察,这里面涉及到缓存的使用策略。

 

3. 验证。 要构建一个靠谱的推荐框架,验证这一步肯定是必不可少的。这里就有一个推荐系统一直纠结的问题了:到底什么样的推荐结果是好的,如果根据用户以往的评分记录进行推荐,那么那些没有评分的item就一定代表用户不喜欢么,恐怕未必。所以这里就有一个对“好”的定义的策略问题,这直接影响到推荐系统的效果。

 

4.冷启动。这也是很纠结的问题了,用户第一次登陆系统,无推荐记录,你推荐给他什么。看了一些相关文章,各系统的解决方案不同,有推荐当前热点的,也有强制用户注册时选择偏好信息的,不一而足,这也是一个需要考虑的问题。

 



你可能感兴趣的:(框架,Mahout)