锐眼洞察 | 学了这么久机器学习,你真的了解它的概念吗?

作者:TalkingData 杨慧

本文为TalkingData原创,未经授权禁止转载。申请授权请在评论中留言联系!

导语:

本文是对 TalkingData腾云大学执行校长杨慧分享的两个专题的总结,分别介绍了国内外知名学者、媒体对 Machine Learning 和 Business Intelligence 的定义,也谈了杨慧个人的理解。

 

什么是机器学习?

导读:

学习一直是生物具有的特性,在人类身上的表现尤为明显。机器学习,顾名思义,就是让机器(计算机、程序)也具备学习的能力。更精简点来说,就是通过经验提高性能的某类程序。

卡内基梅隆大学(Carnegie Mellon University)的 Tom Michael Mitchell 教授在 1997 年出版的书籍 Machine Learning 中对机器学习进行过很专业的定义,这个定义在学术界内被多次引用。

在这本书中对机器学习的定义为:

假设一个程序能够在任务 T 上,随着经验 E 的添加,效果 P 也能够随之添加,则称这个程序能够从经验中学习。

在大部分情况下,在训练数据达到一定数量之前,越多的训练数据能够使逻辑回归算法的推断越精准。但是如果数据的特征值,也就是描述一条数据的维度越少,那么即使有再多的训练数据,逻辑回归算法也无法非常好地利用。

因此,机器学习的效果与数据的维度密不可分。怎样数字化地表达现实世界中的实体,一直是计算机科学中一个很重要问题,维度越多,描述得越清楚,机器学到的经验越多。

因此,工欲善其事必先利其器,机器学习这种手段不是大数据的价值所在,更广泛的数据维度,占有更多有多维度价值的数据集,才是大数据的价值所在。

 

 

机器学习(ML)是探索学习算法的构建和研究(DAMA DMBOK)。

此外,“机器学习建立具有适应性参数的程序,参数可根据程序收到的数据自动调整。通过适应已经看到的数据,程序能够改善他们的行为。另外程序还对数据进行了概括,这意味着这些程序可以在以前不可见的数据集上执行功能。”(Alejandro Correa Bahnsen)

据 Keith D. Foote 介绍:最基本的机器学习就是使用算法来解析数据,从中学习,然后对世界上的事物做出决定或预测的实践。因此,机器学习使用大量的数据和算法对机器进行“训练”,赋予其学习如何执行任务的能力,而不是用一些特定的指令手工编写软件程序来完成特定的任务。

机器学习同以下概念相结合(DMBOK):

  • 监督学习:基于广义规则;例如,将垃圾邮件从非垃圾邮件中分离出来。

  • 无监督学习:基于识别隐藏模式(即数据挖掘)。

  • 强化学习:基于实现目标(例如,在象棋中击败对手)。

  • 机器学习还包括编程机器,来快速从查询中学习,并适应不断变化的数据集。

机器学习的其他定义还包括:

先进的算法“由许多技术组成(如深度学习、神经网络和自然语言处理,以现有信息的经验为指导)”(Gartner IT 术语表)

“基于数据经验的结果而更新知识库的系统。”(Adrian Bowles)

“数据分析的一种方法,可自动建立分析模型。”(SAS)

内置智能的算法,使用可用的数据来回答问题。(Paramita Ghosh)

“通过解读我们周围的世界的数据,分类以及从成功和失败中学习这些方法,教计算机和我们同样的学习方式。”(Forbes)

人工智能的一个子领域,或是机器使用数据和自学的 AI 领域。(TechRepublic)

用于数字化转换的人工智能。(哈佛商业评论)

企业使用机器学习来:

  • “大幅缩短回答时间,指导组织洞见”(DMBOK)

  • 处理计算机系统的威胁或安全问题

  • 预测或执行预测分析(McKinsey)

  • 赶上数据量的增长(ComputerWorld)

  • 开发 AI 算法中复杂问题自动化(MIT Technology Review)

  • 在提高员工敬业度和提高客户满意度的同时扩大一线增长(Harvard Business Review)

  • 提高编程的效率和速度(James Kobielus)

  • 在多个行业中提升和开发众多不同的用例 (Paramita Ghosh)

什么是商业智能?

导读:

BI 有两层含义:一层是工具类含义-做分析的技术集;一层是职能类含义,做分析的过程。这两者缺一不可。

如果只看到了 BI 的工具类含义,就会误入“工具至上”之路。BI 说到底还是为了业务服务,只有解决了业务痛点问题的 BI 才是 Smart BI。从业务角度来说,BI 解决的问题包括了:决策的正确性(effectiveness)和决策的即时性(efficiency)。

 

 

商业智能(BI)包含了分析、报告不同业务操作的技术和工具。商业智能使用存储在不同数据仓库、数据集市、数据湖泊和其他存储平台中的原始数据,将其转换为可操作的知识/信息资产。内容包括仪表盘,电子表格,数据可视化,报告等等。

“在其更为详尽的用法中,BI 是在指定组织内收集、存储、回收和分析数据资产所必需的所有系统、平台、软件、工艺和技术。因此,BI 是用于战略规划、决策制定、市场调研、客户支持、库存分析、统计报告以及企业在整体运营洞察机制等其他方面的程序和流程。”(Kelle O’Neal&Charles Roe)

如 DAMA DMBOK 所述:

“商业智能有两个含义:首先是指一种旨在了解组织活动和机会的数据分析。这类分析结果用来提高组织的成功;其次,商业智能是支持这种数据分析的一系列技术。商业智能工具可以实现查询、数据挖掘、统计分析、报告、场景建模、数据可视化和仪表盘。 ”

商业智能的其他定义包括:

“包含应用程序,基础架构,工具和最佳实践的一个统称,可以访问和分析信息以改进和优化。”(Gartner IT 词汇表)

 

“BI 的重点在于:在正确的时间基于正确的信息快速高效地做出决策。”(Keith Foote)

软件和服务的杠杆作用,将数据转化为可行的运筹情报、以及组织的战略战术业务决策。(Mary Pratt,CIO)

一个“总括术语,涵盖了围绕商业数据收集,处理和分析的一系列活动。”(美国东北大学 Mikal Khoso)

“一套利用信息管理流程输出进行分析、报告、绩效管理和信息交付的方法,流程,架构和技术。”(Forrester)

“这个术语是指将原始数据转化为企业可以用来做出更好的组织决策的信息的想法、实践和技术。”(BusinessIntelligence)

组织/公司使用商业智能来:

  • 支持操作功能

  • 执行监管要求

  • 获得关于公司、客户和产品的洞见

  • 获得竞争优势

  • 实践描述性,预测性,规定性和实时分析

  • 做出决策或监控进度(Kelle O’Neal)

 

锐眼发现 | 2018 年开源技术 10 大发展趋势

作者:

原文:10 open source technology trends for 2018

译者:wangy325

转载于:Linux 中国

技术始终是不断发展着的。OpenStack,Progressive Web Apps,Rust,R,认知云,人工智能(AI),物联网等新的发展正在把我们传统的认知模式抛弃。以下 2018 开源技术 10 大发展趋势。

1、 OpenStack 认可度持续高涨

OpenStack 本质上是一个云操作平台(系统),它为管理员提供直观友好的控制面板,以便对大量的计算、存储和网络资源进行配置和监管。

目前,很多企业运用 OpenStack 平台搭建和管理云计算系统。得益于其灵活的生态系统、透明度和运行速度,OpenStack 越来越流行。相比其他替代方案,OpenStack 只需更少的花费便能轻松支持任务关键型应用程序。 但是,其复杂的结构以及其对虚拟化、服务器和大量网络资源的严重依赖使得不少企业对使用 OpenStack 心存顾虑。另外,想要用好 OpenStack,好的硬件支持和高水平的员工二者缺一不可。

OpenStack 基金会一直在致力于完善他们的产品。一些功能创新,无论是已经发布的还是尚处于打造阶段,都将解决许多 OpenStack 潜在的问题。随着其结构复杂性降低,OpenStack 将获取更大认可。加之众多大型的软件开发及托管公司以及成千上万会员的支持, OpenStack 在云计算时代前途光明。

2、 PWA 或将大热

PWA,即 增强型网页应用Progressive Web App,是对技术、设计和网络应用程序接口Web API的整合,它能够在移动浏览器上提供类似应用的体验。

传统的网站有许多与生俱来的缺点。虽然应用(app)提供了比网站更加个性化、用户参与度更高的体验,但是却要占用大量的系统资源;并且要想使用应用,你还必须提前下载安装。PWA 则扬长避短,它可用浏览器访问、可被引擎搜索检索,并可响应式适应外在环境,为用户提供应用级体验。PWA 也能像应用一样自我更新,总是显示最新的实时信息,并且像网站一样,以极其安全的 HTTPS 模式递交信息。PWA 运行于标准容器中,无须安装,任何人只要输入 URL 即可访问。

现在的移动用户看重便利性和参与度,PWAs 的特性完美契合这一需求,所以 PWA 成为主流是必然趋势。

3、 Rust 成开发者新宠

大多数的编程语言都需在安全和控制二者之间折衷,但 Rust 是一个例外。Rust 使用广泛的编译时检查进行 100% 的控制而不影响程序安全性。上一次 Pwn2Own 竞赛找出了 Firefox C++ 底层实现的许多严重漏洞。如果 Firefox 是用 Rust 编写的,这些漏洞在产品发布之前的编译阶段就会被发现并解决。

Rust 独特的内建单元测试方式使开发者们考虑将其作为首选的开源语言。它是 C 和 Python 等其他编程语言有效的替代方案,Rust 可以在不损失程序可读性的情况下写出安全的代码。总之,Rust 前途光明。

4、 R 用户群在壮大

