Spark机器学习进阶实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-31 03:54:35

点击下载

作者:马海平

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Spark机器学习进阶实战

Spark机器学习进阶实战试读:

前言

上善若水,水善利万物而不争。

数据一如水,无色无味,非方非圆,以百态存于自然,于自然无违也。绵绵密密,微则无声,巨则汹涌;与人无争却又容纳万物。生活离不开水,同样离不开数据,我们被数据包围,在数据中生活,体会着数据量爆炸式增长带来的幸福和挑战。

本书从《道德经》和《庄子》精选名言,并结合大数据机器学习相关内容,对名言加以讲解,引导大家以老庄的思想认识大数据的内涵,使用机器学习进行大数据价值挖掘,探求老子道之路和庄子智慧之路。为什么要写这本书

2014年春天,曾经和公司大数据团队小伙伴一起聚焦研究大数据,为了解决国内资料匮乏、学习门槛较高的问题,着手编写《Spark核心技术与高级应用》一书,并于2016年1月出版,取得了较好的反响,得到很多朋友的支持。

近年来,随着收集、存储和分析的数据量呈爆炸式增长,大规模的数据分析和数据价值挖掘能力已经成为影响企业生死存亡的关键,越来越多的企业必须面对这残酷而美好的挑战。基于大数据的机器学习有效解决了大数据带来的数据分析和数据挖掘瓶颈。

如何让更多的大数据从业人员更轻松地使用机器学习算法进行大数据价值挖掘,通过简单的学习建立大数据环境下的机器学习工程化思维,在不必深究算法细节的前提下,实现大数据分类、聚类、回归、协同过滤、关联规则、降维等算法,并使用这些算法解决实际业务场景的问题。2016年秋天,在机械工业出版社高婧雅编辑的指导下,怀着一颗附庸风雅之心,我决定和小伙伴们一起朝着新的目标努力。

本书的写作过程中,Spark版本也在不断变化,秉承大道至简的原则,我们一方面尽量按照新的版本进行统筹,另外一方面尽量做到和版本解耦,希望能抛砖引玉,以个人的一些想法和见解,为读者拓展出更深入、更全面的思路。

本书只是一个开始,如何使用机器学习算法从海量数据中挖掘出更多的价值,还需要无数的大数据从业人员前赴后继,突破漫漫雄关,共同创造美好的大数据机器学习时代。本书特色

本书介绍大数据机器学习的算法和实践,同时对传统文化进行了一次缅怀,吸收传统文化的精华,精选了《道德经》和《庄子》部分名言,实现大数据和哲学思想的有效统一。结合老子的“无为”和庄子的“天人合一”思想,引导读者以辩证法思考方式认识大数据机器学习的内涵。

从技术层面上,本书一方面基于Spark现有的机器学习库讲解,另一方面尽量做到和现有Spark版本中的机器学习库解耦,突出对大数据机器学习的宏观理解,并给出典型算法的工程化实现,使更多的人轻松使用机器学习进行大数据价值挖掘,从而建立大数据机器学习工程化思维,在不必深究算法细节的前提下有效解决实际问题。本书更加强调在实际场景中的应用,并有针对性地给出了综合应用场景。

从适合读者阅读和掌握知识的结构安排上讲,本书分“基础篇”“算法篇”“综合应用篇”三个维度层层推进,便于读者在深入理解基础上根据相应的解决思路找到适合自己的方案。

本书使用的机器学习算法和应用场景都是实际业务的抽象,并基于具体业务进行实现。作为本书的延续,接下来我们会聚焦应用实践并提供更深层次的拓展,专注知识图谱的技术与应用,以及Bot技术与构建实战,期待相关图书能和读者尽早见面。读者对象(1)对大数据感兴趣的读者

伴随着大数据时代的到来,很多工作都和大数据息息相关,无论是传统行业、互联网行业,还是移动互联网行业,都必须要了解大数据,通过大数据发现自身的价值。对这部分读者来说,本书的内容能够帮助他们加深对大数据/机器学习及其演进趋势的理解,通过本书可以了解机器学习相关算法,以及Spark机器学习应用场景和存在价值,如果希望更深层次地掌握Spark机器学习相关知识,本书可以作为一个很好的开始。(2)从事大数据机器学习算法的研究人员

本书基于分类、聚类、回归、关联规则、协同过滤、降维等算法,结合异常检测、用户画像、广告点击率预估、企业征信大数据、智慧交通大数据等场景,系统地讲解了Spark机器学习相关知识,对从事大数据算法的研究人员来说,能够身临其境地体验各种场景,了解各类算法在不同场景下的优缺点,减少自己的研究成本。本书对生产环境中遇到的算法建模、数据挖掘等问题有很好的借鉴作用。(3)大数据工程开发人员

大数据工程开发人员可以从本书中获取需要的机器学习算法工程化知识。对大数据工程开发人员来说,掌握并快速对算法进行工程化,是很重要的技能,本书为填补算法工程开发人员与算法研究人员之间的鸿沟、高效工作提供了更多可能。(4)大数据架构设计人员

基于大数据的采集、存储、清洗、实时计算、统计分析、数据挖掘等是大数据架构师必备技能。他们需要对Spark机器学习进行了解,才能在架构设计中综合考虑各种因素,构建稳定高效的大数据架构。如何阅读本书

本书分为三篇,共计13章内容。

基础篇(第1和2章),对机器学习进行概述讲解,并通过Spark机器学习进行数据分析。

算法篇(第3~8章),针对分类、聚类、回归、关联规则、协同过滤、降维等算法进行详细讲解,并进行算法建模应用实现。

综合应用篇(第9~13章),综合异常检测、用户画像,引出广告点击率预估,并对企业征信大数据、智慧交通大数据等场景进行实践,详细讲解基于Spark的大数据机器学习综合应用。勘误和支持

