文档章节

基于Mahout实现协同过滤推荐算法的电影推荐系统

梨加橙
 梨加橙
发布于 2017/07/14 12:40
字数 5934
阅读 321
收藏 1

1 基于用户相似度的协同过滤推荐算法设计

基于用户的协同过滤推荐根据其他用户的观点产生对目标用户的推荐列表。协同过滤推荐系统使用统计技术搜索目标用户的若干最近邻居,然后根据最近邻居对项目的评分预测目标用户对项目的评分,产生对应的推荐列表。该算法的推荐过程可分为 3 个阶段:数据表述;发现最近邻居;产生推荐数据集。

(1)数据表述。用户评分数据可以用一个 m ∗ n阶矩阵 A(m,n)表示,m 行代表 m 个用户,n 列代表 n 个项目,第 i 行第 j 列的元素 R 代表用户 i 对项目 j 的评分。用户评分数据矩阵,如表 1-1所示。

1-1  用户-项目评分矩阵

 

Item1

Item2

……

Itemn

User1

r11

r12

……

r1n

User2

r21

r22

……

r2n

……

……

Userm

rm1

rm2

……

rmn

(2)发现最近邻居。为了找到目标用户的最近邻居,必须度量用户之间的相似性,然后选择相似性最高的若干用户作为目标用户的最近邻居。

相似度的计算是基于用户的协同过滤算法中最为关键的一步。传统的相似度度量方法有余弦相似度、修正的余弦相似度和Pearson相关系数,本文采用实践中实现效果较好的Cosine相似度来度量。

余弦相似度:在二维向量空间中,将向量根据其坐标值,绘制到多维向量空间中,对于不同的向量i和向量j求得他们的夹角,并计算夹角的余弦值,其中,该夹角为多维度向量空间中的绝对值。