R 编程语言,是一个与统计计算和图像呈现相关的 GUN 项目。它提供了大量的统计和图形技术,并且可扩展增强。它是 S 语言的延续。S 语言早已成为统计方法学的首选工具,R 为数据操作、计算和图形显示提供了开源选择。R 语言的另一个优势是对细节的把控和对细微差别的关注。

和 Rust 一样,R 语言也处于上升期。

5、 广义的 XaaS

XaaS 是 “一切皆服务anything as a service” 的缩写,是通过网络提供的各种线上服务的总称。XaaS 的外延正在扩大,软件即服务(SaaS)、基础设施即服务(IaaS) 和平台即服务(PaaS)等观念已深入人心,新兴的基于云的服务如网络即服务(NaaS)、存储即服务(SaaS 或 StaaS)、监控即服务(MaaS)以及通信即服务(CaaS)等概念也正在普及。我们正在迈向一个万事万物 “皆为服务” 的世界。

现在,XaaS 的概念已经延伸到实体企业。著名的例子有 Uber 、Lyft 和 Airbnb,前二者利用新科技提供交通服务,后者提供住宿服务。

高速网络和服务器虚拟化使得强大的计算能力成为可能,这加速了 XaaS 的发展,2018 年可能是 “XaaS 年”。XaaS 无与伦比的灵活性、可扩展性将推动 XaaS 进一步发展。

6、 容器技术越来越受欢迎

容器技术,是用标准化方法打包代码的技术,它使得代码能够在任意环境中快速地 “接入并运行”。容器技术让企业可以削减经费、降低实施周期。尽管容器技术在 IT 基础结构改革方面的已经初显潜力,但事实上,运用好容器技术仍然比较复杂。

容器技术仍在发展中,技术复杂性随着各方面的进步在下降。最新的技术让容器使用起来像使用智能手机一样简单、直观,更不用说现在的企业需求:速度和灵活性往往能决定业务成败。

7、 机器学习和人工智能的更广泛应用

机器学习和人工智能指在没有程序员给出明确的编码指令的情况下,机器具备自主学习并且积累经验自我改进的能力。

随着一些开源技术利用机器学习和人工智能实现尖端服务和应用,这两项技术已经深入人心。

Gartner 预测,2018 年机器学习和人工智能的应用会更广。其他一些领域诸如数据准备、集成、算法选择、学习方法选择、模块制造等随着机器学习的加入将会取得很大进步。

全新的智能开源解决方案将改变人们和系统交互的方式,转变由来已久的工作观念。

  • 机器交互,像聊天机器人这样的对话平台,提供“问与答”的体验——用户提出问题,对话平台作出回应,成为人机之间默认的交互界面。
  • 无人驾驶和无人机现在已经家喻户晓了,2018 年将会更司空见惯。
  • 沉浸式体验的应用不再仅仅局限于视频游戏,在真实的生活场景比如设计、培训和可视化过程中都能看到沉浸式体验的身影。

8、 区块链将成为主流

自比特币应用区块链技术以来,其已经取得了重大进展,并且已广泛应用在金融系统、保密选举、学历验证等领域中。未来几年,区块链会在医疗、制造业、供应链物流、政府服务等领域中大展拳脚。

区块链分布式存储数据信息,这些数据信息依赖于数百万个共享数据库的节点。区块链不被任意单一所有者控制,并且单个损坏的节点不影响其正常运行,区块链的这两个特性让它异常健壮、透明、不可破坏。同时也规避了有人从中篡改数据的风险。区块链强大的先天优势足够支撑其成为将来主流技术。

9、 认知云粉墨登场

认识技术,比如前面所述的机器学习和人工智能,用于为多行业提供简单化和个性化服务。一个典型例子是金融行业的游戏化应用,其为投资者提供了严谨的投资建议,降低投资模块的复杂程度。数字信托平台使得金融机构的身份认证过程较以前精简 80%,提升了合规性,降低了诈骗比率。

认知云技术现在正向云端迁移,借助云,它将更加强大。IBM Watson 是认知云应用最知名的例子。IBM 的 UIMA 架构是开源的,由 Apache 基金会负责维护。DARPA(美国国防高级研究计划局)的 DeepDive 项目借鉴了 Watson 的机器学习能力,通过不断学习人类行为来增强决策能力。另一个开源平台 OpenCog,为开发者和数据科学家开发人工智能应用程序提供支撑。

考虑到实现先进的、个性化的用户体验风险较高,这些认知云平台来年时机成熟时才会粉墨登场。

10、 物联网智联万物

物联网(IoT)的核心在于建立小到嵌入式传感器、大至计算机设备的相互连接,让其(“物”)相互之间可以收发数据。毫无疑问,物联网将会是科技界的下一个 “搅局者”,但物联网本身处于一个不断变化的状态。

物联网最广为人知的产品就是 IBM 和三星合力打造的去中心化 P2P 自动遥测系统(ADEPT)。它运用和区块链类似的技术来构建一个去中心化的物联网。没有中央控制设备,“物” 之间通过自主交流来进行升级软件、处理 bug、管理电源等等一系列操作。

开源推动技术创新

数字化颠覆是当今以科技为中心的时代的常态。在技术领域,开放源代码正在逐渐普及,其在 2018 将年成为大多数技术创新的驱动力。

此榜单对开源技术趋势的预测有遗漏?在评论区告诉我们吧!

锐眼洞察 | 你不知道的前端算法之热力图的实现

作者:TalkingData 李凤禄

本文为TalkingData原创,未经授权禁止转载。申请授权请在评论中留言联系!

 

inMap 是一款基于 canvas 的大数据可视化库,专注于大数据方向点线面的可视化效果展示。目前支持散点、围栏、热力、网格、聚合等方式;致力于让大数据可视化变得简单易用。

GitHub 地址:https://github.com/TalkingData/inmapinmap 

热力图这个名字听起来很高大上,其实等同于我们常说的密度图。

image_(3).png

如图表示,红色区域表示分析要素的密度大,而蓝色区域表示分析要素的密度小。只要点密集,就会形成聚类区域。 看到这么炫的效果,是不是自己也很想实现一把?接下来手把手实现一个热力(带你装逼带你飞、 哈哈),郑重声明:下面代码片段均来自 inMap。

准备数据

inMap 接收的是经纬度数据,需要把它映射到 canvas 的像素坐标,这就用到了墨卡托转换,墨卡托算法很复杂,以后我们会有单独的一篇文章来讲讲他的原理。经过转换,你得到的数据应该是这样的:

WX20171229-115317

好了,我们得到转换后的像素坐标数据(x、y),就可以做下面的事情了。

创建 canvas 渐变填充

创建一个由黑到白的渐变圆

WX20171229-115345
  • createRadialGradient() 创建线性的渐变对象
  • addColorStop() 定义一个渐变的颜色带

效果如图:

Kapture_2017-12-25_at_16.08_.33_.gif

那么问题就来了,如果每个数据权重值 count 不一样,我们该如何表示呢?

设置 globalAlpha

根据不同的count值设置不同的Alpha,假设最大的count的Alpha等于1,最小的count的Alpha为0,那么我根据count求出Alpha。

let alpha = (count - minValue) / (maxValue - minValue);

然后我们代码如下:

WX20171229-115408

效果跟上一个截图有很大区别,可以对比一下透明度的变化。

image.png

(这么黑乎乎的一团,跟热力差距好大啊)

重置 canvas 画布颜色

  • getImageData() 复制画布上指定矩形的像素数据
  • putImageData() 将图像数据放回画布:

getImageData()返回的数据格式如下:

WX20171229-115425

返回的数据是一维数组,每四个元素表示一个像素(rgba)值。

实现热力原理:读取每个像素的alpha值(透明度),做一个颜色映射。

代码如下:

WX20171229-152527WX20171229-153113

创建颜色映射,一个好的颜色映射决定最终效果。

inMap 创建一个长256px的调色面板:

WX20171229-152614

inMap 默认颜色如下:
WX20171229-152630

将gradient颜色设置到调色面板对象中:

WX20171229-152643

返回调色面板的像素点数据:

WX20171229-152702

创建出来的调色面板效果图如下:(看起来像一个渐变颜色条)

image_(2).png

最终我们实现的热力图如下:

Kapture_2017-12-25_at_15.21_.01_(1)_.gif

 

锐眼洞察 | 2017年大数据分析市场调研报告(翻译)

作者:Dresner Advisory Services

原文:2017 Big Data Analytics Market Study

译者:TalkingData CTO 肖文峰

本译文禁止商用,转载请注明作者与来源!

译者导读:

这份报告是由Zoomdata赞助Dresner Advisory Services制作的大数据分析市场洞察。

从报告中可以大致看到,对于企业来说,大部分依然处于有数据、但是没有有效手段进行展示的阶段。“大数据”对于他们来说还是更加遥远的未来的事情。

亚太用户距离北美来说有一定差距,未来会使用的群体会更大一些,尚无计划使用大数据的更少一些,说明企业基础比较好,更容易接受新生事物,只不过需要有一定的过程。亚太地区的企业引入大数据会更加急迫一些。

IoT并非想象中那么受到追捧。数仓优化是对于企业已经投入的资产的优化。客户和社交分析依然具有持续的高需求。

这里只是翻译部分内容,详细报告请点击原文下载PDF版。