由于笔者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,可以通过大数据技术交流QQ群435263033,或者邮箱datadance@163.com联系我们,期待能够得到大家的真挚反馈,在大数据和人工智能征程中互勉共进。致谢

感谢亲爱的搭档马海平、吕昕、向海三位大数据专家以及谭昶博士,在本书写作遇到困难的时候,我们一直互相鼓励,牺牲休息时间,坚持不放弃。

感谢大数据团队的张志勇、张龙、陈爱华、杨柳、俞祥祥、王庆庆、牛鑫、谢榭、李雅洁,以及廖攀、覃雪辉等小伙伴,你们为本书的修改贡献了宝贵的智慧,你们的参与使本书更上一层楼。

本书使用了部分互联网测试数据,包括:Stanford的gowalla数据、360的应用市场数据、UCI的鸢尾花卉数据和裙子销售数据、数据堂的豆瓣电影评分数据、Digit数据集、新闻App的用户行为数据、某运营商手机信令数据、某地图路况的道路拥堵指数数据,在这里进行特别感谢。

最后特别祝福本书写作期间出生的马海平家的二宝和向海家的二宝,你们的出生代表了大数据机器学习有了新的传承,也让我们的努力变得更有意义。

谨以此书献给大数据团队的小伙伴,以及众多热爱大数据机器学习技术的朋友!于俊2018年8月第一篇基础篇·第1章 机器学习概述·第2章 数据分析流程和方法第1章机器学习概述

慎终如始,则无败事。——《道德经》第六十四章

谨慎地做到最终,就像开始时一样,就不会有失败和差错。

但凡人们办事时,容易虎头蛇尾,开始时认真﹑细致、谨慎、严肃,久后则敷衍、马虎、粗心、草率,这样往往事倍功半。办任何事情,自始至终都应慎之又慎,这样才不会出现差错。故老子用“慎终如始”告诫人们办事应有始有终,始终如一,这样才不至于把事情办糟,大数据机器学习实践之路也是如此。

本章从机器学习的相关基本概念讲起,包括大数据、机器学习、大数据生态中的机器学习,并针对机器学习算法进行分类归纳,总结机器学习的综合应用场景。1.1 机器学习概述

随着大数据的发展,机器学习进入了最美好的时代,通过“涟漪效应”逐步迭代,大数据推动机器学习真正实现落地。

接下来,我们从大数据讲起,扩展到机器学习的发展和大数据生态。1.1.1 理解大数据

提起大数据,人们会不由地想起盲人摸象的故事。

从前,有四个盲人很想知道大象是什么样子,可他们看不见,只好用手摸。胖盲人摸到大象的牙齿,认为大象就像一个又大、又粗、又光滑的大萝卜;高个子盲人摸到大象的耳朵,认为大象是一把大蒲扇;矮个子盲人摸到了大象的腿,认为大象只是根大柱子;年老的盲人摸到大象的尾巴,认为大象只是一根草绳。如图1-1所示,四个盲人争吵不休,都说自己摸到的才是大象真正的样子。图1-1 “盲人摸象”故事

从这个故事可以看出,数据源越多越精确,越能无限逼近事实和真相,越能获得更深邃的智慧和洞察,这就是大数据的价值。“大数据(Big Data,BD)”的概念早已有之,1980年著名未来学家阿尔文·托夫勒在《第三次浪潮》一书中,将大数据热情地赞颂为“第三次浪潮的华彩乐章”。近几年,“大数据”和“物联网”“云计算”“人工智能”一道成为信息技术行业的流行词汇,理清楚它们的关系是理解大数据的前提,但是和大数据概念一样,每个人都有自己的理解。

徐宗本院士在“再论大数据——在人工智能的浪潮下对大数据的再认识”报告中提出大数据与其他信息技术的关系:物联网是“交互方式”,云计算是“基础设施”,人工智能是“场景应用”,大数据是“交互内容”。大数据使用物联网交互方式、存储在云计算基础设施、支持人工智能场景应用,生成完整的价值链。图1-2 物联网、云计算、大数据生态链

陈国良院士在“大数据与高性能计算”报告中提出了物联网(IoT)、大数据(BD)、云计算(CC)生态链,如图1-2所示。①IoT通过采集与捕获产生了BD;②BD为CC找到了更多的实际应用;③CC为BD提供了弹性可扩展的存储和并行处理;④BD为IoT产生了大价值,云计算与高性能计算是一对在出生时被分开的兄弟,两者相结合得到的高性能云计算能产生更大的价值。

总之,大数据的存储、处理需要云计算基础设施的支撑,云计算需要海量数据的处理能力证明自身的价值;人工智能技术的进步离不开云计算能力的不断增长,云计算让人工智能服务无处不在、触手可及;大数据的价值发现需要高效的人工智能方法,人工智能的自我学习需要海量数据的输入。随着大数据和人工智能的深度融合,高度数据化的AI(人工智能)和高度智能化的DT(大数据技术)并存将是时代新常态。1.1.2 机器学习发展过程

机器学习(Machine Learning,ML)是人工智能的核心,涉及统计学、系统辨识、逼近理论、神经网络、优化理论、计算机科学、脑科学等诸多领域,研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构从而不断改善自身的性能。

相对于传统机器学习利用经验改善系统自身的性能,现在的机器学习更多是利用数据改善系统自身的性能。基于数据的机器学习是现代智能技术中的重要方法之一,它从观测数据(样本)出发寻找规律,利用这些规律对未来数据或无法观测的数据进行预测。

机器学习的发展过程分为三个阶段。

第一阶段,逻辑推理期(1956年——1960年),以自动定理证明系统为代表,如西蒙与纽厄尔的Logic Theorist系统,但是逻辑推理存在局限性。

第二阶段,知识期(1970年——1980年),以专家系统为代表,如费根·鲍姆等人的DENDRAL系统,存在要总结出知识、很难“教”给系统的问题。