我们采用余弦相似性度量用户 i 和用户 j 之间的相似性。将用户评分看作 n 维项目空间上的向量,如果用户对项目没有进行评分,则将用户对该项目的评分设为 0,设用户; i 和用户 j 在 n 维项目空间上的评分分别为向量  和 ,则用户 i 和用户 j 之间的相似性 sim(i,j为:

 

Cosine相似度算法的具体步骤如下

i. 根据评分数据Emxn,将原始矩阵整理为E’mxn;

ii. 确定向量空间维度k和样本预选取数量j;

iii.整理得到m个k维的向量组成的向量空间;

iv.冷启动情况下,遍历向量空间中的前j个向量,并于目标向量计算Cosine相似度,存储于长度为j的优选队列中;

v.遍历向量空间中的其他向量,得到新的相似度数值Cosinex,并于优选队列中的最大值Cosinemax进行比较,如果有Cosinemax < Cosinex,则用Cosinex替换,否则,不作其他操作;

vi.重复步骤 v 直到全部遍历完成;

vii.最终形成的长度为j的优选队列即为推荐算法的输入数据;

Cosine相似度算法的优势和劣势对比如表 1-2 所示。

1-2  余弦相似度算法的优势和劣势

算法

优势

劣势

Cosine相似度计算

计算简单,容易理解

计算效率高

相同趋势评分计算无误差

适合大数据量运算

不易区分同向向量的差异

(3)根据k个近邻对用户与项目评分值进行估计。设i的“最近邻居”集为Sii对项目x的评分值为Pix,那么有:

 

 

式中,sim(i,j)表示用户ij之间的相似度; i 均值和 j 均值分别表示 i 和 所有已评分的平均值。

本文通过比对查看不同的最近邻居集k的大小,对预测效果的影响,实验结果表明,当k逐渐增大时,平均绝对偏差 MAE会降低。根据选取的MovieLens数据集的大小,本文设计的基于用户相似度的协同过滤推荐系统中邻居集k的大小设为20. 

推荐系统数据库设计

本文设计的数据库主要完成对MovieLens数据集的操作,且该数据集的数据均为结构性数据,因此,再设计数据库的过程中,要充分考虑数据集的特点。

2 Mahout介绍

Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在 Mahout 中还加入了对Apache Hadoop的支持,使这些算法可以更高效的运行在云计算环境中。

3 Mahout安装

1.Mahout可以从http://mirror.bit.edu.cn/apache/mahout/ 下载 
2.将下载下来的压缩文件解压缩,将lib文件夹下的jar文件全部拷贝出,为以后的工作做准备。doc目录下的mahout-core文件夹下是mahout的API,供开发时查阅。

4 工程开发

4.1 推荐引擎简介

推荐引擎利用特殊的信息过滤(IF,Information Filtering)技术,将不同的内容(例如电影、音乐、书籍、新闻、图片、网页等)推荐给可能感兴趣的用户。通常情况下,推荐引擎的实现是通过将用户的个人喜好与特定的参考特征进行比较,并试图预测用户对一些未评分项目的喜好程度。参考特征的选取可能是从项目本身的信息中提取的,或是基于用户所在的社会或社团环境。 根据如何抽取参考特征,我们可以将推荐引擎分为以下四大类:

  • 基于内容的推荐引擎:它将计算得到并推荐给用户一些与该用户已选择过的项目相似的内容。例如,当你在网上购书时,你总是购买与历史相关的书籍,那么基于内容的推荐引擎就会给你推荐一些热门的历史方面的书籍。
  • 基于协同过滤的推荐引擎:它将推荐给用户一些与该用户品味相似的其他用户喜欢的内容。例如,当你在网上买衣服时,基于协同过滤的推荐引擎会根据你的历史购买记录或是浏览记录,分析出你的穿衣品位,并找到与你品味相似的一些用户,将他们浏览和购买的衣服推荐给你。
  • 基于关联规则的推荐引擎:它将推荐给用户一些采用关联规则发现算法计算出的内容。关联规则的发现算法有很多,如 Apriori、AprioriTid、DHP、FP-tree 等。
  • 混合推荐引擎:结合以上各种,得到一个更加全面的推荐效果。

4.2 Taste简介

Taste 是 Apache Mahout 提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。Taste 既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste 不仅仅只适用于 Java 应用程序,它可以作为内部服务器的一个组件以 HTTP 和 Web Service 的形式向外界提供推荐的逻辑。

近年,Mahout 的最新几个版本中还加入了对 Hadoop 的支持,它的目标就是利用 Hadoop 的分布式处理能力,来提高推荐算法的效率,使得实时推荐成为可能。taste向我们提供了一系列推荐算法工具类,它使得输入的数据结构规范化,并且使得程序的开发过程标准化。不仅如此,taste还为用户积极提供了相应的扩展接口,这可以让用户方便的从事自己的个性化推荐算法开发工作。taste package 的设计可以满足企业对推荐系统在性能、可扩展性、灵活性等方面的一些基本要求。

4.3 Taste工作原理

Taste 由以下五个主要的组件组成: DataModel:DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。 UserSimilarity 和 ItemSimilarity:UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,计算内容之间的相似度。 UserNeighborhood:用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。 Recommender:Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。

4.4 基于Taste构建电影推荐引擎

4.4.1 数据下载

本工程所用到的数据来源于 “MovieLens 1M Dataset” 这个数据文件夹下有三个文件:movies.dat,ratings.dat和users.dat

4.4.2 构造数据库

构建推荐引擎,可以直接使用movie.dat文件作为数据源,也可以使用数据库中的数据作为数据源,本实验中,这两种方式都实现了。

  • Movie:表示电影,包含电影的基本信息:编号、名称、发布时间、类型等等。

  • Movie Reference:表示某个用户对某个电影的喜好程度,包含用户编号、电影编号、用户的评分以及评分的时间。 至于如何将dat文件中的内容导入到MySQL数据库中,分别由本工程目录文件下的ImportMovies.java和ImportRatings.java文件实现。

4.4.3 推荐引擎实现 本工程中,实现了三种方式的推荐引擎:基于用户相似度的推荐引擎,基于内容相似度的推荐引擎,以及基于Slope One 的推荐引擎。在这些推荐引擎中,我分别使用了三种DataModel,即Database-based DataModel,File-based DataModel和In-memory DataModel。

a) 基于用户相似度的推荐引擎

