Turi create 简介和在微医推荐场景下的使用

内容纲要

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 的使用

推荐流程和常规的机器学习过程相似,都需要读取数据,特征处理,模型训练,模型预测,结果输出五个部分。

  • 读取数据
    1. Turi Create 通过SGraph,SArray,SFrame三种数据结构,其中SGraph,SArray作为Turi Create的基础数据结构使用,SFrame用于处理结构化数据。SFrame支持HDFS,http,csv,DataFrame等多种数据的读取和转换。SFrame的底层是通过SArray实现的。
  • 特征处理
    1. SGraph,SArray,SFrame三种数据结构支持多种计算,使得特征处理的自由度很高:
      1. SArray支持30多种常用计算,基本上与numpy支持的数量相同,除此之外,还支持rolling计算
      2. SGraph 支持对于图节点的增删改查,求子图切割等
      3. SFrame和 SArray支持同样多的计算
    2. Turi Create本身支持很多特征,如BM25,TFIDF,NGramCounter,OneHotEncoder,QuadraticFeatures等许多特征工程处理方式。
  • 模型训练
    1. Turi Create自带了很多模型,包括线性模型,树模型,文本模型等,并且可以通过编写Gather、Apply、Scatter,实现更多的机器学习模型。
  • 模型效果评价
    1. 支持模型评价如:precision,recall,F-score,accuracy,auc,rmse,log_loss等
  • 结果输出
    1. 模型的输出:通过model.save把模型通过二进制序列化到本地,方便后期调用
      2.数据的输出:与数据的数据输入相同,输出的时候,也支持直接输出到本地,到HDFS。

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文档

发表评论

电子邮件地址不会被公开。 必填项已用*标注