摘要:

  • 大数据采用率在2017年达到53%,高于2015年的17%。
  • 电信和金融服务是早期采用者(第19-24页)。
  • 行业对大数据的态度略有下降(第68页)。
  • 在亚太受访者的带领下,40%的非用户期望在未来两年内采用大数据(第25-30页)。
  • 在商业智能战略的技术和举措中,大数据分析在我们研究的33个主题领域中排名第20位(第18页)。
  • 数据仓库优化仍然是最大的数据使用案例。客户/社会分析和预测性维护是最有可能的用例。物联网大数据势头放缓(第31-36页)。
  • Spark是领先的大数据基础设施选择,其次是MapReduce和Yarn(第37-42页)。Spark、MapReduce和Yarn拥有最高水平的供应商支持(第69-70页)。
  • Spark SQL是大数据访问最流行的手段,其次是Hive和HDFS(第43-48页)。对于Hive / HiveQL,行业支持是最大的,其次是Spark SQL。行业大数据访问支持正在增加(第71-72页)。
  • 在大数据搜索机制中,ElasticSearch领导Apache Solr和Cloudera Search,尽管用户需求不大(第49-54页)。大数据搜索正在获得一些行业投资,但不是高优先级(第73-74页)。
  • 最流行的大数据分析/机器学习技术是Spark MLib,其次是scikit-learn(第55-60页)。行业对机器学习的投资正在显着增加,特别是Spark MLib(第75-76页)。
  • 在大数据分布中,Cloudera是最受欢迎的,其次是Hortonworks MAP/R和Amazon EMR。

对于BI最重要的措施和技术排名:

在被认为对商业智能具有战略意义的技术和举措中,大数据分析在我们目前研究的33个专题领域中排名第20(图5)。 这一排名与我们的2016年大数据分析市场研究相同。 我们应该补充说,2016年是提升大数据采用率和重要性的分水岭。 尽管我们仍然认为,不同组织的大数据收益差异很大,但是在过去的24个月中出现了更为广泛的势头。从本质上讲,我们也观察到大数据距离主流BI实践(如报告、仪表板和终端用户自助服务)的重要性依然很远。

00.png

在2017年的样本中,北美地区(55%)大数据采用率最高(图8)。亚太地区的受访者大部分标识“将来可能会使用大数据”。但是北美和EMEA地区(欧洲、中东、非洲)的受访者两分化也比较严重,也有很多标识“根本没有使用大数据的计划”。

01.png

就地区分布而言,在那些还没有采用大数据的国家中,北美地区受访者在本年度引入大数据的比例最大,同时明年之后引入的也同样最多。亚太受访者大多准备明年采用。

02.png

按行业来看,目前大数据的使用在电信方面是最大范围的,87%的受访者表示他们已经采用(图9)。同样令人印象深刻的是,76%的金融服务机构也已经采用了。相比之下,技术行业受访者中虽然61%已经采用,但是却也有20%并没有计划采用,分化比较严重。医疗保健受访者中只有不到60%的人使用大数据。高等教育目前使用大数据的可能性最小(25%),但是有67%的受访者未来可能会使用。

03.png

大数据用例

2017年最大的数据使用案例是数据仓库优化,对于大约70%的受访者来说,这被认为是“关键”或“非常重要”(图18)。“客户/社会分析”和“预测性维护”(2017年新增条目)是下一个最有可能的用例,至少对大多数受访者来说是“非常重要的”。 值得注意的是,大量讨论的IoT(大数据可能的用例)在我们的抽样中是最低优先级。

04.png

 

锐眼洞察 | 大吉大利,预约吃鸡——解析吃鸡游戏推广套路

作者:TalkingData解决方案工程师  Aaron Yue

本文为TalkingData原创,未经授权禁止转载。申请授权请在评论中留言联系!

由于大学同学在开发腾讯正版的吃鸡游戏,在他不停的安利下,开始接触腾讯的吃鸡游戏,发现这套路还真是深啊,同一款正版拉了两个队伍同时开发(光子工作室的绝地求生:刺激战场和天美工作室的绝地求生:全军出击)。

吃鸡游戏首页.png

今天不说如何吃鸡聊一聊这两款吃鸡游戏推广背后的套路逻辑。

1. 你的好友在这里:

在社交的世界里,两者之间最好的距离是折线距离,如果想影响一个人不要直接去影响他,而是通过影响他身边的2~3个好友来间接影响他。好友口碑所形成的社会压力和“好友都在用”的从众心理可以促成高转化率,这也是你经常会收到一些营销短信告诉你,你的某位好友在某个平台,等待你的加入等等……

“绝地求生:刺激战场”直接标注了已有72位好友进行预约,直接形成了好友的口碑效应,微信的朋友的券也正是这个逻辑,你的好友在线下或者线上消费之后共享了优惠,邀请你也参与。

刺激战场好友.png

“绝地求生:全军出击”这方面表现的更加突出,不但显示了你有多少好友预约,还会显示这些好友的头像,拉近了与潜在用户的关系。

全军出击好友.png

而右上角的微信专属,同时给平台用户有了特殊的荣耀体验。这局全军出击胜出。

2.分享即获取:

还记得当年的“滴滴红包”么,满满朋友圈的红包是不是都拿到了手软,打车比公交车还便宜的日子过去了,“滴滴红包”甚至一举改写了当年“滴滴打车”和快的打车微焦灼的竞争格局,为滴滴在胜利的天平上增加了一个重要的砝码。微信读书,又一现象级产品,这款产品最开始运营了一个小活动——“赠一得一”,当用户不想付费购买一本新书时,可以通过赠予好友的方式来免费获得,正所谓“赠人玫瑰,手留余香”。

朋友圈赠书.png

这无疑解决了新产品“冷启动”的问题。两款游戏在宣传上都标出了邀请好友给予的奖励,并明确了目标,达到什么样的程度给予什么样的奖励。

“绝地求生:刺激战场”的“你苟我苟 天长地久”;

刺激战场好友邀请.jpeg

“绝地求生全军出击”则直接标明了目标和奖励。

全军出击邀请奖励.png

两者都在下方标明了目前完成的进度,也就是集结的好友数。若果直接在任务奖励的下方直接标明进度是不是更好呢?不过本身两者都指向一个逻辑也就是分享即获取,每一次分享,用户都可以获取相应的“利益”。

3.小群效应:

徐志斌老师有个观点“人人都想进大群,人人活跃在小群”。随着社交app的发展,大家可以使用的工具越来越多,群的人数越多,噪声就越大,对用户的骚扰也就越大。进群直接关闭消息提示无疑是这一现象最好的证明,群里都是沉默的大多数。透过历史,咱们去看“滴滴红包”传播的去向会看到一个有意思的变化。最开始朋友圈和微信群中可以看到大量的红包分享,一段时间之后,红包在朋友圈消失,转而更多地出现在了微信群中,慢慢的又开始在一些强关系的群里(闺蜜群,家庭群)出现,现在除了我媳妇儿分享给我之外,群和朋友圈几乎看不到红包的分享了。分享的变化反映了用户在社交网络中的变化。开始大家对新鲜事物好奇,随后觉着可以帮助到朋友开始在微信群中维系,随着红包的普及,再分享到群或者朋友圈反而会对好友造成困扰,影响自己的形象,这时就变成了家人间的强关系分享,这也颇具有汇报的意思:媳妇儿,我回来了!媳妇儿,我又省钱了。回来看这两款游戏利用社交关系进行传播推广的时候采取了一些策略,

“绝地求生:刺激战场”直接标明了:查找最合适跳伞的密友;

刺激战场好友邀请.jpeg

下面罗列了一些最近和你有经常聊天互动的好友,或者你们在某一个特别活跃的小群的好友,甚至我一度怀疑是你们之间有过关于“吃鸡”内容对话的好友。

再看“绝地求生:全军出击”,也是同样的逻辑选择了好友,并且在刺激战场中的“邀请他”换成了“带TA飞”。

全军出击好友邀请.jpeg

更加拉近了关系,不是在做广告传播,而是我发现了好东西,要带你去看看。一键邀请,直接发送链接也是极大方便了用户的操作。

邀请链接.png

并且这两款游戏的一键邀请也并不是可以无限制的邀请你所有的好友,我看了一下基本上只有三页:

邀请页面.jpeg

也就是你只可以邀请一些固定最近有交往的好友,这也是为了对大多数“好友”(不是好友关系的“好友”)不打扰是你最大的温柔。当然,你也可以直接转发链接进行邀请,他们是不会拒绝交际花的你帮助他们做大量宣传的。

4.KOL效应:

想要证明自己下一步做出来的好其实有一个捷径,就是证明我从前做过很多这方面的好东西,于是双方工作室的明星产品开始齐贺首发,疯狂打电话。

明星产品.png

也是想在用户那里找到认同感,通过以后的认知来影响即将发布的产品。

5.圈子建立:

产生了初次的接触之后,为了持续的对用户产生粘性,务必用一定的规则或者方法两款游戏都通过了三种方式,分别是:进入圈子、关注公众号和进入微信群(明星产品1)。圈子更像一个论坛,大家可以在这里交流攻略和交友组队。通过去中心化的方式,让用户彼此愉快的消耗对方的时间,产生粘性。

圈子.png

“绝地求生:全军出击”更加突出了微信群的进入(明星产品),去中心化的弱运营方式被越来越多的采用。

群.png

6.触达落地:

前面所有的工作做完之后一定要考虑最后的触达,这次两款游戏都是通过的微信普通卡券,直接放入了卡包里面,只是我有点儿傻傻分不清楚。

两张卡券.jpeg

邀请链接1.png

你要问什么是微信卡券,那我送你一道传送门吧《一个做社交的搞了个卡包:我们不一样!(文末附传播流程图)》

最后,不得不佩服这两款游戏的推广宣传,游戏未上线,预约早已破千万。

游戏宣传.jpg

吃鸡已预约,老司机开车求带。

明星产品1.png

两张卡券1.png

锐眼洞察 | 一个新的时代:移动位置跟踪、用户同意与政府监控(翻译)

作者:Greg Sterling

原文:A new era: Mobile-location tracking, user consent and government surveillance

译者:TalkingData副总裁 Teddy