public class MyUserBasedRecommender {  
    public List<RecommendedItem> userBasedRecommender(long userID,int size) {  
        // step:1 构建模型 2 计算相似度 3 查找k紧邻 4 构造推荐引擎  
        List<RecommendedItem> recommendations = null;  
        try {  
            DataModel model = MyDataModel.myDataModel();//构造数据模型,Database-based  
            UserSimilarity similarity = new PearsonCorrelationSimilarity(model);//用PearsonCorrelation 算法计算用户相似度  
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(3, similarity, model);//计算用户的“邻居”,这里将与该用户最近距离为 3 的用户设置为该用户的“邻居”。  
            Recommender recommender = new CachingRecommender(new GenericUserBasedRecommender(model, neighborhood, similarity));//构造推荐引擎,采用 CachingRecommender 为 RecommendationItem 进行缓存  
            recommendations = recommender.recommend(userID, size);//得到推荐的结果,size是推荐接过的数目  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
        return recommendations;  
    }  
  
  
    public static void main(String args[]) throws Exception {  
  
    }  
}  

在这个推荐引擎中,由于使用的是MySQLJDBCDataModel和JNDI,所以需要在tomcat的server.xml文件中添加如下信息:

<Context path="/MyRecommender" docBase="/home/huhui/develop/apache-tomcat-6.0.35/webapps/MyRecommender" debug="0" reloadable="true">  
                <Resource name="jdbc/movie" auth="Container" type="javax.sql.DataSource"  
                        username="root"  
                        password="***"  
                        driverClassName="com.mysql.jdbc.Driver"  
                        url="jdbc:mysql://localhost:3306/movie"  
                        maxActive="15"  
                        maxIdle="7"  
                        defaultTransactionIsolation="READ_COMMITTED"  
                        validationQuery="Select 1" />  
</Context>  

Mahout 中提供了基本的相似度的计算,它们都实现了 UserSimilarity 这个接口,以实现用户相似度的计算,包括下面这些常用的:

  • PearsonCorrelationSimilarity:基于皮尔逊相关系数计算相似度 (它表示两个数列对应数字一起增大或一起减小的可能性。是两个序列协方差与二者方差乘积的比值)
  • EuclideanDistanceSimilarity:基于欧几里德距离计算相似度
  • TanimotoCoefficientSimilarity:基于 Tanimoto 系数计算相似度

根据建立的相似度计算方法,找到邻居用户。这里找邻居用户的方法根据前面我们介绍的,也包括两种:“固定数量的邻居”和“相似度门槛邻居”计算方法,Mahout 提供对应的实现:

  • NearestNUserNeighborhood:对每个用户取固定数量 N 的最近邻居
  • ThresholdUserNeighborhood:对每个用户基于一定的限制,取落在相似度门限内的所有用户为邻居。

基于 DataModel,UserNeighborhood 和 UserSimilarity 构建 GenericUserBasedRecommender,从而实现基于用户的推荐策略。

b) 基于内容相似度的推荐引擎

public class MyItemBasedRecommender {  
    public List<RecommendedItem> myItemBasedRecommender(long userID,int size){  
        List<RecommendedItem> recommendations = null;  
        try {  
            DataModel model = new FileDataModel(new File("/home/huhui/movie_preferences.txt"));//构造数据模型,File-based  
            ItemSimilarity similarity = new PearsonCorrelationSimilarity(model);//计算内容相似度  
            Recommender recommender = new GenericItemBasedRecommender(model, similarity);//构造推荐引擎  
            recommendations = recommender.recommend(userID, size);//得到推荐接过  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
        return recommendations;  
    }  
}  

理解了基于用户相似读的推荐引擎,基于内容相似读的推荐引擎类似,甚至更加简单。

c) 基于Slop One的推荐引擎

基于用户和基于内容是最常用最容易理解的两种推荐策略,但在大数据量时,它们的计算量会很大,从而导致推荐效率较差。因此 Mahout 还提供了一种更加轻量级的 CF 推荐策略:Slope One。 Slope One 是有 Daniel Lemire 和 Anna Maclachlan 在 2005 年提出的一种对基于评分的协同过滤推荐引擎的改进方法,下面简单介绍一下它的基本思想。 假设系统对于物品 A,物品 B 和物品 C 的平均评分分别是 3,4 和 4。基于 Slope One 的方法会得到以下规律:

  • 用户对物品 B 的评分 = 用户对物品 A 的评分 + 1
  • 用户对物品 B 的评分 = 用户对物品 C 的评分