第三阶段,学习期(1990年至今),机器学习是作为“突破知识工程瓶颈”之利器出现的。在20世纪90年代中后期,人类发现自己淹没在数据的海洋中,机器学习也从利用经验改善性能转变为利用数据改善性能。这阶段,人们对机器学习的需求也日益迫切。

典型的机器学习过程是以算法、数据的形式,利用已知数据标注未知数据的过程。如图1-3所示,首先需要将数据分为训练集和样本集(训练集的类别标记已知),通过选择合适的机器学习算法,将训练数据训练成模型,通过模型对新样本集进行类别标记。图1-3 典型的机器学习过程

使用机器学习解决实际问题需要具体问题具体分析,根据场景进行算法设计。1.1.3 大数据生态环境

在大数据生态环境中,包括数据采集、数据存储、数据预处理、特征处理、模型构建、数据可视化等,通过分类、聚类、回归、协同过滤、关联规则等机器学习方法,深入挖掘数据价值,并实现数据生态的良性循环。

如同海量数据存储在云计算设备中,水存储在江河湖海之中;数据采集可以理解为从各种渠道聚集水进入江河湖海;数据预处理可以理解为水之蒸发、过滤、提取形成天上云的过程;云进行特征的自我变化和重组,最终形成可以转变的状态;基于机器学习的模型构建,即可以理解为不同天气状况下的云转变成雨水、雪花、冰雹、寒霜、雾气的变化过程。

水存储在江河湖海中,经过蒸发、过滤、提取形成云,云自我变化、重组,而在不同天气下转变成雨水、雪花、冰雹、寒霜、雾气过程的可视化观察,可以理解为人对自然把握和发现的过程。

数据流转生态如图1-4所示。图1-4 数据流转生态

可以简单抽象一下,云转换成雨水、雪花、冰雹、寒霜、雾气的过程就是分类的过程,云按照任何一种变化(如雨水)汇集的过程就是聚类的过程。根据历史雨水的情况,预测即将降雨的情况就是回归过程。在某种气候条件下,雨水和雪花会并存,产生“雨夹雪”的天气情况,这就是关联过程。根据对雨水、雪花、冰雹、寒霜、雾气的喜好程度,选择观察自己喜好的天气,就是协同过滤的过程。导致天气变化的因素很多(很多和雾霾有关),处理起来有难度,在不丧失主要特征的情况,去掉部分特征,这个过程就是特征降维的过程。

通过模拟人类大脑的神经连接结构,将各种和雾霾相关的天气特征转换到具有语义特征的新特征空间,自动学习得到层次化的特征表示,从而提高雾霾的预报性能,这就是深度学习过程。1.2 机器学习算法

根据学习方法不同可以将机器学习分为传统机器学习、深度学习、其他机器学习。参考Kaggle机器学习大调查,数据科学中更常见的还是传统经典的机器学习算法,简单的线性与非线性分类器是数据科学中最常见的算法,功能强大的集成方法也十分受欢迎。

最常用的数据科学方法是逻辑回归,而国家安全领域则更为频繁使用神经网络。总的来说,目前神经网络模型的使用频率要高于支持向量机,这可能是因为近来多层感知机要比使用带核函数的SVM有更加广泛的表现。1.2.1 传统机器学习

传统机器学习从一些观测(训练)样本出发,试图发现不能通过原理分析获得的规律,实现对未来数据行为或趋势的准确预测。传统机器学习平衡了学习结果的有效性与学习模型的可解释性,为解决有限样本的学习问题提供了一种框架,主要用于有限样本情况下的模式分类、回归分析、概率密度估计等。传统机器学习方法的重要理论基础之一是统计学,在自然语言处理、语音识别、图像识别、信息检索和生物信息等许多计算机领域获得了广泛应用。

相关算法包括逻辑回归、隐马尔可夫方法、支持向量机方法、K近邻方法、三层人工神经网络方法、Adaboost算法、贝叶斯方法以及决策树方法等。(1)分类方法

分类方法是机器学习领域使用最广泛的技术之一。分类是依据历史数据形成刻画事物特征的类标识,进而预测未来数据的归类情况。目的是学会一个分类函数或分类模型(也称作分类器),该模型能把数据集中的事物映射到给定类别中的某一个类。在分类模型中,我们期望根据一组特征来判断类别,这些特征代表了物体、事件或上下文相关的属性。(2)聚类方法

聚类是指将物理或抽象的集合分组成为由类似的对象组成的多个类的过程。由聚类生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。在许多应用中,一个簇中的数据对象可作为一个整体来对待。在机器学习中,聚类是一种无监督的学习,在事先不知道数据分类的情况下,根据数据之间的相似程度进行划分,目的是使同类别的数据对象之间的差别尽量小,不同类别的数据对象之间的差别尽量大。通常使用KMeans进行聚类,聚类算法LDA是一个在文本建模中很著名的模型,类似于SVD、PLSA等模型,可以用于浅层语义分析,在文本语义分析中是一个很有用的模型。(3)回归方法

回归是根据已有数值(行为)预测未知数值(行为)的过程,与分类模式分析不同,预测分析更侧重于“量化”。一般认为,使用分类方法预测分类标号(或离散值),使用回归方法预测连续或有序值。如用户对这个电影的评分是多少?用户明天使用某个产品(手机)的概率有多大?常见的预测模型基于输入的用户信息,通过模型的训练学习,找出数据的规律和趋势,以确定未来目标数据的预测值。(4)关联规则

