推荐系统学习07-Waffles

介绍

Waffles 英文原意是蜂蜜甜饼,在这里却指代一个很强大的机器学习的开源工具包。

Waffles里包括的算法特别多。涉及机器学习的方方面面,推荐系统位于当中的Waffles_recommend  tool,大概仅仅占整个Waffles的1/10的内容,其他还有分类、聚类、採样、降维、数据可视化、音频处理等许很多多工具包,预计能与之媲美的也就数Weka了。

你能够在waffles看到关于这个工具的具体内容。

你还能够訪问waffles的github网站。

waffles与其它的机器学习工具的差别:

  • 仅仅给你提供实用的工具,让你能够任意使用。
  • waffles是在CC0(公共领域)证书下公布的,所以它没有不论什么法律限制。
  • waffles apps是薄封装的C++类库。
  • waffles对脚本非常友好。而且被设计成能够和自己主动化流程使用。
  • waffles工具非常高速。由于它们是以本地应用程序被开发的。
  • waffles的主要库没有外部依赖(除了标准C++库)。
  • waffles不依赖不论什么平台或虚拟机,所以它不会限制你的分配方案。
  • waffles的算法能够自己主动调整自己的參数。
  • 全部的学习者都支持多维标签。
  • waffles的工具自己主动过滤数据类型,所以你能够使用不论什么有监督的学习进行分类或回归,而且不须要操心输入模式的数据类型。

Waffles的命令应用程序

waffles提供下面命令行应用程序,每一个都包括运行机器学习操作的几个工具:

  • waffles_audio包括处理音频文件的工具。
  • waffles_cluster包括工具的聚类。
  • waffles_dimred包括用于降维。属性选择等等的工具
  • waffles_generate包括样本分布、样本管,并产生某些类型数据的工具。
  • waffles_learn包括监督学习工具。
  • waffles_plot包括数据可视化工具。
  • waffles_recommend包括协同过滤。推荐系统,归一化等工具。
  • waffles_sparse包括从稀疏数据。文档分类等学习的工具。
  • waffles_transform包括操纵数据。乱排,交换柱、矩阵运算等工具。

Building on Linux

尽管项目主页也提供了在windows上使用的办法。可是我在尝试后并没有成功。

假设你能在windows上执行出几个demo,那就恭喜你啦!

所以这里还是在linux上做測试,和曾经一样,我用的是Ubuntu14.04。

想要编译代码,你的linux必须安装有g++,而且尽量版本号高一些,4.6及以上。

假设你没有g++,能够按照以下安装。

假设你使用的是Debian或Ubuntu。使用这个命令:

  sudo apt-get install g++ make

假设你使用redhat或者fedora,使用这个命令:

  sudo yum install g++ make