基于以上的规律,我们可以对用户 A 和用户 B 的打分进行预测:

  • 对用户 A,他给物品 A 打分 4,那么我们可以推测他对物品 B 的评分是 5,对物品 C 的打分也是 5。
  • 对用户 B,他给物品 A 打分 2,给物品 C 打分 4,根据第一条规律,我们可以推断他对物品 B 的评分是 3;而根据第二条规律,推断出评分是 4。当出现冲突时,我们可以对各种规则得到的推断进行就平均,所以给出的推断是 3.5。 这就是 Slope One 推荐的基本原理,它将用户的评分之间的关系看作简单的线性关系: Y = mX + b; 当 m = 1 时就是 Slope One,也就是我们刚刚展示的例子。当 m = 1 时就是 Slope One,也就是我们刚刚展示的例子。

public class MySlopeOneRecommender {  
    public List<RecommendedItem> mySlopeOneRecommender(long userID,int size){  
        List<RecommendedItem> recommendations = null;  
        try {  
            DataModel model = new FileDataModel(new File("/home/huhui/movie_preferences.txt"));//构造数据模型  
            Recommender recommender = new CachingRecommender(new SlopeOneRecommender(model));//构造推荐引擎  
            recommendations = recommender.recommend(userID, size);//得到推荐结果  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
        return recommendations;  
    }  
}  

d) 对数据模型的优化——In-memory DataModel

上面所叙述的三种推荐引擎,输入的都是用户的历史偏好信息,在 Mahout 里它被建模为 Preference(接口),一个 Preference 就是一个简单的三元组 < 用户 ID, 物品 ID, 用户偏好 >,它的实现类是 GenericPreference,可以通过以下语句创建一个 GenericPreference:

GenericPreference preference = new GenericPreference(1, 101, 4.0f);  

这其中, 1是用户 ID,long 型;101是物品 ID,long 型;4.0f 是用户偏好,float 型。从这个例子可以看出,一个 GenericPreference 的数据就占用8+8+4=20 字节,所以如果只简单实用数组 Array 加载用户偏好数据,必然占用大量的内存,Mahout 在这方面做了一些优化,它创建了 PreferenceArray(接口)保存一组用户偏好数据,为了优化性能,Mahout 给出了两个实现类,GenericUserPreferenceArray 和 GenericItemPreferenceArray,分别按照用户和物品本身对用户偏好进行组装,这样就可以压缩用户 ID 或者物品 ID 的空间。

FastByIDMap<PreferenceArray> preferences = new FastByIDMap<PreferenceArray>();  
  
  
PreferenceArray prefsForUser1 = new GenericUserPreferenceArray(3);// 注意这里的数字  
// 这里是用来存储一个用户的元数据,这些元数据通常来自日志文件,比如浏览历史,等等,不同的业务场合,它的业务语义是不一样  
  
prefsForUser1.setUserID(0, 1);  
  
prefsForUser1.setItemID(0, 101);  
prefsForUser1.setValue(0, 5.0f);//<1, 101, 5.0f>         < 用户 ID, 物品 ID, 用户偏好 >  
  
  
prefsForUser1.setItemID(1, 102);  
prefsForUser1.setValue(1, 3.0f);//<1, 102, 3.0f>  
  
  
prefsForUser1.setItemID(2, 103);  
prefsForUser1.setValue(2, 2.5f);//<1, 103, 2.5f>  
  
  
preferences.put(1l, prefsForUser1);// 在这里添加数据,userID作为key  

主要类文件之间的关系:

5 系统电影推荐功能实现

(1)选择userId = 400 时,推荐列表前5部电影界面如图4-1所示。

图4-1  userId=500,系统电影推荐界面

 

(2)选择userId = 600 时,推荐列表前5部电影界面如图4-2所示。

图4-2  userId=600,系统电影推荐界面

经过测试,推荐算法的平均绝对方差最大值为:0.8744618;推荐算法的平均绝对方差最小值为:0.8491568;平均值为:0.8667948.

