mysql数据推荐算法_Mahout推荐算法基础

转载自(http://www.geek521.com/?p=1423)

Mahout推荐算法分为以下几大类

GenericUserBasedRecommender

算法:

1.基于用户的相似度

2.相近的用户定义与数量

特点:

1.易于理解

2.用户数较少时计算速度快

GenericItemBasedRecommender

算法:

1.基于item的相似度

特点:

1.item较少时就算速度更快

2.当item的外部概念易于理解和获得是非常有用

SlopeOneRecommender(itemBased)

算法:

1基于SlopeOne算法(打分差异规则)

特点

速度快

需要预先计算

当item数目十分少了也很有效

需要限制diffs的存储数目否则内存增长太快

SVDRecommender (item-based)

算法

基于支持向量机(item的特征以向量表示,每个维度的评价值)

特点

需要预计算

推荐效果佳

KnnItemBasedRecommender (item-based)

类似于GenericUserBasedRecommender 中基于相似用户的实现(基于相似的item)

与GenericItemBasedRecommender 的主要区别是权重方式计算的不同(but, the weights are not the results of some similarity metric. Instead, the algorithm calculates the optimal set of weights to use between all pairs of items=>看的费劲)

TreeClusteringRecommender

算法

基于树形聚类的推荐算法

特点

用户数目少的时候非常合适

计算速度快

需要预先计算

基于模型的推荐算法、基于满意度得推荐算法(未实现)

Mahout中的数据输入

DataModel

以下包含

GenericDataModel

数据接口类 基于内存

内部使用FastByIDMap 保存PreferenceArray,在PreferenceArray内保存用户->Item的评价值

GenericBooleanPrefDataModel.

基于内存的数据接口类

但是无用户偏好值

使用FastByIDMap为用户或者Item保存相关的Item或者用户。

FileDataModel

基于文件的数据接口内,内部使用GenericDataModel 保存实际的用户评价数据

增加了压缩文件(.zip .gz)等文件类型的支持

支持动态更新(更新文件文件名必须保存为一定的格式 例如 foo.txt.gz 后续更新文件必须为foo.1.txt.gz)

查了以下代码 好像是自定义时间间隔后可以更新,但是好像是全部更新(以后看代码)

JDBCDataModel

基于数据库的数据接口 目前已经实现MySQLJDBCDataModel(支持MySQL 5.x)可以使用MysqlDataSource生成MySQLJDBCDataModel

注:0.7版本里面没有找到MySQLJDBCDataModel类多了一个MySQLJDBCIDMigrator

不知道关系如何

PlusAnonymousUserDataModel.

用于匿名用户推荐的数据类 将全部匿名用户视为一个用户(内部包装其他的DataModel类型)

Mahout中的相似度计算

主要按照基于User,基于Item等

以内存方式保存相似度计算结果 使用FastByIDMap>保存计算结果

以cache方式保存相似度计算结果防止每次请求是重复计算

内部使用 Cache similarityCache保存相似度

Mathout中实现的基于不同算法相似度度量的:

PearsonCorrelationSimilarity 皮尔逊距离

EuclideanDistanceSimilarity 欧几里德距离

CosineMeasureSimilarity   余弦距离(0.7变成了 UncenteredCosineSimilarity)

SpearmanCorrelationSimilarity 斯皮尔曼等级相关

TanimotoCoefficientSimilarity 谷本相关系数

LogLikelihoodSimilarity 一般好于TanimotoCoefficientSimilarity(不懂)

相似度使用的典型用法

UserSimilarity similarity = new CachingUserSimilarity(

new SpearmanCorrelationSimilarity(model), model);

对缺失数据的处理

PreferenceInferrer 数据丢失或者数据太少时可能用到 具体实现有 AveragingPreferenceInferrer 以平均值填充缺失数据

一般来说PreferenceInferrer除了增加计算量对推荐结果无任何影响(缺失值根据已有数据得出)所以一般只用于研究领域。

聚类的相似度

ClusterSimilarity

聚类的相似度用于两个不同的聚类之间的距离(类似坐标系内的距离)

目前聚类之间的距离计算只包含以下两个实现(暂时没有更好的实现算法)

NearestNeighborClusterSimilarity  计算两个聚类中所有项距离中的最小距离

FarthestNeighborClusterSimilarity  计算两个聚类中所有项距离中的最大距离

做个小推广:程序员经常久坐,颈椎毛病比较多,特别推荐ventry颈椎保健枕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。首先,Mahout是一个基于Hadoop的机器学习框架,可以用于实现各种机器学习算法,包括协同过滤推荐算法。Mahout中的推荐算法实现了多种模型,包括基于用户的协同过滤、基于物品的协同过滤和隐式反馈等。 而你的问题是如何使用Mahout 0.9版本中的ReloadFromJDBCDataModel连接MySQL,并采用SVD推荐算法。下面是具体的步骤: 1. 首先,你需要在MySQL中创建一个数据表,用于存储用户和物品之间的评分数据数据表至少需要包含三个字段:用户ID、物品ID和评分值。可以使用以下SQL语句创建数据表: ``` CREATE TABLE ratings ( user_id INT NOT NULL, item_id INT NOT NULL, rating FLOAT NOT NULL, PRIMARY KEY (user_id, item_id) ); ``` 2. 然后,在Mahout中使用ReloadFromJDBCDataModel类连接MySQL数据库。具体的代码如下: ``` String url = "jdbc:mysql://<host>:<port>/<database>"; String user = "<username>"; String password = "<password>"; DataModel model = new ReloadFromJDBCDataModel(url, user, password); ``` 其中,<host>是MySQL服务器的主机名或IP地址,<port>是MySQL服务器的端口号,<database>是要连接的数据库名,<username>和<password>是登录MySQL数据库所需的用户名和密码。 3. 接下来,使用SVD推荐算法对评分数据进行建模和预测。具体的代码如下: ``` RecommenderBuilder builder = new SVDRecommenderBuilder(); Recommender recommender = builder.buildRecommender(model); ``` 其中,RecommenderBuilder是一个接口,用于创建推荐器模型。SVDRecommenderBuilder是Mahout中实现SVD推荐算法的类。buildRecommender()方法用于创建推荐器模型。 4. 最后,使用推荐器模型进行预测。具体的代码如下: ``` int userId = <user_id>; int numRecommendations = <num_recommendations>; List<RecommendedItem> recommendations = recommender.recommend(userId, numRecommendations); ``` 其中,<user_id>是要为其进行推荐的用户ID,<num_recommendations>是要生成的推荐物品数量。recommend()方法用于生成推荐结果,返回一个RecommendedItem列表,每个RecommendedItem对象包含一个物品ID和一个预测评分值。 以上就是使用Mahout 0.9版本中的ReloadFromJDBCDataModel连接MySQL并采用SVD推荐算法的具体步骤。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值