Turi Create是苹果公司开源的机器学习工具,其核心代码来自于商用版的GraphLab
Turi create 简介
GraphLab简介
GraphLab 是由卡内基梅隆大学的Select实验室在2010年提出的一个基于图像处理模型的开源图计算框架,框架使用C++语言开发实现。该框架是面向机器学习并行计算框架。框架的设计目标是,像MapReduce一样高度抽象,可以高效执行与机器学习相关的、具有稀疏的计算依赖特性的迭代性算法,并且保证计算过程中数据的高度一致性和高效的并行计算性能。在并行图计算领域,该框架在性能上高出很多其他并行计算框架(例如,MapReduce、Mahout)几个数量级。
Turi Create优点
Turi Create继承了GraphLab 的核心功能和算法,他的主要优点包括:
- ● 统一的API 接口。对于多核处理器和分布式环境,采用统一的API 接口,一次编写程序即可高效地运行在共享内存环境或者分布式集群上。
- ● 高性能。优化C++执行引擎,在大量多线程操作和同步I/O 操作之间进行了很好的平衡。
- ● 可伸缩性强。Turi Create 能够智能地选择存储和计算的节点,Turi Create 对于数据的存储与计算都使用了精心设计的优良算法。
- ● 集成HDFS。Turi Create 内置对HDFS 的支持,Turi Create 能够直接从HDFS中读数据或者将计算结果数据直接写入到HDFS 中。
- ● 功能强大的机器学习类工具集。Turi Create 在自身提供的API 接口之上实现了大量的开箱即用的工具集。
Turi Create结构
Turi Create 项目包括一个用C++实现的核心开发库以及一个高性能的机器学习和数据挖掘工具集。这些工具集都建立在Turi Create API 之上,例如,计算可视化、协同过滤等。
Turi Create所有的API都使用C++编写,程序在内部使用TCP/IP通信。Turi Create底层使用MPI,TensorFlow等来创建、管理Turi Create程序。每个Turi Create程序都被设计成多线程的,以最大化利用集群节点上多核处理器的计算资源。除此之外,Turi Create 还支持读写HDFS 文件系统。
Turi Create 支持的应用场景
- 1.图像分类
- 2.手写体识别和分类
- 3.声音的识别和分类
- 4.图像相似度计算和排序
- 5.物体检测和识别
- 6.推荐
- 7.文本分类
Turi Create 支持的基础场景
- 1.分类
- 2.聚类
- 3.图像和图形分析
- 4.最近邻分析
- 5.回归
- 6.文本分析
- 7.文本的主题模型
Turi Create 的其他特点
通过编写抽象的Gather、Apply、Scatter 三个步骤(类似于MapReduce中的map 和reduce 阶段)可以自定义一些机器学习算法,使得扩展性大大提高。
Turi Create 的使用
推荐流程和常规的机器学习过程相似,都需要读取数据,特征处理,模型训练,模型预测,结果输出五个部分。
- 读取数据
- Turi Create 通过SGraph,SArray,SFrame三种数据结构,其中SGraph,SArray作为Turi Create的基础数据结构使用,SFrame用于处理结构化数据。SFrame支持HDFS,http,csv,DataFrame等多种数据的读取和转换。SFrame的底层是通过SArray实现的。
- 特征处理
- SGraph,SArray,SFrame三种数据结构支持多种计算,使得特征处理的自由度很高:
- SArray支持30多种常用计算,基本上与numpy支持的数量相同,除此之外,还支持rolling计算
- SGraph 支持对于图节点的增删改查,求子图切割等
- SFrame和 SArray支持同样多的计算
- Turi Create本身支持很多特征,如BM25,TFIDF,NGramCounter,OneHotEncoder,QuadraticFeatures等许多特征工程处理方式。
- SGraph,SArray,SFrame三种数据结构支持多种计算,使得特征处理的自由度很高:
- 模型训练
- Turi Create自带了很多模型,包括线性模型,树模型,文本模型等,并且可以通过编写Gather、Apply、Scatter,实现更多的机器学习模型。
- 模型效果评价
- 支持模型评价如:precision,recall,F-score,accuracy,auc,rmse,log_loss等
- 结果输出
- 模型的输出:通过model.save把模型通过二进制序列化到本地,方便后期调用
2.数据的输出:与数据的数据输入相同,输出的时候,也支持直接输出到本地,到HDFS。
- 模型的输出:通过model.save把模型通过二进制序列化到本地,方便后期调用
Turi Create 在推荐场景下的使用
sf = turicreate.SFrame.read_csv('unpack.csv’)
train,test = turicreate.recommender.util.random_split_by_user(sf,
item_test_proportion=0.2)
m = turicreate.item_similarity_recommender.create(user_id='user_id',
item='item_id',
target='score',
similarity_type ='jaccard ',
only_top_k ='100')
m.summary()
m.save('item_similarity.model')
recs = m.recommend(k=30,
exclude_known=False,
diversity=1.4)
Recs.save('pack.csv’)
上述代码只是简单的模型的训练,预测和输出持久化过程,并不包含复杂的模型预处理,参数调节和metric过程。
结束语
对于没有大规模推荐集群的公司来说,Turicreate可以说算是一个神器,他可以在有限的单机器资源上,通过精细的模型,达到和集群训练一样的速度和效果,如果在结合上psclient工具,就可以做到训练,部署,模型上线和在线预测一整套机器学习的流程。
参考
[1]: turicreate API文档