经过对推荐系统进行测试,算法在推荐上具有较好的准确性,同时推荐算法在选取的MovieLens数据集的稀疏度情况下具有较好的稳定性,实验证明了基于用户相似度的协同过滤算法的有效性。该推荐系统基于用户相似度的考虑,充分的挖掘了数据之间的内部联系,与实际应用场景更切合,提升了推荐数据的可信度。

6 未来的研究方向

(1)本文的算法使用的数据集数目较少,但是在互联网时代的飞速发展下,如果算法要投入到商业环境当中,用户对产品的评价矩阵将会飞速增加,并且随着矩阵稀疏性问题的解决,计算用户或者产品的相似度时,其算法复杂度将呈几何级数增长。在这时间观念越来越强的时代,如何能够快速、准确地计算近邻并提供准确的推荐列表,将是一个非常值得研究的内容[25]。

(2)数据集的大小可以继续提高,推荐速度也需要提高,。在很多实际场景中所用到的数据集比这要大得多,之后需要进一步探讨这些推荐算法在 200M(2亿条)的数据集下的性能。这当然对推荐速度造成了很大的障碍,为了解决这一问题,计划之后引入云计算平台来进行并行计算,后期考虑将部署该个性化电影推荐系统部署到阿里云服务器ECS上。

(3)由于这个电影推荐系统是基于 MovieLens (recommended for education and development)1MB 数据集的,因此只能对数据集中的用户产生推荐,对于那些不存在的用户无法产生推荐。对此,我们可以在不改变数据集的情况下向未知用户推荐那些热门电影。或者更进一步添加一个注册界面,未知用户登陆后,将他们的行为记录到数据集中,并根据他们先前的行为为他们产生推荐。

(4)推荐结果展示过于生硬,系统并不能显示推荐电影的海报,缩略图,演员等信息,主要是由于数据集中并未包含这些信息,如果要手动搜集则工作量将是海量的,之后将考虑能不能利用 IMDB 上的电影信息。 

(5)没有尝试其它的相似度计算方法,也没有优化参数值,比如说邻居集合k的大小等等。今后需要加强实验,获得更优的推荐性能。

 

参考文献

[1]     沈键. 电子商务的个性化协同过滤推荐算法研究[D]. 上海交通大学, 2013.

[2]     张莹. 电子商务中的Web数据挖掘研究[D]. 山东科技大学, 2004.

[3]     李清. 基于MovieLens数据集的协同过滤推荐系统研究[D]. 西安电子科技大学, 2014.

[4]     孙成喜, 谢金生. 基于Web挖掘的电子商务推荐系统设计[J]. 科技纵横, 2011, 40(2):20-22.

[5]     Das A S, Datar M, Garg A, et al. Google news personalization: scalable online collaborative filtering[C]. International Conference on World Wide Web. ACM, 2007:271-280.

[6]  Wang P, Ye H W. A Personalized Recommendation Algorithm Combining Slope One Scheme and User Based Collaborative Filtering[M]. IEEE, 2009.

[7] Jia Z, Yang Y, Gao W, et al. User-Based Collaborative Filtering for Tourist Attraction Recommendations[C]// IEEE International Conference on Computational Intelligence & Communication Technology. IEEE, 2015:22-25.

[8] 刘丹, 褚蓓蓓, 郑丽娟. 基于协同过滤的个性化推荐算法研究与实践[J]. 河北大学学报, 2008, 7(2):43-48.

[9] 贾忠涛. 基于协同过滤算法的电影个性化推荐系统设计与实现[J]. 软件导刊, 2015(1):86-88.

[10] 汪琳. 基于协同过滤的电子商务个性化推荐系统的研究与实现[D]. 电子科技大学, 2011.

[11] 王义, 马尚才. 基于用户行为的个性化推荐系统的设计与应用[J]. 计算机系统应用, 2010, 19(8):29-33.

[12] Shi Y, Larson M, Hanjalic A. Exploiting user similarity based on rated-item pools for improved user-based collaborative filtering[C]// ACM Conference on Recommender Systems, Recsys 2009, New York, Ny, Usa, October. DBLP, 2009:125-132.