关联规则是指发现数据中大量项集之间有趣的关联或相关联系。挖掘关联规则的步骤包括:①找出所有频繁项集,这些项集出现的频繁性至少和预定义的最小支持计数一样;②由频繁项集产生强关联规则,这些规则必须满足最小支持度和最小置信度。随着大量数据不停地收集和存储,许多业界人士对从数据集中挖掘关联规则越来越感兴趣。从大量商务事务记录中发现有趣的关联关系,可以帮助制定许多商务决策。通过关联分析发现经常出现的事物、行为、现象,挖掘场景(时间、地点、用户性别等)与用户使用业务的关联关系,从而实现因时、因地、因人的个性化推送。(5)协同过滤

随着互联网上的内容逐渐增多,人们每天接收的信息远远超出人类的信息处理能力,信息过载日益严重,因此信息过滤系统应运而生。信息过滤系统基于关键词,过滤掉用户不想看的内容,只给用户展示感兴趣的内容,大大地减少了用户筛选信息的成本。协同过滤起源于信息过滤,与信息过滤不同,协同过滤分析用户的兴趣并构建用户兴趣模型,在用户群中找到指定用户的相似兴趣用户,综合这些相似用户对某一信息的评价,系统预测该指定用户对此信息的喜好程度,再根据用户的喜好程度给用户展示内容。(6)特征降维

特征降维自20世纪70年代以来获得了广泛的研究,尤其是近几年以来,在文本分析、图像检索、消费者关系管理等应用中,数据的实例数目和特征数据都急剧增加,这种数据的海量性使得大量机器学习算法在可测量性和学习性能方面产生严重问题。例如,具有成百上千特征的高维数据集,会包含大量的无关信息和冗余信息,这些信息可能极大地降低学习算法的性能。因此,当面临高维数据时,特征降维对于机器学习任务显得十分重要。特征降维从初始高维特征集中选出低维特征集合,以便根据一定的评估准则最优化、缩小特征空间的过程,通常作为机器学习的预处理步骤。大量研究实践证明,特征降维能有效地消除无关和冗余特征,提高挖掘任务的效率,改善预测精确性等学习性能,增强学习结果的易理解性。1.2.2 深度学习

深度学习又称为深度神经网络(指层数超过3层的神经网络),是建立深层结构模型的学习方法。深度学习作为机器学习研究中的一个新兴领域,由Hinton等人于2006年提出。深度学习源于多层神经网络,其实质是给出了一种将特征表示和学习合二为一的方式。深度学习的特点是放弃了可解释性,单纯追求学习的有效性。经过多年的摸索尝试和研究,已经产生了诸多深度神经网络的模型,包括深度置信网络、卷积神经网络、受限玻尔兹曼机和循环神经网络等。其中卷积神经网络、循环神经网络是两类典型的模型。卷积神经网络常应用于空间性分布数据;循环神经网络在神经网络中引入了记忆和反馈,常应用于时间性分布数据。

深度学习框架一般包含主流的神经网络算法模型,提供稳定的深度学习API,支持训练模型在服务器和GPU、TPU间的分布式学习,部分框架还具备在包括移动设备、云平台在内的多种平台上运行的移植能力,从而为深度学习算法带来了前所未有的运行速度和实用性。

目前主流的开源算法框架有TensorFlow、Caffe/Caffe2、CNTK、MXNet、PaddlePaddle、Torch/PyTorch、Theano等。

深度学习是机器学习研究中的一个分支领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像、声音和文本。从技术上来看,深度学习就是“很多层”的神经网络,神经网络实质上是多层函数嵌套形成的数据模型。

伴随着云计算、大数据时代的到来,计算能力的大幅提升,深度学习模型在计算机视觉、自然语言处理、语音识别等众多领域都取得了较大的成功。1.2.3 其他机器学习

此外,机器学习的常见算法还包括迁移学习、主动学习和演化学习等。(1)迁移学习

迁移学习是指当在某些领域无法取得足够多的数据进行模型训练时,利用另一领域的数据获得的关系进行学习。迁移学习可以把已训练好的模型参数迁移到新的模型,指导新模型训练,更有效地学习底层规则、减少数据量。目前的迁移学习技术主要在变量有限的小规模应用中使用,如基于传感器网络的定位、文字分类和图像分类等。未来迁移学习将被广泛应用于解决更有挑战性的问题,如视频分类、社交网络分析、逻辑推理等。(2)主动学习

主动学习通过一定的算法查询最有用的未标记样本,并交由专家进行标记,然后用查询到的样本训练分类模型来提高模型的精度。主动学习能够选择性地获取知识,通过较少的训练样本获得高性能的模型,最常用的策略是通过不确定性准则和差异性准则选取有效的样本。(3)演化学习

演化学习基于演化算法提供的优化工具设计机器学习算法,针对机器学习任务中存在大量的复杂优化问题,应用于分类、聚类、规则发现、特征选择等机器学习与数据挖掘问题。演化算法通常维护一个解的集合,并通过启发式算子来从现有的解产生新解,并通过挑选更好的解进入下一次循环,不断提高解的质量。演化算法包括粒子群优化算法、多目标演化算法等。1.3 机器学习分类

机器学习无疑是当前数据分析领域的一个热点内容。很多人在平时工作中都或多或少会用到机器学习算法。机器学习按照学习形式进行分类,可分为监督学习、无监督学习、半监督学习、强化学习等。区别在于,监督学习需要提供标注的样本集,无监督学习不需要提供标注的样本集,半监督学习需要提供少量标注的样本,而强化学习需要反馈机制。1.3.1 监督学习

监督学习是利用已标记的有限训练数据集,通过某种学习策略/方法建立一个模型,实现对新数据/实例的标记(分类)/映射。监督学习要求训练样本的分类标签已知,分类标签的精确度越高,样本越具有代表性,学习模型的准确度越高。监督学习在自然语言处理、信息检索、文本挖掘、手写体辨识、垃圾邮件侦测等领域获得了广泛应用。