本译文禁止商用,转载请注明作者与来源!

 译者注:

  1. 位置数据收集本身就是一个涉及用户隐私的敏感过程,而在位置数据收集中,已经从GPS转化为如收集WiFi、基站等各种信息来推演;
  2. 对于位置数据收集是否需要用户授权、如何授权以及政府监管是否可以绕过这些授权,在欧美法律实践中也存在争议;(在北美,这个问题就是保守派 VS. 自由派的争议之一,即是否需要强政府监管——保守派,还是给予民众充分的自由、政府仅做最低服务——自由派)
  3. 在中国的强监管时代,位置数据收集也一样存在法律探讨的实践,但好像从不会被自由派所影响。

本周将会听到美国最高法院的一个案件的审批结果,从而未来会确定警方是否可以通过手机访问移动用户位置记录历史。
上周来自Quartz的一份报告说,即使人们已经关闭了位置服务,Google也可以一直收集用户和手机信号塔的位置数据:

“自2017年初以来,Android手机一直在收集附近蜂窝塔的地址 – 即使是用户停用位置服务的情况下 – 也将这些数据发送回Google。 其结果是,谷歌 – 隐藏在安卓背后Alphabet集团中的一个部门,仍可以访问有关个人的位置和他们的运动的数据,远远超出了消费者对于隐私的合理期望。

data-privacy-security.jpg

据报道,根据Google向Quartz提供的声明,这种做法旨在来提高消息传递的速度和性能。谷歌还表示,将在本月底逐步淘汰这种做法。”

