1. 大数据
- 大数据是一种理念、一种解决问题的方法和一系列技术的集合。他与传统BI一样,都是从数据中挖掘有价值的信息,以满足商业目标;但它的独特之处在于:分布式、并行化。
- 优秀的数据科学家需要具备的素质: 懂数据采集、懂数学算法、懂数学软件、懂数据分析、懂预测分析、懂市场应用、懂决策分析 懂 数 据 采 集 、 懂 数 学 算 法 、 懂 数 学 软 件 、 懂 数 据 分 析 、 懂 预 测 分 析 、 懂 市 场 应 用 、 懂 决 策 分 析
2. 大数据挑战
1)实时性 (时间越久的数据,其价值越低)
2)安全性(保护用户隐私)
3. 大数据架构的组成
1)数据获取:探针、网络爬虫、日志采集
2)流处理:流式数据处理引擎:Storm, Spark Streaming, CEP架构, Eagle
3)批处理:批处理技术, spark架构和原理
4)数据处理算法:机器学习、数据挖掘、图像识别、语音识别、深度学习
5)资源管理:YARN, Mesos架构
6)存储技术:存储硬件、存储指标、RAID技术、存储接口、存储加速技术
7)大数据云化:Cloud Native、微服务、Docker、大数据上云的两种模式(集群模式和服务模式)
3.1 数据获取
3.1.1 网络爬虫
网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。
3.1.2 日志采集
1)Flume: 是Cloudera公司开发的一款高性能、高可用的分布式日志采集系统,现已开源。
2)Facebook Scribe:Facebook已经不再维护
3)Apache Chuwka:基于HDFS(Hadoop Distributed File System)和Map/Reduce框架实现,且继承了Hadoop的可伸缩性和健壮性。最后更新上期为:2016-10-08,好似不再维护
3.1.3 数据分发
Kafka:为了匹配数据采集与数据处理之间的速度差、以及多对多的关系,并确保消息可靠送达,需要一个消息中间件进行消息转发、分发。
4. 数据处理方式
按数据处理所需的时间,数据处理方式分为以下几类:
1)流处理:基于实时数据流的数据处理(Streaming Data Processing),数毫秒–数秒
2)交互式查询:基于历史数据的交互式查询(Interactive Query),数秒–数分钟
3)批处理:批量数据处理(Batch Data Processing),数分钟–数小时
目前的主要目标之一:一个算法框架同时支持 批、流、交互式 批 、 流 、 交 互 式 处理,以减轻系统部署的复杂度。
5. 流处理
5.1 流处理引擎
5.1.1 Storm
Storm:是Twitter开源的一个分布式 实时流 实 时 流 处理系统。
Storm与Hadoop比较如下表:
比较项目 |
Storm |
Hadoop |
数据处理方式 |
实时流处理 |
批处理 |
有无状态 |
无状态 |
有状态 |
系统角色 |
Nimbus |
JobTracker |
|
Supervisor |
TaskTracker |
|
Worker |
Child |
应用名称 |
Topology |
Job |
组件接口 |
Spout/Bolt |
Mapper/Reducer |
5.1.2 Spark Streaming
Spark:是基于内存的通用计算模型,其主要功能如下:
1)同时支持 批、流、交互式 批 、 流 、 交 互 式 查询
2)兼容支持HDFS和S3分布式文件系统
3)可以部署在YARN和Mesos等流行的集群资源管理器上
4)以 Mini−Batch M i n i − B a t c h 的形式模拟流(Streaming)处理,实时性不高
5.1.3 批流融合处理
5.1.3.1 Flink
Flink是Apache项目,是一个原生的流处理系统。与Spark相比,有如下优势:
1)Flink原生流,而Spark Streaming是通过Mini-Batch模拟流处理
2)自动对处理流程进行优化:即真正执行的流程不一定与用户所写的代码一致
3)自动对迭代计算的优化
4)Out-of-Core计算机制:可以灵活运用本地的硬盘和内存资料,而无须用户参与
5)Pipeline机制:处理数据及时,处理完即时送到下一个任务
6)同时支持 批、流 批 、 流 处理
5.1.3.2 Google Cloud Dataflow
Google内部停用MapReduce,而使用Cloud Dataflow,它有如下优点:
1)可以构建复杂的Pipeline
2)无须手工配置和管理MapReduce集群
3)支持从 批到流 批 到 流 模式的无缝切换
5.1.3.3 Google Beam & Calcite
1)Spark, Flink, Google Cloud Dataflow都是在引擎层面统一 批流 批 流 处理,在短期内很难广泛应用。另一种思路是先API先统一,统一的API再对接底层多个引擎。所以Google在Dataflow基础上开源了一个Beam项目(Beam = (B)atch + Str(eam)),Beam处于API层面,而对于SQL,则可以采用Calcite,通过SQL统一流式和批处理。
2)Beam & Calcite架构
3)Beam兼容矩阵
5.2 CEP (复杂事件处理)
- CEP (Complex Event Processing)
- 在一个复杂系统中,不能基于单独事件进行处理,而需要依赖上下文环境来决定如何处理此事件,此种方式叫做CEP
- Esper是一个开源的CEP处理和事件序列分析组件
5.4 实时流+机器学习
- 机器学习主要应用于离线批量数据处理,实际应用中也有一些在线学习的需求,如在安防领域需要实时监测异常
- 实时流处理+机器学习:Anodot、Apache Eagle(eBay开源的)
5.4.1Eagle
- Eagle:用于在大数据平台(Hadoop,Spark,NoSQL等)上实时发现安全和性能问题,其主要特点如下:
- 高实时:可以毫秒级别内产生告警
- 可伸缩:在eBay,Eagle被部署在多个大型的Hadoop集群上,因此Eagle必须具有处理海量实时数据的高度可伸缩能力
- 简单易用:通过Eagle的Sandbox,可以数分钟内设置好环境并尝试运行
6.交互式分析
- 交互式分析:基于历史数据的交互式查询(Interactive Query),通常在数秒中内处理。
- 数据仓库领域: Adhoc Query (即时查询)
- 大数据领域:Interactive Query(交互式查询)
- 交互式查询具有以下特点:
- 时延低
- 查询条件复杂
- 查询范围大
- 返回结果数量小
- 并发数要求高
- 需要支持SQL等接口
- 数据仓库查询优化思路:
6.1 MPP DB
- 随着数据量的增大,传统的数据仓库如Oracle、MySQL、PostgreSQL等单实例模式将无法支撑大数据的处理,需要支持分布式技术。
服务器系统架构分类:
对称多处理器架构(Symmetric Multi-Processor, SMP)
系统中的所有CPU处于同等地位,内存共享访问,随着CPU的增加,内存访问带宽成了其发展的bottleneck
非一致存储访问架构(Non-Uniform Memory Access, NUMA)
CPU模块内部是SMP,CPU模块之间可相互访问对方内存,从而导致访问不同的内存其所需时间是不一致的
海量并行处理结构(Massive Parallel Processing, MPP)
多台SMP服务器通过网络连接,每个SMP只能访问本地内存
- 典型的MPP数据库
- Greenplum
- DB2 DPF
- Sybase IQ
- MPP DB的缺点:
- 扩展性有限:MPP DB号称能扩展到1000个节点以上,实际应用中不超过100个节点。
- 并发数有数:50~100的并发能力
- MPP DB目前适合小集群(100以内)、低并发(50左右)的场景。
6.1.1 MPP & Hadoop
MPP的计算与存储是耦合的,而Hadoop中的MapReduce和HDFS是分离的,分离有更大的灵活性,可以支持更多的计算模块。
6.2 SQL on Hadoop
6.2.1 Hive
- Hive 基本架构
- Hive基本概念:
Hive是一个数据仓库的软件工具,它使用SQL读、写、管理位于分布式存储的大数据集,它位于Hadoop之上,它支持以下功能:
- 通过SQL轻松访问数据的工具,从而使数据仓库任务,如提取/转换/加载(Extract/Transform/Load ETL)、报告和数据分析成为可能。
- 在多种数据格式上强加结构的机制
- 访问直接存储在HDFS上或其他数据存储系统如HBase的文件
- 使用Hadoop MapReduce或Tez或Spark框架执行查询
- Hive是基于Hadoop的一个开源数据仓库系统,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,Hive可以把SQL中的表、字段转换为HDFS中的目录、文件。
- Hive是建立在Hadoop之上的数据仓库基础构架、是为了减少MapReduce编写工作的批处理系统,Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。Hive可以理解为一个客户端工具,将我们的SQL操作转换为相应的MapReduce jobs,然后在Hadoop上面运行。
- Hive优势:
- Hive支持标准的SQL语法,免去了用户编写MapReduce程序的过程,大大减少了开发成本
- Hive的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能力较弱与不擅长Java语言的用户能够在HDFS大规模数据集上很方便地利用SQL 语言查询、汇总、分析数据,毕竟精通SQL语言的人要比精通Java语言的多得多
- Hive是为大数据批量处理而生的,Hive的出现解决了传统的关系型数据库(MySql、Oracle)在大数据处理上的瓶颈好了
6.2.2 Phoenix
Phoenix与Hive类似,在指定的基础上执行SQL查询。Hive可以在Hadoop或Spark上执行SQL查询,而Phoenix是在HBase上执行查询。
6.2.2.1 HBase
- HBase基本概念
- HBase使用了和Bigtable非常相似的数据模型。用户在表格里存储许多数据行。每个数据行都包括一个可排序的关键字,和任意数目的列。表格是稀疏的,所以同一个表格里的行可以有不同的列,只要用户喜欢这样做。
- 列名是“<族名>:<标签>”形式,其中<族名>和<标签>可以是任意字符串。一个表格的<族名>集合(又叫“列族”集合)是固定的,除非你使用管理员权限来改变表格的列族。不过你可以在任何时候添加新的<标签>。HBase在磁盘上按照 列族 列 族 储存数据,所以一个列族里的所有项应该有相同的读/写方式。
- 写操作是行锁定的,你不能一次锁定多行。所有对行的写操作默认是原子的。
- 所有数据库更新操作都有时间戳。HBase对每个数据单元,只存储指定个数的最新版本。客户端可以查询“从某个时刻起的最新数据”,或者一次得到所有的数据版本。
- HBase是一个构建在HDFS上的分布式列存储系统;
- Hbase表的特点
- 大:一个表可以有数十亿行,上百万列;
- 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
- 面向列:面向列(族)的存储和权限控制,列(族)独立检索;
- 稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;
- 数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
- 数据类型单一:Hbase中的数据都是字符串,没有类型。
- HBase架构
- HBase表逻辑视图
- 为什么需要Phoenix? 为 什 么 需 要 P h o e n i x ?
HBase不支持SQL语法,Phoenix为解决此问题而生。Phoenix通过JDBC查询存储在HBase中的数据,即通过Phoenix,可以在HBase数据集上执行SQL查询。对于简单查询,Phoenix的性能优于Hive。
6.2.3 Impala
Impala是Cloudera开源的实时交互SQL大数据查询工具。Impala没有使用缓慢的Hive+MapReduce批处理架构,而是使用与传统并行关系数据库中类似的分布式查询引擎(由QueryPlanner、QueryCoordinator和QueryExecEngine三部分组成),可以直接从 HDFS或HBase H D F S 或 H B a s e 中用SELECT、JOIN和统计函数查询数据,大大降低了延迟。
6.2.3 数据仓库&大数据
- 与传统数据仓库相比,大数据技术的优势:
- 支持非结构化数据
- 扩展性强
- 与新的分析方法和算法相结合
- 成本降低
- 与传统数据仓库相比,大数据技术的劣势:
- 小数据量时比传统的MPP差
- 大数据量时不能满足交互式分析秒级响应的要求
- 对SQL的支持不充分
- -
7. 批处理
7.1 MapReduce (Hadoop)
7.1.1 MapReduce概念
- MapReduce是一种云计算的核心计算模式,是一种分布式运算技术,也是简化的分布式并行编程模式,主要用于大规模并行程序的计算问题。
- 整个MapReduce的过程大致分为 Map(映射)–>Shuffle(排序)–>Combine(组合)–>Reduce(化简),典型例子:统计文档中的单词数
7.1.2 MapReduce框架
7.1.3 性能差的主要原因
- Hadoop的每个作业都要经历两个阶段:Map和Reduce。
- Map包含4个子阶段(数据本地处理):从磁盘上读数据 -> 执行Map函数 -> Combine结果 -> 将结果写到本地磁盘上
- Reduce包含4个子阶段:从各个MapTask上读取相应的数据(Shuffle)-> Sort-> 执行Reduce函数 -> 将结果写到HDFS中
- 磁盘读/写速度是导致MapReduce性能差的订要原因。Spark恰好看到了内存容量的增加和成本下降,决定用一个基于内存的架构去替代MapReduce,在性能上有了极大的提升
7.1.4 Shuffle
- Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。
- 下图清晰地描述了MapReduce算法的整个流程,其中shuffle phase是介于Map phase和Reduce phase之间。
- Shuffle是影响Hadoop和Spark计算性能的关键因素 S h u f f l e 是 影 响 H a d o o p 和 S p a r k 计 算 性 能 的 关 键 因 素
7.2 Spark
- 开发的起因:基于内存的增加和成本下降的趋势,Spark设计了一个基于内存的分布式处理软件,即Spark的目标是取代MapReduce
- Spark目标:做一个统一的引擎,可以统一完成 “批处理、交互式处理、流处理(Mini−Batch)” “ 批 处 理 、 交 互 式 处 理 、 流 处 理 ( M i n i − B a t c h ) ” ,以降低开发和运维难度
7.2.1 Spark架构
- Spark SQL: 提供了类 SQL 的查询,返回 Spark-DataFrame 的数据结构
- Spark Streaming: 流式计算,主要用于处理线上实时时序数据
- MLlib: 提供机器学习的各种模型和调优
- GraphX: 提供基于图的算法,如 PageRank
7.2.2 基本概念
- RDD:Resilient Distributed Dataset, 弹性分布式数据集
- Operation:作用于RDD的各种操作,包括Transformation和Action
- Job:作业, 一个Job包含多个RDD及作用于对应RDD上的各种Operation
- Stage:一个作业分为多个阶段
- Partition:数据分区,一个RDD中的数据可以分成多个不同的区
- DAG:Directed Acycle Graph,有向无环图,反映RDD之间的依赖关系
- Narrow Dependency:窄依赖,子RDD依赖于父RDD中固定的Data Partition
- Wide Dependency:宽依赖,子RDD对父RDD中所有的Data Partition都有依赖
- Caching Management:缓存管理,对RDD的中间计算结果进行缓存管理,以加快整体的处理速度
7.2.3 RDD
- RDD是只读的数据分区(Partition)集合,它本质上是数据集。
- RDD是Spark最基本的抽象,是对分布式内存的抽象使用,以操作本地集合的方式来操作分布式数据集的抽象实现。它表示已经被分区、不可变的、能够被并行 操作的数据集。
- RDD必须是可序列化的(把RDD数据集转化为字节流,以便 在网络上传输或存储到文件中)。
- RDD经过Transformation处理之后,数据集中的内容会发生改变,由数据集A转换成数据集B
- 数据集B经过Action处理之后,数据集B中的内容会被归纳为一个具体的数据
- Spark支持Standalone、Mesos、YARN等部署模式,这些部署模式将作为TaskScheduler的初始化入参
- RDD处理流程:
7.2.4 编程接口
- Scala
- Java
- Python
- SparkSQL
Spark之所以深受欢迎,Spark SQL是其关键因素。经过数据库多年的发展,以及SQL简单易用,所以一个处理平台具备SQL能力是其基本要求
- Hive on Spark
Hive on Spark是从Hive on MapReduce演进而来,Hive的整体解决方案很不错,但是从查询提交到结果返回需要相当长的时间,查询耗时太长,这个主要原因就是由于Hive原生是基于MapReduce的,那么如果我们不生成MapReduce Job,而是生成Spark Job,就可以充分利用Spark的快速执行能力来缩短HiveQL的响应时间。
7.2.4.1 SparkSQL vs Hive on Spark
- SparkSQL和Hive On Spark都是在Spark上实现SQL的解决方案。
- Spark早先有Shark项目用来实现SQL层,不过后来推翻重做了,就变成了SparkSQL。这是Spark官方Databricks的项目,Spark项目本身主推的SQL实现。Hive On Spark比SparkSQL稍晚。Hive原本是没有很好支持MapReduce之外的引擎的,而Hive On Tez项目让Hive得以支持和Spark近似的Planning结构(非MapReduce的DAG)。所以在此基础上,Cloudera主导启动了Hive On Spark。这个项目得到了IBM,Intel和MapR的支持(但是没有Databricks)。
- 结构上Hive on Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。
- Hive on Spark和SparkSQL都不负责计算,它们只是告诉Spark,你需要什么计算,并把结果返回给我
7.2.5 Spark内部框架
Spark的内部框架如下图所示,主要包含四大组件:Driver、Master、Worker和Executor。
- 部署类型:
- 单机模型:主要用来开发测试。特点:Driver、Master、Worker和Executor都运行在同一个JVM进程之中。
- 伪集群模型:主要用来开发测试。特点:Master、Worker都运行在同一个JVM进程之中;Master、Worker和Executor都运行于同一台机器,无法跨机器运行;
- 独立集群(又叫做原生集群模式):在集群规模不是非常大的情况下,可用于生产环境。特点:Master、Worker和Executor都运行于独立的JVM进程。
- YARN集群:YARN生态中的ApplicationMaster角色使用Apache开发好的Spark ApplicationMaster代替,每一个YARN生态中的NodeManager角色相当于一个Spark生态中的Worker角色,由NodeManger负责Executor的启动。
- Mesos集群:
7.2.6 Spark VS Hadoop
- Spark和Hadoop的MapReduce在同一个层级,即主要解决分布式计算框架的问题。 S p a r k 和 H a d o o p 的 M a p R e d u c e 在 同 一 个 层 级 , 即 主 要 解 决 分 布 式 计 算 框 架 的 问 题 。
- Spark的中间数据存放在内存中,对于迭代计算(上一步的输出作为下一步的输入)而言,效率更高
- Spark更适合迭代运算比较多的数据挖掘和机器学习运算,因为在Spark里有RDD(Resilient Distributed Dataset:弹性分布式数据集)的抽象概念
- Spark更通用(支持:批、交互、流处理)
- Spark提供的更多的操作,而Hadoop只提供了Map 和 Reduce两种操作
- 容错性:Spark在分布式数据集计算时通过Checkpoint来实现容错
- 可用性:Spark通过提供丰富的Scala、Java、Pythonb API及交互式Shell来提高可用性
- 提供 Cache 机制来支持需要反复迭代计算或者多次数据共享,减少数据读取的 IO 开销
- 提供了一套支持 DAG 图的分布式并行计算的编程框架,减少多次计算之间中间结果写到 Hdfs 的开销
- 使用多线程池模型减少Task启动开稍,shuffle过程中避免不必要的sort操作并减少磁盘IO操作。(Hadoop的Map和reduce之间的shuffle需要sort) 使 用 多 线 程 池 模 型 减 少 T a s k 启 动 开 稍 , s h u f f l e 过 程 中 避 免 不 必 要 的 s o r t 操 作 并 减 少 磁 盘 I O 操 作 。 ( H a d o o p 的 M a p 和 r e d u c e 之 间 的 s h u f f l e 需 要 s o r t )
7.3 BSP并行模型
- Spark、Hadoop是迭代模式,只适合一般的计算,在机器学习等计算量非常大的领域,传统的迭代模型不再适用,BSP就为此而生
- BSP (Bulk Synchronous Parallel, 整体同步并行计算模型):是一种并行计算模型。
7.3.1 BSP模型基本原理
- 一个 BSP 并行计算机由一组通过网络互连的处理器、内存单元组成。它主要有三个部分:
- 一组具有局 部内存的分布式处理器
- 全局数据通讯 网络
- 支持所有处理单元间全局路障同步的机制。
7.3.2 BSP vs MapReduce
7.3.2.1 执行机制
- MapReduce:是一个数据流模型
每个任务只对输入数据进行处理,产生的输出数据作为另一个任务的个输入数据,并行任务之间独立地进行,串行任务之间以磁盘或数据复制作为交换介质和接口。
- BSP:是一个状态模型
各个子任务在本地的子图数据上执行计算、通信、修改图的状态等操作,并行任务之间通过消息通信交流中间计算结果,不像MapReduce那样对全体数据进行复制
7.3.2.2 迭代处理
- MapReduce:需要连续启动若干作业才能完成图的迭代处理,相邻作业之间通过分布式文件系统交换全部数据
- BSP:仅启动一个作业,利用多个超步就可以完成迭代处理,两次迭代之间通过消息传递中间计算结果
- 用途:BSP(实时处理)、MapReduce(非实时处理)
7.3.3 BSP实现
7.3.3.1 Pregel
由Google实现的Pregel,量一个大规模计算框架,首次提出将BSP模型应用于图计算
7.3.3.2 Hama
- Hama是Hadoop项目的一个子项目, 基于BSP(Bulk Synchronous Parallel)计算技术的并行计算框架,用于大量的科学计算(比如矩阵、图论、网络等)。BSP计算技术最大的优势是加快迭代。同时,Hama提供简单的编程,比如flexible模型、传统的消息传递模型,而且兼容很多分布式文件系统,比如HDFS、Hbase等。用户可以使用现有的Hadoop集群进行Hama BSP.
- 运行环境:需要关联ZooKeeper、HBase、HDFS组件
- 包含的主要模型:矩阵计算(Matrix Package)、面向图计算(Graph Package)
- 应用领域:矩阵计算、面向图计算、PageRank、排序计算、BFS。
- Hama架构
7.3.4 批处理关键技术
8. 机器学习和数据挖掘
- 机器学习:从数据中学习经验,是从方法而言的(学习所得的经验以数据的形式存在), 其本质是对从数据中提取本质特征 其 本 质 是 对 从 数 据 中 提 取 本 质 特 征
- 数据挖掘:从数据中获取商业价值,是从目的而言的,机器学习是数据挖掘的工具之一
8.1 按学习方式分类
8.1.1 监督式学习
- 在监督式学习下,输入数据被称为“训练数据”, 每组训练数据有一个明确的标识或结果 每 组 训 练 数 据 有 一 个 明 确 的 标 识 或 结 果 ,如对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果(Ground Truth)进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见监督式学习算法有:
- 决策树学习(ID3,C4.5等)
- 朴素贝叶斯分类
- 最小二乘回归
- 逻辑回归(Logistic Regression)
- 支撑矢量机
- 集成方法
- 反向传递神经网络(Back Propagation Neural Network)等等。
8.1.2 非监督式学习
- 在非监督式学习中, 数据并不被特别标识 数 据 并 不 被 特 别 标 识 ,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见非监督学习算法包括:
- 奇异值分解
- 主成分分析
- 独立成分分析
- Apriori算法
- k-Means算法等等。
8.1.3 半监督式学习
- 在此学习方式下, 输入数据部分被标识,部分没有被标识 输 入 数 据 部 分 被 标 识 , 部 分 没 有 被 标 识 ,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如
- 图论推理算法(Graph Inference)
- 拉普拉斯支持向量机(Laplacian SVM)等。
8.1.4 强化学习
- 学习从环境状态到行为的映射,使得智能体选择的行为能够获得环境最大的奖赏,使得外部环境对学习系统在某种意义下的评价(或整个系统的运行性能)为最佳。
- 强化学习就是智能系统从环境到行为映射的学习,以使奖励信号(强化信号)函数值最大,强化学习不同于连接主义学习中的监督学习,主要表现在教师信号上,强化学习中由环境提供的强化信号是对产生动作的好坏作一种评价(通常为标量信号),而不是告诉强化学习系统RLS(reinforcement learning system)如何去产生正确的动作。由于外部环境提供的信息很少,RLS必须靠自身的经历进行学习。
- 通过这种方式,RLS在行动-评价的环境中获得知识,改进行动方案以适应环境。常见的应用场景包括动态系统以及机器人控制等。
8.1.5 各种学习方法用途
- 在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。
- 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。
- 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。
8.2 按算法相似性分类
8.2.1 回归算法
- 回归算法是试图采用 对误差的衡量 对 误 差 的 衡 量 来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:
- 最小二乘法(Ordinary Least Square)
- 逻辑回归(Logistic Regression)
- 逐步式回归(Stepwise Regression)
- 多元自适应回归样条(Multivariate Adaptive Regression Splines)
- 本地散点平滑估计(Locally Estimated Scatterplot Smoothing)
- 回归算法的用途
- 信用评分
- 房价预测
- 度量营销活动的成功率
- 预测某一产品的收入
- 在一个特定的日子里会发生地震吗?
8.2.2 基于实例的算法
- 基于实例的算法常常用来 对决策问题建立模型 对 决 策 问 题 建 立 模 型 ,这样的模型常常先选取一批样本数据,然后根据某些近似性 把新数据与样本数据进行比较 把 新 数 据 与 样 本 数 据 进 行 比 较 。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括:
- k-Nearest Neighbor(KNN)
- 学习矢量量化(Learning Vector Quantization, LVQ)
- 以及自组织映射算法(Self-Organizing Map , SOM)
8.2.3 正则化方法
- 正则化方法是其他算法(通常是回归算法)的延伸, 根据算法的复杂度对算法进行调整 根 据 算 法 的 复 杂 度 对 算 法 进 行 调 整 。正则化方法通常 对简单模型予以奖励 对 简 单 模 型 予 以 奖 励 而 对复杂算法予以惩罚 对 复 杂 算 法 予 以 惩 罚 。常见的算法包括:
- Ridge Regression
- Least Absolute Shrinkage and Selection Operator(LASSO)
- 弹性网络(Elastic Net)
8.2.4 决策树学习
- 决策树算法 根据数据的属性采用树状结构建立决策模型 根 据 数 据 的 属 性 采 用 树 状 结 构 建 立 决 策 模 型 , 决策树模型常常用来解决分类和回归问题。常见的算法包括:
- 分类及回归树(Classification And Regression Tree, CART)
- ID3 (Iterative Dichotomiser 3), C4.5
- Chi-squared Automatic Interaction Detection(CHAID)
- Decision Stump
- 随机森林(Random Forest)
- 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)
8.2.5 贝叶斯方法
- 贝叶斯方法算法是 基于贝叶斯定理 基 于 贝 叶 斯 定 理 的一类算法,主要用来解决分类和回归问题。常见算法包括:
- 朴素贝叶斯算法
- 平均单依赖估计(Averaged One-Dependence Estimators, AODE)
- Bayesian Belief Network(BBN)。
- 典型应用:
- 标记一个电子邮件为垃圾邮件或非垃圾邮件
- 将新闻文章分为技术类、政治类或体育类
- 检查一段文字表达积极的情绪,或消极的情绪?
- 用于人脸识别软件
8.2.6 基于核的算法
- 基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法 把输入数据映射到一个高阶的向量空间,在这些高阶向量空间里,有些分类或者回归问题能够更容易的解决 把 输 入 数 据 映 射 到 一 个 高 阶 的 向 量 空 间 , 在 这 些 高 阶 向 量 空 间 里 , 有 些 分 类 或 者 回 归 问 题 能 够 更 容 易 的 解 决 。 常见的基于核的算法包括:
- 支持向量机(Support Vector Machine, SVM)
- 径向基函数(Radial Basis Function ,RBF)
- 以及线性判别分析(Linear Discriminate Analysis ,LDA)
- 就规模而言,其中一些最主要的问题已经使用支持向量机解决了(通过适当的修改),如:
- 广告显示
- 人类的剪接位点识别
- 基于图像的性别检测
- 大规模图像分类等等。
8.2.7 聚类算法
- 聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常 按照中心点或者分层的方式对输入数据进行归并 按 照 中 心 点 或 者 分 层 的 方 式 对 输 入 数 据 进 行 归 并 。所以的聚类算法都试图 找到数据的内在结构 找 到 数 据 的 内 在 结 构 ,以便按照最大的共同点将数据进行归类。常见的聚类算法包括:
- k-Means算法
- 期望最大化算法(Expectation Maximization, EM)
- 主要的聚类算法有:
- 基于质心的算法
- 基于连通性的算法
- 基于密度的算法
- 概率聚类
- 降维
- 神经网络/深度学习
8.2.8 关联规则学习
- 关联规则学习通过 寻找最能够解释数据变量之间关系的规则 寻 找 最 能 够 解 释 数 据 变 量 之 间 关 系 的 规 则 ,来找出大量多元数据集中有用的关联规则。常见算法包括:
8.2.9 人工神经网络
- 人工神经网络算法模拟生物神经网络,是一类 模式匹配算法 模 式 匹 配 算 法 。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:
- 感知器神经网络(Perceptron Neural Network)
- 反向传递(Back Propagation)
- Hopfield网络
- 自组织映射(Self-Organizing Map, SOM)
- 学习矢量量化(Learning Vector Quantization, LVQ)。
8.2.10 深度学习
- 深度学习算法是对人工神经网络的发展。在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多 深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集 深 度 学 习 的 算 法 是 半 监 督 式 学 习 算 法 , 用 来 处 理 存 在 少 量 未 标 识 数 据 的 大 数 据 集 。常见的深度学习算法包括:
- 受限波尔兹曼机(Restricted Boltzmann Machine, RBN)
- Deep Belief Networks(DBN)
- 卷积网络(Convolutional Network)
- 堆栈式自动编码器(Stacked Auto-encoders)。
8.2.11 降低维度算法
- 像聚类算法一样,降低维度算法 试图分析数据的内在结构 试 图 分 析 数 据 的 内 在 结 构 ,不过降低维度算法是 以非监督学习的方式试图利用较少的信息来归纳或者解释数据 以 非 监 督 学 习 的 方 式 试 图 利 用 较 少 的 信 息 来 归 纳 或 者 解 释 数 据 。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:
- 主成份分析(Principle Component Analysis, PCA)
- 偏最小二乘回归(Partial Least Square Regression,PLS)
- Sammon映射
- 多维尺度(Multi-Dimensional Scaling, MDS)
- 投影追踪(Projection Pursuit)等。
奇异值分解示意图
PCA降维示意图
独立成分分析示意图
- 其中,ICA 和 PCA 是相关的,但是它是一种更强大的技术,当那些经典的方法完全失效的时候,它能够从数据源中发现潜在的因素。它的应用包括数字图像,文档数据库,经济指标和心理测量。
8.2.12 集成算法
- 集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:
- Boosting
- Bootstrapped Aggregation(Bagging)
- AdaBoost
- 堆叠泛化(Stacked Generalization, Blending)
- 梯度推进机(Gradient Boosting Machine, GBM)
- 随机森林(Random Forest)
- 那么集成方法是怎样工作的,为什么他们会优于单个的模型?
- 他们拉平了输出偏差:如果你将具有民主党倾向的民意调查和具有共和党倾向的民意调查取平均,你将得到一个中和的没有倾向一方的结果。
- 它们减小了方差:一堆模型的聚合结果和单一模型的结果相比具有更少的噪声。在金融领域,这被称为多元化——多只股票的混合投资要比一只股票变化更小。这就是为什么数据点越多你的模型会越好,而不是数据点越少越好。
- 它们不太可能产生过拟合:如果你有一个单独的没有过拟合的模型,你是用一种简单的方式(平均,加权平均,逻辑回归)将这些预测结果结合起来,然后就没有产生过拟合的空间了。
8.3 深度学习
8.3.1 特征