监督学习的输入是标注分类标签的样本集,通俗地说,就是给定了一组标准答案。监督学习从这样给定了分类标签的样本集中学习出一个函数,当新的数据到来时,就可以根据这个函数预测新数据的分类标签。监督学习过程如图1-5所示。图1-5 监督学习流程图

在监督学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对反垃圾邮件系统中的“垃圾邮件”“非垃圾邮件”分类等。在建立预测模型的时候,监督学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断调整预测模型,直到模型的预测结果达到一个预期的准确率。

最典型的监督学习算法包括回归和分类等。1.3.2 无监督学习

无监督学习是利用无标记的有限数据描述隐藏在未标记数据中的结构/规律。无监督学习不需要训练样本和人工标注数据,便于压缩数据存储、减少计算量、提升算法速度,还可以避免正负样本偏移引起的分类错误问题,主要用于经济预测、异常检测、数据挖掘、图像处理、模式识别等领域,例如组织大型计算机集群、社交网络分析、市场分割、天文数据分析等。

无监督学习与监督学习相比,样本集中没有预先标注好的分类标签,即没有预先给定的标准答案。它没有告诉计算机怎么做,而是让计算机自己去学习如何对数据进行分类,然后对那些正确分类行为采取某种形式的激励。在无监督学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法、KMeans算法、随机森林(random forest)、主成分分析(principal component analysis)等。1.3.3 半监督学习

半监督学习介于监督学习与无监督学习之间,其主要解决的问题是利用少量的标注样本和大量的未标注样本进行训练和分类,从而达到减少标注代价、提高学习能力的目的。

在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是该模型首先需要学习数据的内在结构以便合理地组织数据进行预测。

应用场景包括分类和回归,算法包括一些对常用监督学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理(graph inference)算法或者拉普拉斯支持向量机(Laplacian SVM)等。1.3.4 强化学习

强化学习是智能系统从环境到行为映射的学习,以使强化信号函数值最大。由于外部环境提供的信息很少,强化学习系统必须靠自身的经历进行学习。强化学习的目标是学习从环境状态到行为的映射,使得智能体选择的行为能够获得环境的最大奖赏,使得外部环境对学习系统在某种意义下的评价为最佳。其在机器人控制、无人驾驶、下棋、工业控制等领域获得成功应用。

在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式。在强化学习下,输入数据直接反馈到模型,模型必须对此立刻做出调整。常见的应用场景包括动态系统以及机器人控制等。

常见算法包括Q-Learning以及时间差学习(temporal difference learning)。1.4 机器学习综合应用

机器学习的应用贯穿古今,《草船借箭》是三国赤壁之战里的著名桥段,借箭由周瑜故意提出(限十天造十万支箭),机智的诸葛亮一眼识破这是一条害人之计,却淡定表示“只需要三天”。后来,有大雾天帮忙,诸葛亮再利用曹操多疑的性格,调了几条草船诱敌,终于借足十万支箭,立下奇功,如图1-6所示。图1-6 草船借箭与大数据“草船借箭”和大数据有什么关系呢?

首先它涉及数据收集,收集多元化的“非结构”类型的数据;其次涉及数据分析,基于对风、云、温度、湿度、光照和所处节气的综合分析得到大雾天的预测,便于实施草船借箭。

机器学习已经“无处不在”,应用遍及人工智能的各个领域,包括数据挖掘、计算机视觉、自然语言处理、语音和手写识别、生物特征识别、搜索引擎、医学诊断、信用卡欺诈检测、证券市场分析、汽车自动驾驶、军事决策等。

下面我们从异常检测、用户画像、广告点击率预估、企业征信大数据应用、智慧交通大数据应用等方面介绍大数据的综合应用。1.4.1 异常检测

异常是指某个数据对象由于测量、收集或自然变异等原因变得不同于正常的数据对象的场景,找出异常的过程,称为异常检测。根据异常的特征,可以将异常分为以下三类:点异常、上下文异常、集合异常。

异常检测的训练样本都是非异常样本,假设这些样本的特征服从高斯分布,在此基础上估计出一个概率模型,用该模型估计待测样本属于非异常样本的可能性。异常检测步骤包括数据准备、数据分组、异常评估、异常输出等步骤。

使用某新闻App用户行为数据进行异常检测实践,详见第9章。1.4.2 用户画像

用户画像的核心工作就是给用户打标签,标签通常是人为规定的高度精炼的特征标识,如年龄、性别、地域、兴趣等。由这些标签集合能抽象出一个用户的信息全貌,每个标签分别描述了该用户的一个维度,各个维度相互联系,共同构成对用户的整体描述。

构建用户画像的第一步就是搞清楚需要构建什么样的标签,而构建什么样的标签是由业务的需求和数据的实际情况共同决定的。用户画像能够用于产品定位、竞品分析、营收分析等,为产品设计方向与决策提供数据支持和事实依据。在产品的运营和优化中,根据用户画像能够深入理解用户需求,从而设计出更适合用户的产品,提升用户体验。

使用某新闻App用户行为数据构建用户画像的流程和一些常用的标签体系实践,详见第10章。1.4.3 广告点击率预估

互联网广告是互联网公司主要的盈利手段,互联网广告交易的双方是广告主和媒体。为自己的产品投放广告并为广告付费;媒体是有流量的公司,如各大门户网站、各种论坛,它们提供广告的展示平台,并收取广告费。

广告点击率(Click Through Rate,CTR)是指广告的点击到达率,即广告的实际点击次数除以广告的展现量。在实际应用中,我们从广告的海量历史展现点击日志中提取训练样本,构建特征并训练CTR模型,评估各方面因素对点击率的影响。当有新的广告位请求到达时,就可以用训练好的模型,根据广告交易平台传过来的相关特征预估这次展示中各个广告的点击概率,结合广告出价计算得到的广告点击收益,从而选出收益最高的广告向广告交易平台出价。

构建用户画像后,进行CTR模型的训练实践,详见第11章。1.4.4 企业征信大数据应用