毫无疑问,这些数据是匿名收集的,也是Google为提高位置和环境准确性所做的全面努力的一部分。但是,这看起来很邪恶,特别是在用户不能控制的情况下,甚至在关闭位置服务的情况下。(去年,广告网络服务商InMobi同意支付近100万美元来解决联邦贸易委员会对其的指控,即:InMobi欺骗消费者,并在消费者没有知情和同意的情况下追踪他们的地点。

位置数据对于数字生态系统中的每个人都变得非常有价值,因为它可以用于很多场景。部分的使用场景列表包括:离线归因、受众细分、个性化、竞争分析和重定向。

在即将出台的“通用数据保护条例”(GDPR)下,Quartz文章中所描述的实践几乎可以肯定是非法的,这要求用户明确同意使用个人数据。事实上,在欧洲收集和使用移动位置数据将成为一个复杂的命题,并可能在北美产生溢出效应。

不过,本周在美国最高法院审理的案件的结果可能会走向相反的方向。“Carpenter v. United States” 的案件将决定政府当局是否可以在没有搜查令的情况下访问个人移动位置记录历史。

该案最初涉及密歇根州2011年的刑事调查。刑事被告Timothy Carpenter被定罪的部分原因是移动位置历史证据。刑事定罪被上诉,理由是无证移动位置数据的收集违反了第四修正案的“不合理的搜查和扣押”条款。

第六巡回上诉法院认为,警方不需要授权即可捕获和使用这些数据。如果美国最高法院确认这一裁决(这在法院的新保守派成员中是极有可能的话),将有可能引发一个新的可怕的间谍时代。它也可以使公司收集和使用位置数据成为政府监督的工具。

锐眼发现 | 来自华盛顿大学教授的机器学习“内功心法”

作者:Pedro Domingos

译者:AI科技大本营(微信号「rgznai100」)

转载自:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

译者注:

本文最初发表在 《ACM通讯》2012年第10辑。作者是华盛顿大学教授,著名的机器学习专家 Pedro Domingos。作者2016年凭借畅销书《终极算法》而名声大噪,成为全球机器学习领域代表人物之一。而5年前 Domingos 教授发表的这篇“内功心法”,也是整个国外机器学习领域几乎人人必读的一篇文章。在很多大学的机器学习课程以及优达学城等在线培训体系中,都推荐学生精读此文。

这篇文章高屋建瓴的介绍了机器学习实践当中若干需要关注、而又不见于一般教科书的问题,堪称经验之谈,非常宝贵。 国内的机器学习爱好者多次翻译过这篇文章,但是翻译质量良莠不齐。为此小编委托高手重译此文,再次发表以飨各位小伙伴,强烈建议大家收藏,有时间的话多读几遍。

本文是中译版,在AI科技大本营(rgznai100)微信公众号会话中输入“经典”,即可获得原始PDF文件。

机器学习系统可以自动从数据中学习程序。这种方法比起手工编程更具吸引力。近10年,机器学习发展势头迅猛,已不仅限于计算机科学,还被用于网络搜索,垃圾邮件过滤器、推荐系统、广告植入、信用评分、欺诈检测、股票交易、药物设计以及其他应用上

麦肯锡全球研究院近日发布了一篇报告,断言机器学习(即数据挖掘和预测分析)将会驱动下一次革新浪潮。市面上有好些不错的教科书适合感兴趣的从业人员和研究人员(比如,Mitchell and Witten etal.)。但是,很多在实践当中极其重要的“内功心法”,教科书里是没有的,结果就导致很多机器学习项目浪费了大量的时间,或最后没有得到想要的结果。然而,大部分的内功心法并不难讲清楚,本文试图做一个解说。

机器学习种类很多,但为了方便说明,我主要就集中在最成熟、使用范围最广的一个类型:分类。但我要讨论的问题适用于所有类型的机器学习。

分类器是输入(一般来说)一个离散向量以及/或者连续特征值,然后输出一个单一的离散值,即类别。比如,垃圾邮件过滤器把邮件分为“垃圾邮件”和“非垃圾邮件”,输入值可能是一个布尔向量x = (x1,…,xj,…,xd),如果字典里以j开头的单词出现在邮件里,那么xj = 1,若没出现,则xj = 0。学习器输入一组训练样本 (xi, yi),其中xi = (xi,1, . . . , xi, d)为可观察输入,yi为对应的输出,输出的是一个分类器。学习器就是要测试这个分类器以后输入样本xt时,是否还能得出正确的输出值yt(例如,垃圾邮件过滤器是否能把之前未见过的邮件正确分类)。

机器学习=表示+评价+优化

假如你有一款应用,你觉得机器学习能够对其有所帮助。那么摆在你面前的第一个大难题就是可供选择的学习算法种类繁多,让人眼花缭乱,到底选哪一个呢?现有的算法就有数千种,而每年又有数百种算法相关著作出版。在这样繁多的算法中不致迷失的关键,就是明白算法的三大组成部分:

表示:一个分类器一定要用计算机能够处理的形式化语言来表示。反之,选择一个学习器的表示就等价于选择一个可能具有学习能力的分类器集。这个集被称为学习器的假设空间(hypothesis space)。如果一个分类器没有在假设空间内,那么学习器就无法学习。之后我会讲一个相关问题,就是如何表示输入值,换言之,就是要用什么特征。

评价:评价函数(也叫做目标函数或者打分函数)用于区分分类器的好坏。为了便于优化,通过算法生成用于内部的评价函数和优化分类器的外部评估函数并不相同。

优化:最后,我们需要一个方法来找到分数最高的分类器。优化技术对于提升学习器效率至关重要,如果评价函数得出了多个分类器,那么就由优化来决定最终的去留。通常来说,新的学习器开始都用现成的优化器,之后会换成定制的优化器。附表为三大成分的范例。

例如,K近邻算法通过确定K个最相似训练样本,将出现最多的类别定为测试样本的类别。基于超平面的算法形成每个类别特征的线性组合,并将得分最高的线性组合作为预测结果。决策树在每个内部节点测试一个特征,一个分支代表一个特征值,枝叶是分类预测结果。

算法1 决策树归纳

算法1就是布尔域决策树学习器的基本框架,使用了信息增益和贪婪搜索。信息增益(xj, y)是特征xj和类别y之间的互信息。节点制造(x,c0,c1)得出测试特征X 的节点值,把c0 作为x = 0的子类, c1 作为 x = 1的子类。当然,不是表格中一个成分的所有组合都有相同意义。比如,离散表示通常用组合优化,而连续表示就用连续优化。然而,很多学习器既有离散成分也有连续成分,事实上,也许不久后在一些学习器上就会有所有可能的组合了!很多教材都是按照表示来安排的,这样容易忽略其他重要的部分。选择这些没什么捷径,但落实到机器学习项目上,有些部分会更重要一些。

泛化才是关键

机器学习的根本目标就是训练出超越样本的泛化模型,这是因为无论我们有多少数据,我们都不太可能在测试中再次看到这些具体的样本。(请注意,如果字典里有100,000个单词,垃圾邮件过滤器要就可能要描述2^100,000  多不同输入)。训练集表现得好很容易(只要记住所有的样本就行了)。

机器学习初学者们普遍犯的一个错误就是用训练数据进行测试,结果很理想,就以为自己成功了。当用该分类器测试新数据的时候,结果比随机猜测好不了多少。所以,如果你雇别人来创建分类器,记得要自己私藏一点数据,他们把分类器给你的时候,自己测一下。

如果你被聘请去创建一个分类器,一开始就保留些数据,等到最后完成的时候用来测试,最后基于所有的数据结果,你就知道自己的分类器怎么样了。测试数据可能会以一些潜在方式对分类器造成污染,比如,如果我们用测试数据调超参。(机器学习算法有大量的超参,超参的调整关乎成败,所以要重点关注)。当然,留出数据会减少训练量,但交叉验证法可以缓解这个问题:随机把你的训练数据分成10个子集,每次选一个子集做训练,该子集的并集留下,作为测试集,测试结果的均值就可以让我们知道参数集表现如何。

在机器学习早期,人们对于将训练数据和测试数据分开的意义认识不深。这其中部分原因是,如果学习器的表示有限(比如,超平面),那么训练集和测试集的误差就不明显。但是,随着分类器灵活性增加(比如,决策树),或者有大量特征值的线性分类器,则训练与测试集的隔离是绝对必要的。

把泛化作为关键会给机器学习带来一个有趣的结果。不像其他优化问题,我们没法访问我们想优化的函数!我们只能用训练错误代替测试错误,这样会有很大的问题(之后会谈到如何解决)。但好的一方面是,因为目标函数只是最终目标的代理,我们不用完全优化它:实际上,通过简单的贪婪搜索得到的局部优化可能会比全局最优更好。

光有数据还不够

把泛化作为关键还会带来另一个重要的后果:不管你有多少数据,光有这些数据是不够的。比如从100万个样本中得到了100个变量的布尔函数,还有2^100 – 10^6个样本的类别是你不知道,那要怎么把这些类别弄清楚呢?在没有其他信息的情况下,不就只能靠扔硬币随机决定了。

早在200多年前,著名的哲学家大卫·休谟就提出人的认识是有限的,但直到今天,很多机器学习犯错的根源就是没有意识到这件事。每个学习器一定要包含数据没有提供的知识和假设,这样才能将数据泛化。Wolpert在他著名的“没有免费午餐”理论中确定了这一概念。根据这个概念,随机猜测会打败学习了所有函数的学习器。

这听上去让人很沮丧。那我们怎样才能学习呢?幸运的是,我们在现实世界中学的函数并非均匀的来自所有可能的数学函数!实际上,一些泛泛的假设——像平滑,样本相似则类别相似,依赖性有限、复杂度有限等等——就足够了,这就是机器学习能够成功的很大一部分原因。和推理一样,归纳(学习器要做的)就是一个知识杠杆:输入少量知识输出大量知识。归纳比推理更强大,输入知识更少,却得到有用的结果。

当然,和所有的杠杆一样,输入的越多,得到的就越多。选择表示的关键是看哪种知识更容易表达。比如,如果我们懂得大量使样本相似的知识,那么例子导向方法是一个不错的选择。如果我们有概率相关性的知识,那么就用图形模型。如果我们知道每个类别要用那种预测,那么“如果……那么……”规则会是个最好的选择。好的学习器仅仅固化假设是不够的,还要允许我们能够明确表述它们,任意改变它们,并且能够自动把它们用于学习中(比如,用一阶逻辑或者程序)。

综上,在机器学习中需要知识没什么可惊讶的。机器学习不是魔术,不能无中生有,而是由少变多。编程需要我们一切都从零做起。机器学习更像是种地,让大自然来做大部分工作。农民把肥料和种子混在一起长出庄稼。而学习器和数据知识合在一起就长出了程序。

过拟合有好几副面孔

要是我们的知识和数据不足以让我们得到一个好的分类器呢?那么我们很可能就臆造一个分类器,把数据中的各种随机抖动都当真了。这个问题就叫做过拟合,是机器学习中常出现的问题。当你的学习器输出的分类器在训练集上准确率达100%,而测试集仅50%,而事实上两者的准确率都应为75%,这个时候就发生了过拟合。

每个了解机器学习的人都知道过拟合,但其表现方式不尽相同。发现过拟合的办法之一就是把泛化误差分解为偏差和方差。偏差是学习器持续学习一种错误东西,而方差是指学习器做出的决断与输入信号无关,是随机的。

图1. 飞镖的偏差和方差

如图1所示,用飞镖做类比。一个线性学习器偏差很高,因为两个类别之间的交界不是超平面时,学习器就不能进行归纳。决策树不会发生这个问题,因为它们可以表示任何布尔函数,但是它们会出现很高的方差,由同样的现象引出的问题,在不同的数据集上训练,决策树模型会得到完全不同的结果,而理论上来说,它们应该是一样的。

相同的问题也出现在优化方式的选择上:在选择优化算法时,束搜索比贪婪搜索有更低的偏置,但有更高的方差,因为它用到了更多的假设。因此,与我们的直觉相反,真正优秀的分类器不一定要比差的分类器表现更好。

图2. 那怕真分类器是规则集,朴素贝叶斯也比决策树学习器要好

如图2所示,即使真正的分类器是规则集,在训练样本不到1000个的时候,朴素贝叶斯分类器比决策树分类器精确度更高。哪怕贝叶斯假设错误,界面是线性,准确率还是很高!这样的情况在机器学习中很常见:较强的错误假设会比较弱的正确假设表现更好,这是因为后者需要更多的数据来避免过拟合。

交叉验证可以避免过拟合,比如,通过它来选择合适大小的决策树进行学习。但这也不是万能的,如果我们用来制造过多的参数选择,交叉验证就会自行开始过拟合。

除了交叉验证之外,还有其他各种方式来预防过拟合。

其中最常用的方法是在评价函数中加入正则项。这样可以对于过于复杂的模型进行处罚,因而系统更容易产生结构简单的模型。

另外一种方式是在加入新的结构之前通过卡方验证来检验统计显著性,以此来判断加入此结构是否有助于提升效果。当数据不足时,这些方法非常有用。然而,如果有谁生成某种方法可以完全“解决”过拟合问题,你应当持怀疑态度。因为很容易就从过拟合变成欠拟合。想要同时做到避免过拟合和欠拟合需要设计出完美的分类器,然而根据“天下没有免费的午餐”原理,在没有足够知识的前提下,没有任何一个分类器能够在各种情况下都表现最好。

一个关于过拟合的误解是,认为它是噪声造成的,比如说训练样本的标签标错了。这确实会让过拟合加重,因为这会让学习器产生出变换反复的决策面,以满足这些样本的标定。但是在没有噪声的情况下, 也可能发生严重的过拟合。例如,假设我们有一个布尔型分类器需要把训练集中的正样本找出来(换句话说,分类器以析取范式的方式,将训练集中样本的特征结合起来)。这个分类器将训练集中的样本正确分类,而将测试集中的正样本全部错误分类,无论训练集中有没有噪声。

多重假设检验与过拟合十分相关。标准的统计检验一次只能检验一种假设,而学习器可以同时检验百万种。结果是,看上去很重要的假设也许实际上并没有多重要。例如,如果有一家信托基金公司连续十年业绩领先于业内,你会觉得它很厉害,但是如果仔细一想,如果每年任何一家公司都会有50%的概率领先,那么它就有可能很幸运地连续十年领先。这个问题可以通过加入一系列的假设,做显著性测试来判断,但同样会带来欠拟合的问题。一种更加有效的方式是控制错误接受的比例,也称为错误发现率。

高维度直觉失误

除了过拟合之外,机器学习最大的问题就是维度灾难了,这个说法是1961年Bellman提出来的,很多算法在低维度表现不错,但是一旦输入值为高维度就应付不了了。但在机器学习中,这个说法还有更多含义。随着样本的维度(特征值)增加,泛化的难度也按指数递增,因为大小固定的训练集在输入空间只占很少一部分。那怕1万亿个样本,维度为100的训练集也只占了输入空间10^-18的部分。这就是为什么机器学习如此必要而复杂。

更严重的是,机器学习算法依赖(显式或者隐式)的相似性推理在高维度会崩溃。想象一个K近邻分类器把汉明距离作为相似性度量,假设类别就只是x1 ∧ x2,没有其他特征,这很简单。但如果还有98个不相关的特征x3,…, x100,那么它们的噪音就会淹没x1和x2之间的信号,最近邻分类会有效地做出随机预测。

更令人困扰的是,如果100个特征都相关,那么近邻算法也会出现问题,这是因为在高维度所有样本都很相似。假如,所有的样本都分布在规则网格内,有个测试样本Xt,如果网格是d维度,Xt的2d邻近样本和它距离都相同,所以随着维度增加,越来越多的样本成为了xt的近邻样本,近邻样本的选择就变得随机了。

这仅仅是高维度带来的一个问题:我们的本能来自三维世界,没法应用于高维度世界。在高维度世界,多元高斯分布大部分的质量不是靠近均值,而是在其周围距离不断增加的“壳”里。高维度的橘子的质量主要就集中在果皮上,而不是果肉里。如果一个数量恒定的样本均匀地分布在一个高维度超立方体中,大部分样本应该靠近超立方体的表面而不是近邻。如果我们把超球体刻进超立方体中来近似超球体,在高维度中,几乎超立方体所有的量都在超球体的外面。这对机器学习来说是个坏消息,因为一种类别的形态常常靠其他形态来近似。

在一维和二维建分类器很容易,我们通过肉眼观察就可以在不同类别样本之间找到合理界面。(如果人能看到高维度那机器学习也没什么必要了。)但是一到高维度,我们就很难理解发生了什么。这也给设计分类器带来了难度。有人会觉得特征越多越好,大不了就是没什么新信息嘛。

但实际上,因为维度灾难,弊会大于利。不过好在有种效应叫做“非均匀性祝福”会部分消除这种诅咒。在大部分应用中,样本不是均匀分布在示例空间内,而是集中或者靠近低维流形。比如,K近邻算法特别适用于手写数字识别,那怕数字图像每像素上就有一个维度。因为数字图像的空间比图像空间小很多。学习器可以隐式地利用这种较低的有效维度,或算法来显式地减少使用的维度(比如,Tenenbaum)。

理论保证不一定有用

机器学习论文里满是各种理论保证,最常见的一种就是限制样本数量来保证泛化成功。你怎么看呢?首先,它们有可能是真的。归纳一般来说和推理是对立的:在推理中,你可以保证所有结论是正确的,但在归纳就正好相反。这是几个世纪以来的一个老观念了。近十多年来的一个重大进步就是我们意识到可以保证归纳的结果,尤其是如果我们想解决概率保证。

论证方式很简单。如果真错误率大于ε,我们就认为这是个坏分类器。所以坏分类器的可能性是和n 随机一致,独立训练样本小于(1 − ε)n。把b作为坏分类器在学习器假设空间H中的数量。通过一致限,使得它们中至少一个的可能性持续低于b(1 − ε)n。假设学习器总是会得到一个一致的分类器,而坏分类器出现的概率就小于|H|(1 − ε)n 而我们默认b ≤ |H|。所以如果我们希望可能性小于δ,让n > ln(δ/|H|)/ ln(1 − ε) ≥ 1/ε (ln |H| + ln 1/δ)就够了。

但不幸的是,我们对这种保证要持保留态度,因为通过这种方式得到的边界会非常松散。上述边界一个非常棒的特征就是样本需求数量以|H| 和 1/δ的对数增长。大部分假设空间都是按多个d特征值呈双指数的,这样我们就还需要一些d的指数样本。例如,有一个布尔变量的布尔函数。如果这里有e个不同样本,那么就有2e不同的函数。那么有2d 个不同的函数,那么函数总量就为22d。就算假设空间只有指数的,边界还是非常松散,因为一致限很悲观。例如,有100个布尔特征,而假设空间是决策树,有10层,为了保证上述边界δ = ε = 1%,我们需要50万个样本。但实际上只要一小部分就可以满足学习了。

另外,我们还要警惕这样的边界意味着什么。它不是说,如果你的学习器得到一个与训练集一致的假设,就意味着假设成功,而是说明训练集够大的话,你的学习器要么得到一个好的假设,要么就是没法找到一个一致的假设。这个边界也没有告诉我们怎么选择一个好的假设空间,只告诉了我们,如果一个假设空间包含了真分类器,那么学习器输出坏分类器的概率就会随训练集的减少而下降。如果我们压缩假设空间,那么边界会提高,前提是其包含的真分类器也压缩了(有些情况真分类器不在假设空间内,但该理论同样适用。)

另外一种理论保证是渐近:给无穷的数据,保证学习器输出正确的分类器。这是一种确认,但可能会导致我们轻率地下决定去选择某一种分类器。事实上,我们很少会遇到渐近区。是因为之前我所讨论的偏差-方差权衡问题,如果学习器A 在无限数据上比B 好,那么B在有限数据上一定比A好。

理论保证不是实际操作的准则,而是算法设计理解和驱动的源泉

就这方面来看,理论保证还是很有用的;实际上,理论和实践之间密切的相互作用是机器学习这些年能取得巨大成就的主要原因。但机器学习是一个复杂的现象,不能因为学习器有了理论证明,在现实中运作,就说着前者是后者的原因。

特征工程是关键

有的机器学习项目成功了,有的没有,是什么原因呢?最重要的原因就是其使用的特征。如果你有多个独立特征且每个都和类别相关,那么你的机器学习就很容易成功。另一方面,如果类别都是复杂的特征函数,那么就不容易学习。

通常,原始数据不是很好学习,但是你可以从数据中建构特征。这常常是机器学习项目中最费功夫的地方,也是最有趣的部分,在这部分直觉、创造力、“歪门邪道”和技术的东西同样重要。

初学者往往会很惊讶,在一个机器学习项目中,真正用在做机器学习这部分的时间很少,大部分都花在了数据收集、整合、清理和预处理,以及反复的特征设计。另外,机器学习不是建完数据库,运行学习器,一次就搞定的事情,而是要不断地运行学习器,分析结果,调整数据或者学习器,然后反复的一个迭代的过程。学习通常是这里面花时间最少的一部分。特征工程很复杂因为它是域特定的,而学习器则很大程度上是通用的。然而,这两者之间没有没有明显分界。这也就是为什么好的学习器是和知识相结合的。

当然,机器学习的圣杯之一就是使越来越多的特征工程过程自动化。现在常用的一种方法就是自动生成大量的候选特征,然后通过信息增益来选择最好的。但是要记住单独特征互相也许无关,但合并在一起就会关系了。例如,如果这个分类是输入特征为k的XOR,每个特征都没有类别相关信息,另一方面,运行大量特征的学习器来寻找哪些在合并时有用会花费大量的时间,导致过拟合。所以,说到底在特征工程上,还得靠人的能力。

数据多比算法聪明更好

假设你建了最好的特征集,但是你拿到的分类器并不完全准确。你要怎么办呢?

有两种选择:设计一个更好的算法,或者收集更多的数据(更多样本、更多原始特征,受制于高维诅咒)机器学习研究者常常更关心前者,但实际上收集数据这个办法更容易成功。根据经验,一个一般的算法,如果数据多,会优于数据较少的高深算法。(毕竟,机器学习就是让数据来干活的。)

但这就会带来另一个问题:可扩展性

在大部分电脑科学中,两大受限资源是时间和内存。而在机器学习中,还有第三个:训练数据。不同时期的技术瓶颈就在这三大限制中变换。20世纪80年代,数据是瓶颈,而今天,是时间。大量的数据是有的,但是没有足够的时间去处理。这就会导致一个悖论:理论上数据越多意味着可以学习更复杂的分类器,但实际上,最后还是用的更简单的分类器,因为复杂分类器学习时间更长。一个解决方法是想出更快的方式来学习复杂的分类器,在这方面也的确有显著的成果(比如,Hulten and Domingos)。

使用高深的算法没有预期那么理想的原因是,大部分算法都差不多。如果你认为规则集神经网不同的话,你可能会对此感到很惊讶。但实际上,命题规则很容易编为神经网络,其他表示之间也有类似关系。所有学习器都是把近邻样本放进一个类别,而关键是什么叫“近邻”。在数据分布不均时,学习器尽管产生不同界面,却依然可以做出相同预测(训练样本多的,通常测试样本也会大量出现)。这也能解释为什么好的学习器不稳定,但还是很准确。图3为二维展示,在高维度效果越明显。

图3所示,不同边界会产生相同预测(+和-是两个类别的训练样本)

所以规则就是首先使用简单的学习器(比如,先用贝叶斯而非罗辑回归,先用K近邻算法而不是支持向量机)。越复杂的学习器越吸引人,但用起来却很难,因为它们需要调节的按钮太多才能得到想要的结果,也因为它们的内部不够透明。

学习器可以分成两大类:一是表示有固定大小的,比如线性分类器,还有表示随数据增加的,比如决策树(后者有时被称做非参数学习器。但很不幸,它们常常比参数学习器学的参数更多。)大小固定的学习器只能从大量数据中获益(注意一下图2中贝叶斯算法的渐近线约在70%左右)。

大小变化的学习器理论上只要数据足够,可以学习任何函数,但实际上不行,因为算法有限(比如,贪婪搜索会陷入局部最优)或者计算开销不足。而且,因为高维诅咒,现有数据可能不够。基于这些原因,高深算法—充分利用数据和计算资源的—最后常常会成功。设计学习器和学习分类器之间没有太大差别,任何知识可以在编码进学习器中或从数据中学习。所以机器学习项目的学习器设计最后成为最重要的部分,从业者们需要具备一定的专业知识。

到最后,最大的瓶颈不再是数据或者CPU周期,而是。很多论文中,学习器基本都在精准度和计算预算方面做比较。人为努力和洞察力很难测量,但往往更重要。这会帮助学习器创建人们可以理解的输出(比如,规则集)。充分利用机器学习的机构已经准备好基础设施使用各种学习器、数据资源和简单有效的学习问题来进行实验,并且在那些机构中机器学习专家和应用领域专家合作密切。

学习更多的模型

在机器学习的早期,每个人都有自己喜欢的学习器,相信它的优越性。我们花了大量的时间来尝试其变体,然后选择最好的一个。后来系统实证比较发现学习器的好坏是随应用不同而改变的,所以搭载不同学习器的系统就开始出现了。人们就开始努力尝试多个学习器的变体,然后还是选择最好的那个。但后来研究者们发现,如果把多个学习器合在一起,结果会更好,使用者也不费什么功夫。

现在创建这样的集成模型已经成为一种标准了。最简单的一种技术,叫做bagging.我们通过重采样的方式生成随机训练集,每个训练集学习一个分类器,最后通过投票合成结果。这样的方式能成功的原因在于其大大减少方差的同时,只稍提高了偏差。在boosting中,训练样本有权重,而这些权重各不相同,所以每个新的分类器都会关注之前分类器分错的样本。在stacking中,独立分类器输出变成了“更高级”学习器的输入,并且stacking在想办法进行最优组合.

现存的技术有很多,集成越做越大已经成为了一种趋势。

在Netflix prize大赛上,来自全世界的团队互相竞争,创建最好的视频推荐系统(http://netflixprize.com)。随着比赛的进程,团队发现通过合并其他团队的学习器可以得到最好的结果,然后团队之间互相合并,越来越大。冠、亚军都是上百个学习器的集成。当然,我们在未来还会看到更大的集成。

模型集合不应和贝叶斯模型平均(BMA)—理论上最优的学习方法—相混淆。在BMA中,新样本的预测是通过在假设空间中取所有分类器各个预测的平均值,由分类器解释训练数据的表现,和我们对其的期待来权衡。除了表面相似,其实集成和BMA非常不同。集成改变了假设空间(比如,从单个决策树变成了所有决策树的线性集合),可以呈现出各种形式。BMA根据固定公式将权重分配给原始空间的假设。BMA权重和bagging或者boosting产生的权重完全不同:后者非常平均,而前者非常倾斜,直到某单一最高权重分类器占主导地位使得BMA选择它。这样产生的结果就是,集成模型是机器学习包中关键的一部分,而BMA却没人选择。

简单不意味着准确

奥卡姆剃刀原理说:如无必要,勿增实体。在机器学习中,这常常意味着,如果两个分类器有同样的训练错误,简单的那个训练器测试错误率会更低。这种说法常常在文学中很常见,但实际上有很多反例,“免费午餐”定理就可以对此进行反驳。

我们在前面就看到了一个反例:模型集合。即使训练误差达到0之后,通过增加分类器也可以提升增强集成的泛化误差。另一个反例就是支持向量机,可以有效地拥有无限量的参数而不会过度拟合。相反,函数符号(sin(ax))可以区分任意大的,任意标记的x轴上的点,即使它只有一个参数。因此,和直觉相反,模型的参数量和过度拟合之间没有必然联系。

更复杂的视图反而使复杂度与假设空间的大小相等,因为较小的空间允许用更短的代码表示假设。理论保证部分的界限可能被视为表明较短的假设泛化得更好。这可以通过将更短的代码分配给我们有一些先验偏好的空间中的假设来进一步改进。但是将其视为在准确性与简单性之间权衡的“证明”是循环推理:我们假设我们更倾向于设计简单,如果它们是准确的,那是因为我们的偏好是准确的,而不是因为我们选择的表示中的假设是“简单”的。

这还会产生的另一个复杂情况是没有学习器会彻底搜索假设空间。假设空间更大的学习器如较少的假设比从较小空间中尝试更多假设的学习器过拟合的可能性低。正如Pearl所指出,真正影响训练和测试误差的是选择假设的过程,而假设空间的大小只是对此的一个粗略指导。Domingos调查了奥卡姆剃刀在机器学习问题上的主要论点和证据。结论是,更简单的假设应该是首选的,因为简单本身就是一种美德,而不是因为与准确性的假设联系。这也可能是奥卡姆的本意。

可表示不意味着可学习

基本上所有学习器的表示都和“所有函数都可以被表示,或者以无限接近的方式近似表示。”这样的理论相关。为了证明这个定理,表示的拥护者们常常会忽视其他东西。然而,函数可以被表示并不意味着可以被学习。比如,决策树学习器不能学习超过训练集的叶子节点。

在连续空间中,即使用固定基元集表示那怕最简单的函数也常常需要无穷的部分。如果假设空间有评价函数的局部最优,实际上也常常出现,那么即使可以被表示,学习器也许也找不到真正的函数。有了有限的数据、时间和内存,标准学习器只能学习所有函数的小部分子集,而这些子集对表示不同的学习器是不同的。所以关键问题不是“能不能被表示?”因为答案常常不重要,而是“能不能被学习?”这个问题值得去尝试不同的学习器(或者合并它们)。

对于某些函数,有些表示在会比其他函数指数上更紧凑。结果就是,它们可以需要成指数减少的数据来学习函数。有些学习器是通过简单基本函数的线性合成形成的。比如,支持向量机围绕一些训练样本(支持向量)形成内核合成。通过这种方式形成n位的奇偶校验性需要2n的基本函数,但是使用一个表示需要多层(就是在输入和输出之间有好几步),奇偶校验性可以编码在线性大小的分类器里。寻找这种深度表示是现在机器学习的重要前沿。

相关并非因果

相关性不是因果性这个观点可能常常被提到,不太值得在这里赘述。但是,只能用来学习相关性的学习器产生的结果常常被用来表示因果关系,这样错了吗?如果错了,为什么人们这么做呢?

学习预测模型就是用它们作为行动导向。如果我们发现啤酒和尿布常常是一并购买,那么也许把啤酒放在尿布旁边会增加销量。(这是数据挖掘世界的一个著名例子。)但没有实验,也很难判定是否正确。机器学习常常用来观测数据,预测变量常常不受学习器的控制,而实验数据受控。有些学习算法可以从观察数据中提取信息,但是这样的应用还是非常有限。另一方面,相关性是潜在因果联系的标志,所以我们把相关性作为进一步调查的导向(比如,尝试想弄清楚因果链是什么)。

很多研究者认为因果性是一种虚设。例如,在物理定律中就没有因果概念。因果性是不是真的存在是一个很深奥的哲学问题,眼下也没有答案。但在机器学习上还是有两点很实在,首先,不管我们是不是把它们称作“因果”,我们是要为行为做预测,而不是仅仅将观测变量相联系。第二,如果你可以获得实验数据(比如,随机将游客分到了一个网站的不同版本中),那么要一定竭尽全力。

结论

和所有的学科一样,机器学习很大量的“内功心法”难以获得.但是对成功很重要。本文总结了一些突出项目。当然,这也只是传统机器学习的补充。点击http://www. cs.washington.edu/homes/pedrod/class观看完整的在线机器学习课程。在http://www.videolectures.net你会找到机器学习课程的宝藏,还有,Weka是一个很棒的开源机器学习包。

最后,祝你学的开心!

锐眼洞察 | Hadoop 3.0已经发布,未来还有哪些规划?(翻译)

作者:Alex Woodie

原文:Hadoop 3.0 Ships, But What Does the Roadmap Reveal?

译者:TalkingData研发副总裁 阎志涛

本译文禁止商用,转载请注明来源与译者!

译者注: 大数据新技术近几年的飞速发展给Hadoop的发展带来了巨大挑战,不过Hadoop社区也在与时俱进的进行发展。等了几年,我们终于见到了Hadoop 3.0。在Hadoop 3.0当中,我们最期待的无疑就是Erasure Coding。考虑到存储的巨大代价,能够利用EC技术大幅度降低存储开销,无疑能够给大数据公司降低成本。3.0之后Hadoop还有哪些主要的特性呢?这篇文章就给出了答案,比如GPU的支持、FPGA的支持、S3 API兼容的KV存储等等。这些都很值得期待。

如承诺的那样,Apache软件基金会在今年结束前正式发布了Hadoop 3.0。现在Hadoop社区开始将注意力集中在3.1和3.2版本,这两个版本将会在2018年上半年带来更多非常棒的特性。 正如我们两周前所说的那样,Hadoop 3.0带来了两个重大的特性。这两个特性分别是支持EC(Erasure Coding),从而可以利用更有效的数据复制提高存储效率达到50%,以及YARN Federation,可以使得Hadoop集群的规模达到40,000个节点。 “Hadoop 3.0的发布体现了开源社区对于工业界的需求是非常负责任的”, Doug Cutting说。Doug Cutting是Apache Hadoop最初的联合缔造者同时也是Cloudera的首席架构师。“从11年前的原始的工具发展到今天的成熟的软件,这是个非常大的成就”,他在新闻发布会上说。“随着这个里程碑的发布,Hadoop在企业数据系统中作为日益重要的角色可以更好的满足企业的需求”。 但是在Hadoop 3.0中有些新的特性并不是为了马上给用户带来回报,而是为即将到来的3.1和3.2中提供更加引人注目的特性铺平了道路。Hortonworks的工程总监,同时也是Hadoop Apache项目的贡献者Vinod Kumar Vavilapalli认为。 “Hadoop 3.0实际上是一个构建模块,是一个基础,在3.1和3.1版本中将会有更加令人兴奋的事情发生”,他说。Vavilapalli最近给Datanami分享了一部分Hadoop的路线图,如下是这次对话中的一些亮点:

Hadoop 3.1

在3.1中将要支持的一个重要的针对3.0特性的改进,是YARN支持的资源类型。 在Hadoop 2.x时代,YARN仅仅能够识别两种资源:内存和CPU。随着在3.0资源类型的引入,社区已经能够为3.1版本中在Hadoop集群中支持GPU做好了准备。 在Hadoop中将GPU作为头等资源支持将让用户更容易运行亲GPU的工作,比如机器学习和深度学习,Vavilapalli说。 “这个想法是,YARN不需要人们为GPU任务设置独立的分区、独立的机器和独立的集群,YARN将GPU当作一等公民进行支持”, Vavilapalli说。“在YARN上我们已经解决了大量的sharding和多租户的问题。” 另外一个值得关注的特性是开发者们正在努力工作使得Hadoop 3.1的YARN支持Docker容器。Vavilapalli透露,Docker的YARN支持将会包含两个主要的能力,第一个是使得非大数据的任务可以运行在Hadoop上,例如一些容器化的应用。

r-Containers.png

在YARN上支持Docker将为Hadoop任务提供包隔离功能。这是在Hadoop上支持Docker之外的另一项努力。

“除了在YARN上运行MapReduce任务、Spark任务、Hive任务这些传统的大数据任务”,Hortonworks工程师说,“如果一个用户有一个在移动电脑上构建的容器应用,可以在YARN集群上指令,现在运行它的一百份、一千份拷贝,然后YARN就能够完成这些”。 Hadoop 3.1带来的第二个YARN支持Docker的优势是获得包的隔离。一个非常重要的应用场景是保证R和Python库能够在一起工作并且不会引起相互间的兼容性问题。”利用包隔离,你可以创建你自己的包含你的所有的R或者Python库的Docker容器,然后将它交给YARN,YARN就会像在你的便携电脑上运行一样去运行它们”。 Vavilapalli说。 Hadoop 3.1的另外一个主要的特性是被称为YARN Service的功能。利用这个新的特性,YARN将会具备管理在Hadoop上运行长时间的服务的能力,例如输入的Kafka数据流或者一个HBase服务任务。 “运行长时间的服务的目标是,你可以来到YARN指令‘给我在YARN上与其他正在运行的任务并列运行这个长时间任务’,就像运行Spark与Hive,”Vavilapalli说。“我们称之为YARN Service。所以YARN Service是一个我们正在研究的重要特性。”

Hadoop 3.2

Apache Hadoop社区计划利用3.0支持的新的资源类型在3.1支持GPU,如果一切按照计划进行,Hadoop 3.2将会支持FPGA。

altera-fpga.png

FPGA是一种自定义代码处理器

FPGA,或者叫做现场可编程门阵列,是一种为了加速某些特定类型的任务而设计的特殊处理器。Intel在2015年并购了FGPA厂商Altera,在FPGA技术上加大投入以加速高性能计算、AI、数据和视频分析,以及在Xeon集群上的5G处理器。IBM将FGPA加入到了它的Power服务器以提高图数据库的性能和可扩展性。 Hadoop用户拥抱FGPA有两个原因,Vavilapalli说,“一个原因是GPU比较昂贵,一些用户寻求把FPGA作为一个解决他们问题的廉价解决方案“,他说,“另外,有些问题只能用FPGA来解决,这两个原因驱动了YARN支持FPGA。” Hadoop社区正投身于支持FPGA的工作, Vavilapalli说,也有可能这个特性会在3.1中包含。”现在并不十分确定它会包含在3.1还是3.2中,但是YARN很久就能够支持FPGA了”,他说。 Hadoop 3.2支持的另外一个重要的特性是叫做OZone的kv存储。OZone将会包含S3兼容的API存储,并且会针对不适合存储在HDFS上的小文件做优化。

-MW-3D-balls.png

臭氧(Ozone),或者说O3,避免地球受到有害的紫外线辐射。

HDFS最初的设计是存储相对大的文件,文件一次写入,多次读取。Vavilappalli说。“随着时间的推进,我们发现新的任务需要存储小的对象,它可能是一个照片或者视频。这些不是典型的Hadoop任务,因此需要存储大量的小对象,并且人们只能使用HDFS去存储它们。 OZone将更适合存储这类对象。存储容器将会提供一个与S3兼容的存储API。S3-Simple Storage Service由Amazon开发,是在全球数百个数据中心的百万台机器上存储ZB级别数据的存储。 随着AWS的兴起,S3 API变成了事实的存储标准。SaaS软件提供商将他们的客户数据存储在S3上,在云上运行Hadoop或者类似于Hadoop的任务去处理这些数据。 “社区正在努力的将它变得像S3 API,因为S3 API是所有kv存储的标准”,Vavilaplli说。 “它看起来像S3,但是使用在本地部署的Hadoop集群”。 虽然基于云的Hadoop任务比如Amazon EMR和Qubole,甚至Hadoop发行商Cloudera和Hortonworks的云产品都使用S3, OZone被设计为既可以在云端部署也可以在企业私有部署。 “云是今天的主流力量,但是我们最终会使用包含云和私有部署的混合结构”,Vavilapalli说。“为了使得应用可以无缝地在私有部署和云端运行,我们需要在私有部署拥有类似的能力,而OZone就是解决这个鸿沟的解决方案。让这些应用写kv API并且使得它既可以运行在私有部署,也可以运行在云端。这无疑是非常强大的创举并且未来用户将会非常愿意使用它。” Hadoop 3.2将会在第二个季度末交付,尽管具体交付日期可能会调整,Vavilapalli说。Apache社区正在努力加速项目的发布进度,并且希望能够每三个月就发布一个主要的升级,他说。

锐眼洞察 | 在员工培训中利用大数据的4种方法(翻译)

作者:insideBIGDATA编辑部

原文:4 Ways to Use Big Data in Employee Training

译者:TalkingData 曾晓春

本译文禁止商用,转载请注明来源与译者!

大数据及其背后的技术已经成为推动现代企业发展的主要因素之一。一个IDG Research的研究发现,80%的大型企业和63%的小型企业正在使用或计划部署大数据解决方案。分析从公司各种活动中收集的信息,能够使公司作出更明智和及时的决策。

即使整合的数据量不断增加,如果不是快速分析和多种需求的结构,它也没有什么价值。数据科学家和更好的大数据工具的需求一直在增长,因为它包含了更多的业务功能。

其中之一就是员工培训。可以分析技能开发中产生的数据以提高培训效率。以下是一些大数据可以在培训过程中节省公司时间和资金。

确定培训需求

性能分析可以指出企业内部需要何种培训,包括特定的工作角色、团队或个人雇员需要进行的培训。然后,公司可以选择课程,以确定应涵盖的技能和主题,并找到最合适的培训计划。

有种各样可以使用的方法,例如教室布局、在线课程、小组研讨会或示范。您必须评估您的选择,以选择最适合您的员工能力,工作时间表和企业需求的培训。同时也需要购买或准备需要的材料以支撑教学需要的技巧和信息。这可以是印刷或数字文件、视觉辅助工具、技术和工具的混合。大数据可以指导你正确的购买。

个性化的方法

人力资源经理可以使用分析来定义员工能力的特定优势或劣势,并进行必要的调整。应该对每个培训计划进行监控,以确保培训过程和结果的有效性。这可能需要更个性化或更具创造性的技巧。

先进的教育技术可以让您对每个员工进行评估,并根据每个人的进展进行个性化的定制培训策略。大数据可以将每个受训者的测试分数与更大的数据集(如人口统计数据和测试历史)相结合,以确定哪些方法是有效的,以及哪些需要进行强化或再训练。持续评估将显示哪些培训模块对某些员工最有效。

不断的改进

通过对培训数据的分析,人力资源和高级管理人员可以不断改进培训计划。大数据可以更清楚地了解哪些模块有效,哪些主题难以学习,以及员工如何与提供给他们的材料和培训形式进行交互。通过访问基于云的分析工具,您可以实时查看更新,并在培训继续时调整您的方法。

远程员工也是如此。云为越来越多的移动劳动力提供了一个非常灵活的数据和服务解决方案。云计算使虚拟员工无需前往办公室即可获得企业培训的所有好处。

不断增长的学员表现和对不同科目的反馈数据将为提高培训效率提出建议。

未来的期望

我们会看到大数据和可持续实践将是未来的两大商业趋势。两者都促进流程的优化以获得更高的利润率。确保你的团队有足够的核心业务活动和不断变化的技术培训,帮助你的企业在未来保持盈利。

大数据还可以预测未来的发展趋势。在商业竞争开始之前,你将能够适应训练计划。21世纪的商业环境中,接受社会责任将会提高你的品牌和员工的积极性。消费者期望负责任的做法,而工人可以有信心提高职业技能。

培训员工参与可持续发展是关键的一步。通过在培训项目中利用大数据技术,您可以为您的员工提供新的机会,为您的公司带来更多可持续的利润。

结论

大数据和分析工具是现代企业必不可少的资产。当应用于改善培训计划时,员工的情绪会得到更大的改善,他们的技能会增加公司的利润。不断增长的数据将有助于提高结果的准确性,同时预测趋势和培训需求将创建更加灵活的业务模式。

有效地获取和构建培训操作中的数据,使您能够执行大数据分析,从而提高产出、质量和员工参与度。持续的改进使您有可能更快、更持续地提升员工技能,以满足云计算和远程工作人员等新的员工发展需求。

大数据使您能够预测市场和行业趋势,从而使公司内的员工可以获得所需的培训。作为个人或组织,团队将能够更加顺畅和高效地适应业务变化。

锐眼洞察 | 利用Apache Arrow来加速PySpark(翻译)

作者:Bryan Cutler

原文:Speeding up PySpark with Apache Arrow

译者:TalkingData首席架构师 黄洋成(YC)

本译文禁止商用,转载请注明来源与译者!

 

Apache Spark 2.3版本开始,Apache Arrow成为一个被支持的依赖组件,可以为列式数据传输提供更好的性能。如果你是一个Spark用户,但是偏好利用Python和Pandas,那你应该有理由兴奋!目前初步的工作(下面会介绍到)还局限于加速 toPandas() 里从Spark的DataFrame中传递数据;但有一大波其他的改进正在路上

优化从Spark到Pandas的数据转换

以前在PySpark里利用 DataFrame.toPandas() 将数据从Spark DataFrame转换到Pandas是非常低效的。基本上其工作机制是:首先从Spark driver把所有的行汇集起来,然后每一行都会被序列化为Python的pickle格式,发给Python的worker进程;这个子进程会反序列化每一行,拼成一个大list;最后利用 pandas.DataFrame.from_records() 从这个list来创建一个Pandas DataFrame。

这听起来像是一个标准过程,但有两个明显问题:1)即使使用CPickle,Python的序列化也是一个很慢的过程;2)利用 from_records 来创建一个 pandas.DataFrame 需要遍历Python list,将每个value转换成Pandas格式,这里有对这个过程的详细分析。