[13] Castagnos S, Boyer A. A Client/Server User-Based Collaborative Filtering Algorithm: Model and Implementation[C]// ECAI 2006, European Conference on Artificial Intelligence, August 29 - September 1, 2006, Riva Del Garda, Italy, Including Prestigious Applications of Intelligent Systems. DBLP, 2006:617-621.

[14] 孙慧峰. 基于协同过滤的个性化Web推荐[D]. 北京邮电大学, 2012.

[15] 迟轩. 基于协同过滤算法的推荐系统框架设计与实现[D]. 上海交通大学, 2013.

[16] 周鲲. 基于用户相似度的协同过滤推荐算法研究[D]. 西南交通大学, 2016.

[17] 荣辉桂, 火生旭, 胡春华,等. 基于用户相似度的协同过滤推荐算法[J]. 通信学报, 2014(2):16-24.

[18] 耿守阔, 陆晨. 协同过滤算法的研究[J]. 物联网技术, 2014(5):60-62.

[19] 柯良文, 王靖. 基于用户相似度迁移的协同过滤推荐算法[J]. 微型机与应用, 2014(14):71-74.

[20] 王鹏, 王晶晶, 俞能海. 基于核方法的User-Based协同过滤推荐算法[J]. 计算机研究与发展, 2013, 50(7):1444-1451.

[21] 成军. 面向电子商务的协同过滤推荐算法与推荐系统研究[D]. 南京理工大学, 2013.

[22] 宋涛. 协同过滤推荐算法的优化及其实证系统实现[D]. 北京交通大学, 2016.

[23] Shi X Y, Ye H W, Gong S J. A Personalized Recommender Integrating Item-Based and User-Based Collaborative Filtering[M]. IEEE Computer Society, 2008.

[24] Zhao Z D, Shang M S. User-Based Collaborative-Filtering Recommendation Algorithms on Hadoop[C]// Third International Conference on Knowledge Discovery and Data Mining. IEEE Computer Society, 2010:478-481.

[25] Sun Z, Luo N. A New User-Based Collaborative Filtering Algorithm Combining Data-Distribution[C]// Information Science and Management Engineering. IEEE, 2010:19-23.

© 著作权归作者所有

共有 人打赏支持
梨加橙
粉丝 31
博文 56
码字总数 43402
作品 0
南昌
后端工程师
探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(二)

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

东方神剑
2014/11/13
0
0
推荐系统思考小结(基于Mahout)

最近一直学习Mahout和推荐引擎相关的知识,一直想搞清楚,什么样的推荐系统的架构才是合理,既能对海量数据进行复杂运算,又能及时响应做出推荐。在网上发现一篇对推荐系统结构讲解的很好的文...

Breath_L
2012/06/03
0
5
探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤

集体智慧和协同过滤 什么是集体智慧 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用...

Endeavour
2015/08/12
0
0
深入推荐引擎相关算法 - 协同过滤

在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No....

IBMdW
2011/03/25
0
0
hadoop 推荐引擎资料记录

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

七水禾
2014/03/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Snackbar源码分析

目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Snackbar属性进行设置 2.3 Snackbar的show显示...

潇湘剑雨
36分钟前
1
0
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储

分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储 摘要: 原创出处 http://www.iocoder.cn/Elastic-Job/job-storage/ 本文基于 Elastic-Job V2.1.5 版本分享 1. 概述 本文主要分享...

DemonsI
42分钟前
1
0
jmockit demo

1、@Mocked,标识一个指定的class的实例或被测对象的参数被Mock掉。 2、@Capturing,标识一个被Mock的对象,从该对象派生的子类也被Mock了。 3、@Injectable,标识只有一个指定的被测对象的内...

我的老腰啊
56分钟前
1
0
内容换行

用 <textarea>13611112222 这里想换行 13877779999</textarea><textarea>13611112222 13877779999</textarea>...

小黄狗
57分钟前
1
0
学习设计模式——单例模式

1. 认识单例模式 1. 定义:一个类中仅有一个实例,并提供一个访问它的全局访问点。 2. 结构:仅一个Singleton类,其中包含一个static类变量,而类变量的类型就是Singleton类,而且Singleton...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部