征信是指为信用活动提供信用信息服务,通过依法采集、整理、保存、加工企业、事业单位等组织的信用信息和个人的信用信息,并提供给信息使用者。征信是由征信机构、信息提供方、信息使用方、信息主体四部分组成,综合起来,形成了一个整体的征信行业的产业链。

征信机构向信息提供方采集征信相关数据,信息使用方获得信息主体的授权以后,可以向征信机构索取该信息主体的征信数据,从征信机构获得征信产品,针对企业来说,是由该企业的各种维度数据构成的征信报告。

关于企业征信大数据的技术架构,以及企业征信大数据在不同场景的应用,详见第12章。1.4.5 智慧交通大数据应用

智慧交通大数据应用是以物联网、云计算、大数据等新一代信息技术,结合人工智能、机器学习、数据挖掘、交通科学等理论与工具,建立起的一套交通运输领域全面感知、深度融合、主动服务、科学决策的动态实时信息服务体系。基于人工智能和大数据技术的叠加效应,结合交通行业的专家知识库建立交通数据模型,解决城市交通问题,是交通大数据应用的首要任务。

交通大数据模型主要分为城市人群时空图谱、交通运行状况感知与分析、交通专项数字化运营和监管、交通安全分析与预警等几大类。

关于通过人群生活模式划分和道路拥堵模式聚类,以及相关结果分析,实现交通数据的价值,让城市交通更加智慧等,详见第13章。1.5 本章小结

本章从大数据的概念讲起,主要介绍机器学习的基础概念,以及机器学习的发展过程,用一个形象的例子讲解大数据生态中的机器学习,并按照传统机器学习(包括分类、聚类、回归、关联规则、协同过滤、数据降维等)、深度学习,以及其他机器学习(迁移学习、主动学习、演化学习)进行算法讲解。接着按照学习形式将机器学习划分为监督学习、无监督学习、半监督学习、强化学习进行分类说明,最后概要介绍机器学习综合应用场景。

本章只是一个开始,以期使读者对大数据机器学习的应用情况有一个全貌概览,接下来开始基于Spark进行机器学习算法实践。第2章数据分析流程和方法

夫物芸芸,各复归其根。——《道德经》第十六章

万物纷纷芸芸,各自返回它的本根。深入本根才能更好地认识自然规律,符合自然的“道”。

数据驱动时代,无论你的工作内容是什么,掌握一定的数据分析能力,都可以帮你更好地认识世界,更好地提升工作效率。数据分析除了包含传统意义上的统计分析之外,也包含寻找有效特征、进行机器学习建模的过程,以及探索数据价值、找寻数据本根的过程。

在本章中,我们首先对数据分析的概念进行概述,随后围绕数据讲解数据分析的流程,包括业务调研、明确目标、数据准备、特征处理、模型训练与评估、输出结论等,在此基础上介绍数据分析的基本方法,最后使用Spark开发环境构建简单的数据分析示例应用。2.1 数据分析概述

随着商业智能(Business Intelligence,BI)的发展,实现数据的商业价值,并通过数据驱动企业的商业化、信息化建设显得越来越重要,为了获得更好的数据分析结果,在实践中抽象了分析数据的方法和流程,这就是数据分析(Data Analysis,DA)。

传统的数据分析是指用适当的统计分析方法对收集来的大量数据进行分析、提取有用信息并形成结论,而对数据加以详细研究和概括总结的过程,是数据价值挖掘的基础。随着数据分析的发展,数据分析扩展成一个包含数据预处理、特征处理和数据建模,使用机器学习方法进行数据挖掘的过程。

数据分析以分析为骨骼、数据为血肉,按照一定的方法有理有据组织结论,数据分析架构如图2-1所示,数据分析流程以调研为起点,以结论为终点,以方法为支撑,围绕数据进行分析。图2-1 数据分析架构

数据分析的基本方法以统计为主,只有熟悉业务,经过合理的数据分析,才能提供有价值的分析结论和建议。数据分析重调研、轻方法,调研要亲临一线去询问、了解实际情况,切忌数据空想,数据分析要言之有物,行之有效。2.2 数据分析流程

数据分析可以帮助我们从数据中发现有用信息,找出有建设性的结论,并基于分析结论辅助决策。如图2-2所示,数据分析流程主要包括业务调研、明确目标、数据准备、特征处理、模型训练与评估、输出结论6个关键环节。图2-2 数据分析流程

数据分析能力并非一朝一夕养成的,需要长期扎根业务进行积累,需要长期根据数据分析流程一步一个脚印地分析问题,培养自己对数据的敏感度,从而养成用数据分析、用数据说话的习惯。当你可以基于一些数据,根据自己的经验做出初步的判断和预测,你就基本拥有数据思维了。

接下来对数据分析流程进行针对性的讲解。2.2.1 业务调研

数据分析的常见困难是不知道最值得调研的问题是什么、无法获取大量可靠的数据、复杂问题难以拆解、难以追查问题背后的真实原因、难以提前预判方案是否可行。

调研主要分为3个阶段。

1)调研准备阶段,这个阶段要进行调研计划编写和确认、调研背景资料的准备,这个阶段的工作质量将对能否顺利开展调研工作起到关键保障作用。

2)调研实施阶段,根据调研计划完成各项调研工作,倾听客户的痛点、难点、堵点,思考解决痛点、攻克难点、疏通堵点的思路和方法。

3)调研总结阶段,根据现场调研结果,总结并提出合理数据分析解决方案,找出问题的真正原因,趁热打铁,把后续工作落实到一定程度,此时调研工作才能算结束。

调研是数据分析的起点,也是指引后续分析的灯塔。很多时候,调研清楚了,数据采集到了,结论就很明显了。2.2.2 明确目标

明确目标是指通过调研结果定义问题、拆解问题,根据拆解的问题进一步量化指标,具体思路如下。