Arrow可以优化这几个步骤:1)一旦数据变成了Arrow的内存格式,就不再有序列化的需要,因为Arrow数据可以直接发送到Python进程;2)当在Python里接收到Arrow数据后,pyarrow可以利用zero-copy技术,一次性的从整片数据来创建 pandas.DataFrame,而不需要轮询去处理每一行记录。另外转换成Arrow数据的过程可以在JVM里并行完成,这样可以显著降低driver的压力。

在SPARK-13534的归并中,要在 toPandas() 里打开使用Arrow的功能,需要将SQLConf里的设置“spark.sql.execution.arrow.enabled” 设为 “true”。下面让我们来看一个简单的例子:

图片 1

 

这是在笔记本电脑上面跑的,所以显示的执行时间未必精确;但是可以看出使用Arrow后性能有了巨大的提升(从20.7s降低到737ms)。

使用的注意事项

下边是使用这个feature时候需要注意的地方:目前pyarrow还不会随着安装pyspark自动安装,而是需要手动安装(参考安装指南)。计划会把pyarrow作为pyspark的一个依赖组件,那样 > pip install pyspark 就会自动把pyarrow也装上了。

目前SQLConf里的enable Arrow的设置缺省是关闭的,需要在程序里手动打开(如上边例子所示),或者也可以收到修改 SPARK_HOME/conf/spark-defaults.conf,加上一行“spark.sql.execution.arrow.enabled=true”。

另外不是所有Spark的数据类型都是支持的,目前只支持基础数据类型。扩展的数据类型支持正在开发中,预期能包含在Spark 2.3版本的发布里。

将来的改进计划

记住这只是利用Arrow来让提升Spark Python的用户体验的一小步。一些激动人心的提议包括UDF的向量化执行(SPARK-21190SPARK-21404),可以apply一个function到Pandas DataFrame(SPARK-20396)。另外就像Arrow能帮到数据从Spark转换到Pandas一样,他也可以帮助从Pandas DataFrame转换为Spark DataFrame(SPARK-20791)。