zoukankan      html  css  js  c++  java
  • 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<FastIDSet>为用户或者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等

    GenericItemSimilarity包含内部类 GenericItemSimilarity.ItemItemSimilarity

    GenericUserSimilarity包含内部类 GenericUserSimilarity.UserUserSimilarity

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

    CachingItemSimilarity

    CachingUserSimilarity

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

    内部使用 Cache<LongPair,Double> similarityCache保存相似度

    与 GenericUserSimilarity用法和区别暂时看不懂

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

    PearsonCorrelationSimilarity 皮尔逊距离

    EuclideanDistanceSimilarity 欧几里德距离

    CosineMeasureSimilarity   余弦距离(0.7变成了 UncenteredCosineSimilarity

    SpearmanCorrelationSimilarity 斯皮尔曼等级相关

    TanimotoCoefficientSimilarity 谷本相关系数

    LogLikelihoodSimilarity 一般好于TanimotoCoefficientSimilarity(不懂)

    CityBlockSimilarity基于曼哈顿距离

    相似度使用的典型用法

    UserSimilarity similarity = new CachingUserSimilarity(

    new SpearmanCorrelationSimilarity(model), model);

    对缺失数据的处理

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

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

    聚类的相似度

    ClusterSimilarity

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

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

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

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

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

  • 相关阅读:
    mybatis-config.xml详解
    过滤器与拦截器
    Tomcat 部署web 项目
    Tomcat架构
    git stash
    AbstractQueuedSynchronizer 源码解读(转载)
    Kafka 转载
    Oracle数据库TNS详解
    Oracle建表知识全面详解
    Oracle高级教程
  • 原文地址:https://www.cnblogs.com/longzhongren/p/4094978.html
Copyright © 2011-2022 走看看