把waffles上传至linux(或者你能够从git上直接clone。

使用这个命令:git clonehttps://github.com/mikegashler/waffles.git),进入目录:

  cd waffles/src

然后输入:

  sudo make install

假设出现一大堆编译的语句,那么恭喜你编译成功了。

按道理来说编译过程就是这么简单,可是我在初期尝试的过程出错了。错误例如以下:

make -j 5 -C GClasses install

make[1]: Entering directory /home/ckf/waffles-master/src/GClasses‘make: Entering directory/home/ckf/waffles-maste/src/GClasses‘

rm -f ../../lib/libGClassesDbg.a

make: *** No rule to make target ../../obj/GClasses/dbg/G3D.o‘, needed by../../lib/libGClassesDbg.a‘. Stop.

make: *** Waiting for unfinished jobs....

make: Leaving directory /home/ckf/waffles-master/src/GClasses‘make[1]: *** [install] Error 2make[1]: Leaving directory/home/ckf/waffles-master/src/GClasses‘

make: *** [INSTALL_GClasses] Error 2

我在github上询问了开发者。结果人家说在他的Ubuntu14.04上尝试了一遍并没有出错,于是我依照他的步骤又试了一次:

$ git clone https://github.com/mikegashler/waffles.git

$ cd waffles/src

waffles/src$ sudo make install

非常尴尬。还是出错。然后又一个人回答我说在他的Ubuntu14.04上尝试也没有出错。这里不得不多说一句,这些老外真的非常热心。非常感谢他们。

最后还是第一位开发者提供了可行的解决的方法(事实上在项目主页的Building on Linux上也有,就是另外一种办法):

  $ cmake

这个命令会生成全新的和之前不同的makefiles。然后再输入:

  $ make

来编译。

这样操作之后,没有错误,编译正常。

cmake步骤例如以下:

make编译步骤例如以下:

demo执行

接下来给大家执行几个demo。

hello_console

进入src文件夹,输入‘make’进行编译。然后会生成一个bin文件夹,进入bin文件夹执行生成的那个文件:

其它几个demo都差点儿相同,这里不赘述了。

recommender system

假设你在之前就试图尝试这个demo。会有编译错误,可是如今尝试没有错误了。原因是我在github上询问开发者是否还有recommender system的样例时。他们回答说有。可是有编译错误(这个错误不知怎么通过了他们的測试)。可是已经立刻修复了(他们显然是尝试了一遍才发现了bug。然后在第一时间改动了)。

所以假设你如今訪问项目的github主页。你会发现demos的文件夹在不久前被改动过。而其它几个文件夹却是半年甚至两年没改动过了。改动的就是那个编译错误(刚刚看了下,他们又在demos里添加了一些功能)。

如今測试一下recommender system的样例。

recommender system在demo文件夹的名字是community。相同进入src文件夹进行编译,然后在生成的bin文件夹中执行:

过一会之后会在浏览器中出现例如以下界面:

在以下会有创建账号的超链接,点击进入:

第一个账号请取名为root,这样才干够添加新的商品:

这个推荐系统假设想要全然显示出效果,你须要加入足够多的topic而且邀请一些朋友来注冊账号。然后不停的评分。

官方给出的效果图例如以下:

总结

前文一共提到过9个开源的推荐系统。可是我并没有所有尝试。几个尝试的也没有深入研究它们内部的算法和代码。一方面是由于自身水平不够,还有一方面也是由于毕设没有非常多时间。

希望有研究的人能给我一些意见和建议,让我能继续学习下去。

关于我没有尝试的几个推荐系统,当中Mahout是基于hadoop的推荐系统,可是因为近年来人们研究的方向開始转向spark(好火呀这个,貌似stack overflow上评出来的程序猿薪资前三中就有spark),故放弃尝试。

而Myrrix是基于Mahout的推荐系统,该项目组已经被Cloudera公司收购,停止了对Myrrix的开发,故放弃尝试。

Easyrec能够免费给站点提供推荐功能,仅仅须要你自己的站点向easyrec发送行为,它就能给你产生推荐,可是easyrec的项目组貌似也已停止了开发。

关于开源推荐系统的暂且先告一段落,这几天在看一本叫集体智慧编程的书。英文名是“Programming Collective Intelligence”,尽管是比較老的书了。但还是能学到不少知识,到时候给大家分享一二。

多谷歌,多问,多尝试。才干不断进步,与诸君共勉。

时间: 2024-10-20 05:14:24

推荐系统学习07-Waffles的相关文章

RabbitMQ (消息队列)专题学习07 RPC

(使用Java客户端) 一.概述 在Work Queue的章节中我们学习了如何使用Work Queue分配耗时的任务给多个工作者,但是如果我们需要运行一个函数在远程计算机上,这是一个完全不同的情景,这种模式通常被称之为RPC. 在本章节的学习中,我们将使用RabbitMQ来构建一个RPC系统:一个远程客户端和一个可扩展的RPC服务器,我们没有任何费时的任务进行分配,我们将创建一个虚拟的RPC服务返回Fibonacci数. 1.1.客户端接口(Client Interface) 为了说明一个RPC

ThinkPhp学习07

原文:ThinkPhp学习07 简单CRUD操作 1 public function show() { 2 $m=M('User'); 3 4 // $arr=$m->find(2); //查找id=2的数据,find只能返回一条数据 5 //2.SELECT * FROM `tp_user` WHERE ( sex=1 ) 6 // $arr=$m->where('sex=1')->select(); 7 8 //3.INSERT INTO `tp_user` (`username`,

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin

爬虫学习 07.验证码处理

爬虫学习 07.验证码处理 引入 相关的门户网站在进行登录的时候,如果用户连续登录的次数超过3次或者5次的时候,就会在登录页中动态生成验证码.通过验证码达到分流和反爬的效果. 今日概要 使用云打码平台识别验证码 知识点回顾 session的创建方式 session的作用 proxies参数的作用 高匿,透明代理的区别 今日内容 云打码平台处理验证码的实现流程: 云打码平台处理验证码的实现流程: - 1.对携带验证码的页面数据进行抓取 - 2.可以将页面数据中验证码进行解析,验证码图片下载到本地

【python系统学习07】一张图看懂字典并学会操作

点击跳转 - 原文地址 数据类型 - 字典(dict) 目录: [python系统学习07]一张图看懂字典并学会操作 原文地址:https://www.cnblogs.com/padding1015/p/12232571.html

推荐系统学习之评测指标

转自 http://blog.csdn.net/sinat_33741547/article/details/52704986 最近开始学习推荐系统,特记录一下学习过程并做个分享.推荐系统是什么不用多说,这里先介绍一下推荐系统的各种评测指标.1.用户满意度这个指标应该是最能体现一个推荐系统好坏的指标,但获取只能通过用户在线的反馈,类似用户问卷调查,或者用户对推荐物品的行为,比如购买.收藏.评分等判别.2.预测准确度在离线预测用户行为的评价上,这个指标相当重要.在统计学习中,也就是根据训练数据集学

推荐系统学习(2)——基于TF-IDF的改进

使用用户打标签次数*物品打标签次数做乘积的算法尽管简单.可是会造成热门物品推荐的情况.物品标签的权重是物品打过该标签的次数,用户标签的权重是用户使用过该标签的次数.从而导致个性化的推荐减少,而造成热门推荐. 运用TF-IDF的思想能够对算法进行改进.TF-IDF(term frequemcy-inverse documnet frequency)是一种用于资讯检索和文本挖掘的加权技术.用来评估一个词的重要程度.其主要思想是假设某个词或短语在一篇文章中出现的频率TF高,而且在其它文章中非常少出现,

【SpringMVC学习07】SpringMVC中的统一异常处理

我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生.在开发中,不管是dao层.service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护.这篇博文主要总结一下SpringMVC中如何统一处理异常. 1. 异常处理思路 首先来看一下在spr

基于标签的推荐系统学习

最近看一些推荐系统的东西.比较感兴趣的是基于标签的推荐系统.也就是通过用户的标签行为建立起用户和目标物品的联系,从而挖掘用户的兴趣或者是尽兴定向的推荐. 一个用户的标签行为一般由一个三元组组成<用户,物品,标签>(<u,i,b>)即用户u给物品i打上了b标签. 一个简单的基于标签的推荐系统可以通过如下步骤实现: 1.统计每个用户最常用标签: 2.对于每个标签,统计被打过这个标签次数最多的物品: 3.对于一个用户,找到他常用的标签,从而找到具有这些标签的热门物品进行推荐. 从而可以得