协同过滤算法 - Java 算法库 - myhout

如何使用过滤算法?

        5.3.1 这里我们介绍的是用java语言编写的一个算法库 :myhout,它支持协同过滤,在使用的时候需要注意输入与输出的参数即可。

        5.3.2 myhout:是一个算法库,集成了很多算法,它提供一些可扩展的机器学习领域经典算法的实现,让我们开发人员直接调用使用即可,不需要去编写算法的底层,很方便,但是如果是很特殊的要求,功能很新颖的模块,还是需要去自己编写算法的底层。Myhout最早是基于mr程序的,但是现在已经基于spark了,

        5.3.3 myhout能做什么?

推荐引擎:

在目前采用的机器学习技术中,推荐引擎是最容易被一眼认出来的,也是应用范围最广的。服务商或网站会根据你过去的行为为你推荐书籍、电影或文章。

在部署了推荐系统的电子商务中,亚马逊大概是最有名的。亚马逊基于用户的交易行为和网站记录为你推荐你可能喜欢的商品。

而facebook这样的社交网络则利用推荐技术为你找到最可能尚未关联的朋友。

同时,这一技术也被各大知名国内网站所使用,如腾讯、人人、京东、淘宝。

聚类:

顾名思义,物以类聚,人以群分。聚类是把具有共同属性的物品进行归类。

Google news使用聚类技术通过标题把新闻文章进行分组,从而按照逻辑线索来显示新闻,而并非给出所有新闻的原始列表。

分类:

分类技术决定了一个事物多大程度上从属于某种类别或类型,或者多大程度上具有或者不具有某些属性。与聚类一样,分类无处不在,但更多隐身于幕后。通常这些系统会考察类别中的大量实例,来学习推到出分类的规则。

雅虎邮箱基于用户以前对正常右键和垃圾邮件的报告,以及电子右键自身的特征,来判别到来的消息是否是垃圾邮件。

    5.4 myhout协同过滤算法的简单使用步骤(离线情况计算分析):

        5.4.1 创建一个java maven项目,导入相关依赖

        5.4.2 这里我们主要举例列出操作myhout的类,其他的不做多余的说明

public static void main(String[] args) throws Exception {
    //1) 准备数据
    File file = new File("用户相关喜好数据的地址");
    //2) 将数据加载到内存中,
    DataModel dataModel = new GroupLensDataModel(file);
    //3) 计算相似度,相似度算法有很多种,欧几里得、皮尔逊等等。
    UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
    //4) 计算最近邻域,邻居有两种算法,基于固定数量的邻居和基于相似度的邻居,这里使用基于固定数量的邻居
    UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(100, similarity, dataModel);
    //5) 构建推荐器,协同过滤推荐有两种,分别是基于用户的和基于物品的,这里使用基于用户的协同过滤推荐
    Recommender recommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, similarity);

    //给用户ID等于5的用户推荐10个相关喜好商品或者产品
    List<RecommendedItem> recommendedItemList = recommender.recommend(5, 10);
    //打印推荐的结果
    System.out.println("使用基于用户的协同过滤算法");
    System.out.println("为用户5推荐10个产品");
    for (RecommendedItem recommendedItem : recommendedItemList) {
        System.out.println(recommendedItem);
    }
    long start = System.currentTimeMillis();
    recommendedItemList = recommender.recommend(11, 10);
    System.out.println(System.currentTimeMillis()-start);
}

在真实的开发环境中,通过myhout的这一步计算之后得到的推送结果集是不能直接用在项目里面的,还需要对推送的产品进行校验,去重排序等等。然后将这个打包上传到hdfs,执行命令:hadoop jar +(包名+驱动类路径)--input/sanbox/movie/10M.txt --output /sanbox/movie/r -s SIMILARITY_LOGLIKELIHOOD

--input(path) : 存储用户偏好数据的目录,该目录下可以包含一个或多个存储用户偏好数据的文本文件;
--output(path) : 结算结果的输出目录
--numRecommendations (integer) : 为每个用户推荐的item数量,默认为10
--usersFile (path) : 指定一个包含了一个或多个存储userID的文件路径,仅为该路径下所有文件包含的userID做推荐计算 (该选项可选)
--itemsFile (path) : 指定一个包含了一个或多个存储itemID的文件路径,仅为该路径下所有文件包含的itemID做推荐计算 (该选项可选)
--filterFile (path) : 指定一个路径,该路径下的文件包含了[userID,itemID] 值对,userID和itemID用逗号分隔。计算结果将不会为user推荐 [userID,itemID] 值对中包含的item (该选项可选)
--booleanData (boolean) : 如果输入数据不包含偏好数值,则将该参数设置为true,默认为false
--maxPrefsPerUser (integer) : 在最后计算推荐结果的阶段,针对每一个user使用的偏好数据的最大数量,默认为10
--minPrefsPerUser (integer) : 在相似度计算中,忽略所有偏好数据量少于该值的用户,默认为1
--maxSimilaritiesPerItem (integer) : 针对每个item的相似度最大值,默认为100
--maxPrefsPerUserInItemSimilarity (integer) : 在item相似度计算阶段,针对每个用户考虑的偏好数据最大数量,默认为1000
--similarityClassname (classname) : 向量相似度计算类
outputPathForSimilarityMatrix :SimilarityMatrix输出目录
--randomSeed :随机种子 -- sequencefileOutput :序列文件输出路径
--tempDir (path) : 存储临时文件的目录,默认为当前用户的home目录下的temp目录
--threshold (double) : 忽略相似度低于该阀值的item对
查看我们得到的结果文件,可以得到类似于(用户:该用户推荐产品结果集)这样的数据之后存储到数据库(redis、HBASE)中。

在实际开发模式中存储结果集的数据库(redis、HBASE)一般情况下要存储离线计算的推荐数据、用户与用户之间的相似度数据、物品与物品之间相似度的数据、相关产品(商品、视频、音频、新闻文档等等)的信息(标题、类别、属性等等)、用户的信息(基础信息、点击流信息、购买等等),这样当我们一个用户在前端访问的时候,根据用户的id,开发好的推荐引擎去redis或者HBASE中查找已经计算完毕的相关喜好产品结果集,在这里要对推送的产品进行校验,去重排序、产品状态是否上线、产品种类的丰富性之后返回结果给用户(json/xml),从而实现相关推送这个功能。
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值