1)问题定义,对调研出来的问题进行定义,找出性价比最高的问题。

2)拆解问题,一个问题并非仅由一个原因引起,可能是很多因素互相影响的结果,这个时候要找出所有可能的因素,对问题进行拆解。比如网页搜索体验不好,原因可能是数据来源问题、相关性问题、Query解析问题、版本不稳定等。

3)量化指标,就是将指标进行量化,转化为数值型或者有序型指标。将指标进行量化,如版本稳定性这样的影响因子,可以通过崩溃日志和错误日志计算出每个版本的崩溃率、出错率等指标来表达。有时受限于我们拥有的数据,并不是列举的所有留存影响因素都能被处理成量化的指标,因此就需要通过技术手段获得这些数据。2.2.3 数据准备

明确目标之后,进一步需要确定数据源,准备数据、统一数据标准,并对数据进行预处理。在这个阶段,需要把各个字表关联起来,形成一张数据宽表。

·数据源,确定数据来源,并有效地获取数据。

·数据标准,统一定义数据指标的含义,对于数据标准的明确,需要结合数据分析调研的需求以及具体业务场景,定义清晰的数据标准对后面的数据ETL以及建模、分析具有重要意义。

·数据预处理,也叫数据ETL,用来描述对原始数据抽取、清洗转换和加载的过程。ETL按照统一的规则集成并提高数据的价值,是将数据从数据源向目标数据仓库(DW)转化的过程。(1)数据抽取

数据的抽取是从各个不同的数据源抽取数据并存储到操作数据存储(Operational Data Store,ODS)中的过程,在抽取的过程中需要选择不同的抽取方法,尽量提高ETL的运行效率。一般认为,与存放DW的数据库系统相同的数据源直接建立链接,与DW数据库系统不同的数据源采取工具导出、工具导入的方法,对于文件类型的数据源先利用业务人员导入临时数据库中转抽取,对于数据量大的系统采取增量抽取。(2)数据清洗转换

数据清洗转换包括数据清洗和数据转换两个过程。

数据清洗是指对空数据、缺失数据进行补缺操作,对非法数据进行替换,保证数据的正确性。

数据转换是指对数据进行整合、拆分和变换,数据整合是指通过多表关联,将不同类型数据之间可能存在潜在关联关系的多条数据进行合并,通过数据的整合,丰富数据维度,有利于发现更多有价值的信息。数据拆分是指按一定规则对数据进行拆分,将一条数据拆分为多条。数据变换是指对数据进行行列互换、排序、修改序号、去除重复记录变换操作。(3)数据加载

数据加载将清洗转换后的数据加载到数据仓库中,数据加载有多种方式,主要包括:时间戳方式、日志表方式、全表对比方式、全表删除再插入方式等,其中时间戳方式、日志表方式、全表对比方式属于增量加载,全表删除再插入方式属于全量加载,实践中建议增量加载。

在实际应用中,单机处理海量数据的ETL变得越来越困难,Spark能够较好地支持海量数据的ETL工作,Spark的应用程序编程接口(Application Programming Interface,API)简单易用,处理大数据时效率很高,并且较好地支持了对各种主流数据库的访问,DataFrame提供了详细的数据结构信息,使得Spark SQL可以方便地了解数据的组成、结构和数据类型。2.2.4 特征处理

数据预处理对数据进行了初步的抽取和清洗,更进一步,可以从数据中提取有用的特征用于机器学习建模,接下来介绍数据特征处理的方法。

在数据分析中,我们把数据对象称作样本,数据对象拥有一些基本特性,叫作特征或维度。例如,对于一个学生信息的样本数据,每一个样本对应一个学生,而数据集中学生的ID、年级、成绩等则是学生的特征。1.特征向量化

除了基本的统计分析之外,机器学习模型要求输入特征向量,原始特征需要转化为特征向量,才能用于机器学习模型的训练,下面介绍各类特征向量化的方法。

常用特征包括数值特征、类别特征、文本特征、统计特征等。

1)数值特征:数值类型的特征,如年龄、温度等,一般可以直接作为特征向量的维度使用,它可以取无穷多的值。

2)类别特征:具有相同特性的特征,如一幅图片的颜色(黑色、棕色、蓝色等)就属于类别特征,类别特征有可穷举的值。类别特征不能直接使用,一般对类别特征进行编号,将其转化为数值特征。

3)文本特征:从文本内容中提取出来的特征,如电影评论,文本特征也不能直接使用,需要进行分词、编码等处理,接下来会具体介绍文本特征的处理方法。

4)统计特征:从原始数据中使用统计方法得到的高级特征,常用的统计特征包括平均值、中位数、求和、最大值、最小值等。统计特征比原始特征包含更多的信息,通常使用统计特征可以得到更好的模型训练效果,统计特征和数值特征一样可以直接作为特征向量的维度使用。

5)其他特征:还有一些特征不属于上述特征的范畴,如音频、视频特征,地理位置特征等。这些特征需要使用特殊的处理方法,如图像需要转化为SIFT特征,音频需要转化为MFCC特征等。

实践中,类别特征的可取值比数值特征要少得多,在进行统计分析时更容易处理,所以我们有时需要通过分段,把数值特征转化为类别特征以便于分析建模,例如我们可以把连续的身高特征分成150cm以下、150cm~180cm、180cm以上三个类别。2.文本特征处理

文本特征是一类常见的特征,相比类别特征和数值特征,它的处理要复杂得多,一般对文本特征的处理,需要经过分词、去停用词、词稀疏编码等步骤,MLlib为这些处理步骤提供了相应的方法。(1)分词

