推荐系统学习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”,尽管是比較老的书了。但还是能学到不少知识,到时候给大家分享一二。
多谷歌,多问,多尝试。才干不断进步,与诸君共勉。
推荐系统学习07-Waffles的更多相关文章
- Java虚拟机JVM学习07 类的卸载机制
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...
- ThinkPhp学习07
原文:ThinkPhp学习07 简单CRUD操作 public function show() { $m=M('User'); // $arr=$m->find(2); //查找id=2的数据, ...
- 推荐系统学习--cb+cf 初见
对于推荐系统的推出有两个条件:1.信息过载 ,2用户没有明确的需求 推荐系统算法中常见的有基于内容推荐,协同过滤推荐,协同过滤还可以分为基于人的协同过滤,基于内容协同过滤:社会推荐等 如何理解这些推荐 ...
- iOS学习07之C语言指针
本次随笔主要是为了学习和理解C语言中的指针,指针树状图如下: 1.访问数据的两种方式 1> 直接访问:定义变量后,直接访问变量 ; printf("a = %d\n", a) ...
- Java学习07 (第一遍) - Spring MVC
跳过Struts2,直接学习Spring MVC MVC,自己画的 属性(Property/Attribute),事件(Event),方法(method/procedure),函数(Function) ...
- Django 2.0 学习(07):Django 视图(进阶-续)
接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...
- 推荐系统学习(2)——基于TF-IDF的改进
使用用户打标签次数*物品打标签次数做乘积的算法尽管简单.可是会造成热门物品推荐的情况.物品标签的权重是物品打过该标签的次数,用户标签的权重是用户使用过该标签的次数.从而导致个性化的推荐减少,而造成热门 ...
- WPF学习07:MVVM 预备知识之数据绑定
MVVM是一种模式,而WPF的数据绑定机制是一种WPF内建的功能集,两者是不相关的. 但是,借助WPF各种内建功能集,如数据绑定.命令.数据模板,我们可以高效的在WPF上实现MVVM.因此,我们需要对 ...
- SpringMVC学习07(Ajax)
7.Ajax研究 7.1 简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网页的情况 ...
随机推荐
- Open edX 学习、开发、运维相关链接整理
原文地址:http://edustack.org/ 所需知识: Linux Git Python (Django Mako coffeescript sass) (MongoDB Mysql) Ans ...
- Ubuntu下安装Hadoop
终于把Hadoop的环境给配好了.在美国的第一个周末,非常的折腾,电脑坏了,一开机windows动画过后屏幕就没显示,无语死了,在想着人生地不熟的,哪里去找人修电脑,还好一个舍友说看到隔壁街有个PC ...
- WordPress 如何搜索文章内容而不搜索页面
如何在WordPress 中只搜索指定的文章类型?在http://www.wpbeginner.com上了解到通过WP提供的钩子"pre_get_posts"方法可能实现 该钩子方 ...
- Cognos事件工作室Event Studio开发步骤
Cognos本身是很强大的,只是很多人的思维只是局限在数据-模型-展示的层面上,下面我们就来介绍一下Cognos中稍微有些冷门的一个组件事件工作室(IBM Cognos Event Studio),概 ...
- js的正则匹配 和 blur
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js&qu ...
- C#.NET常见问题(FAQ)-listView如何显示网格线
把GridLines设置为True 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: http:/ ...
- 算法笔记_209:第六届蓝桥杯软件类决赛部分真题(Java语言B组)
目录 1 分机号 2 五星填数 3 表格计算 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 分机号 标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列, ...
- java 获取昨天日期
Calendar cal=Calendar.getInstance(); cal.add(Calendar.DATE,-1); Date d=cal.getTime(); SimpleDateForm ...
- 创建简单的Telnet实例
step1.先加入库SuperSocket.Common.dll, SuperSocket.SocketBase.dll, SuperSocket.SocketEngine.dll,log4net.d ...
- java Socket 获取本地主机ip
package cn.itcast.net.p1.ip; import java.net.InetAddress;import java.net.UnknownHostException; publi ...