MLlib提供Tokenization方法对文本进行分词,RegexTokenizer基于正则表达式匹配提供了更高级的分词。默认用多个空格(\s+)作为分隔符,可以通过参数pattern指定分隔符,分词的样例代码如下:import org.apache.spark.ml.feature.{RegexTokenizer, Tokenizer}val sentenceDataFrame = spark.createDataFrame(Seq( (0, "Hi I heard about Spark"), (1, "I wish Java could use case classes"), (2, "Logistic,regression,models,are,neat"))).toDF("label", "sentence")val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")val regexTokenizer = new RegexTokenizer() .setInputCol("sentence") .setOutputCol("words") .setPattern("\\W") // alternatively .setPattern("\\w+") .setGaps(false)val tokenized = tokenizer.transform(sentenceDataFrame)tokenized.select("words", "label").take(3).foreach(println)val regexTokenized = regexTokenizer.transform(sentenceDataFrame)regexTokenized.select("words", "label").take(3).foreach(println)(2)去停用词

停用词是那些需要从输入数据中排除掉的词,这些词出现频繁,却并没有携带太多有意义的信息。MLlib提供StopWordsRemover方法实现这一功能。停用词表通过stopWords参数来指定。可以通过调用loadDefaultStopWords(language:string)调用默认的停用词表,默认词表提供Jenglish、french、germon、danish等几种语言的停用词,但对于中文停用词需要自己提供。代码示例如下:import org.apache.spark.ml.feature.StopWordsRemoverval remover = new StopWordsRemover() .setInputCol("raw") .setOutputCol("filtered")val dataSet = spark.createDataFrame(Seq( (0, Seq("I", "saw", "the", "red", "baloon")), (1, Seq("Mary", "had", "a", "little", "lamb")))).toDF("id", "raw")remover.transform(dataSet).show()(3)词稀疏编码

分词和去停用词之后把一篇文章变成了一个词的集合,现在需要把这个集合用数值来表示,我们使用MLlib提供的StringIndexer方法来实现这一需求。StringIndexer给每个词按照出现频率安排一个编号索引,索引的范围是[0,vocab_size),vocab_size为词表的大小,示例代码如下:import org.apache.spark.ml.feature.StringIndexerval df = spark.createDataFrame( Seq((0, "a"), (1, "b"), (2, "c"), (3, "a"), (4, "a"), (5, "c"))).toDF("id", "category")val indexer = new StringIndexer() .setInputCol("category") .setOutputCol("categoryIndex")val indexed = indexer.fit(df).transform(df)indexed.show()

此外,MLlib还为文本处理提供了Ngram、TF/IDF、word2vec等高级方法,可以在实践中查看相关资料。3.特征预处理

在前面的章节中我们介绍了对各类特征进行处理的方法,在使用生成的特征进行训练之前,对特征进行预处理有助于优化模型训练效果,提升模型训练速度。MLlib提供了丰富的特征预处理方法,下面介绍3种最常用的特征预处理方法。(1)特征归一化

特征归一化是用来统一特征范围的方法,它对特征进行标准化,将特征值的大小映射到一个固定的范围内,从而避免特征量级差距过大影响模型训练的情形,此外特征归一化还能加速训练的收敛。

MLlib提供3种归一化方法:StandardScaler、MinMaxScaler和MaxAbsScaler。Standard-Scaler对所有数据减去均值除以标准差,处理后的数据均值变为0,标准差变为1;MinMax-Scaler将每个特征调整到一个特定的范围(通常是[0,1]),在转化过程中可能把0转化为非0的值,因此可能会破坏数据的稀疏性;MaxAbsScaler转换将每个特征调整到[-1,1]的范围,它通过每个特征内的最大绝对值来划分,不会破坏数据的稀疏性。

其中,StandardScaler是使用最广泛的归一化方法,使用StandardScaler方法进行特征归一化的示例代码如下。import org.apache.spark.SparkContext._import org.apache.spark.mllib.feature.StandardScalerimport org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.util.MLUtils// Spark程序data文件夹下的测试数据val data = MLUtils.loadLibSVMFile(sc, "data/MLlib/sample_libsvm_data.txt")val scaler1 = new StandardScaler().fit(data.map(x => x.features))val scaler2 = new StandardScaler(withMean = true, withStd = true).fit(data.map(x => x.features))// scaler3是与scaler2相同的模型,并且会产生相同的转换val scaler3 = new StandardScalerModel(scaler2.std, scaler2.mean)// data1是单位方差val data1 = data.map(x => (x.label, scaler1.transform(x.features)))//如果不将这些特征转换成密度向量,那么零均值转换就会增加。稀疏向量例外// data2将是单位方差和零均值val data2 = data.map(x => (x.label, scaler2.transform(Vectors.dense(x.features.toArray))))(2)正则化

正则化是指计算某个特征向量的p-范数(p=0,范数是指向量中非零元素的个数;p=1,范数为绝对值之和;p=2,范数是指通常意义上的模;p=无穷,范数是取向量的最大值),然后对每个元素除以p-范数,以将特征值正则化。正则化后不仅可以加快梯度下降求最优解的速度,还能提高模型精度。

MLlib提供Normalizer方法实现特征正则化,示例代码如下:import org.apache.spark.SparkContext._import org.apache.spark.MLlib.feature.Normalizerimport org.apache.spark.MLlib.linalg.Vectorsimport org.apache.spark.MLlib.util.MLUtils// Spark程序data文件夹下的测试数据val data = MLUtils.loadLibSVMFile(sc, "data/MLlib/sample_libsvm_data.txt")// 默认情况下,p=2,计算2阶范数val normalizer1 = new Normalizer()// p正无穷范数val normalizer2 = new Normalizer(p = Double.PositiveInfinity)// data1中的每个样本将使用L2范数进行标准化val data1 = data.map(x => (x.label, normalizer1.transform(x.features)))// data2中的每个样本将使用无穷范数进行标准化val data2 = data.map(x => (x.label, normalizer2.transform(x.features)))

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载