基于Spark的机器学习实践 (二) - 初识MLlib

简介: 1 MLlib概述1.1 MLlib 介绍◆ 是基于Spark core的机器学习库,具有Spark的优点◆ 底层计算经过优化,比常规编码效率往往要高◆ 实现了多种机器学习算法,可以进行模型训练及预测1.2 Spark MLlib实现的算法◆ 逻辑回归 朴素贝叶斯 线性回归 SVM 决策树 LDA 矩阵分解1.3 Spark MLlib官方介绍1.3.1 搜索官方文档1.3.2 阅读文档 - 机器学习库(MLlib)指南简介MLlib是Spark的机器学习(ML)库。

1 MLlib概述

1.1 MLlib 介绍

◆ 是基于Spark core的机器学习库,具有Spark的优点

◆ 底层计算经过优化,比常规编码效率往往要高

◆ 实现了多种机器学习算法,可以进行模型训练及预测

1.2 Spark MLlib实现的算法

◆ 逻辑回归 朴素贝叶斯 线性回归 SVM 决策树 LDA 矩阵分解

1.3 Spark MLlib官方介绍

1.3.1 搜索官方文档



1.3.2 阅读文档 - 机器学习库(MLlib)指南

简介

MLlib是Spark的机器学习(ML)库。 其目标是使实用的机器学习可扩展且简单。 从较高的层面来说,它提供了以下工具:

  • ML算法:常见的学习算法,如分类,回归,聚类和协同过滤
  • 特征化:特征提取,转换,降维和选择
  • 管道:用于构建,评估和调整ML管道的工具
  • 持久性:保存和加载算法,模型和管道
  • 实用程序:线性代数,统计,数据处理等。

公告:基于DataFrame的API是主要的API

基于MLlib RDD的API现在处于维护模式。

从Spark 2.0开始,spark.mllib包中基于RDD的API已进入维护模式。 Spark的主要机器学习API现在是spark.ml包中基于DataFrame的API

有什么影响?
  • MLlib仍将支持spark.mllib中基于RDD的API以及错误修复
  • MLlib不会为基于RDD的API添加新功能
  • 在Spark 2.x版本中,MLlib将为基于DataFrames的API添加功能,以实现与基于RDD的API的功能奇偶校验。
  • 在达到功能奇偶校验(粗略估计Spark 2.3)之后,将弃用基于RDD的API。
  • 预计基于RDD的API将在Spark 3.0中删除。
为什么MLlib会切换到基于DataFrame的API?
  • DataFrames提供比RDD更加用户友好的API。 DataFrame的许多好处包括Spark数据源,SQL / DataFrame查询,Tungsten和Catalyst优化以及跨语言的统一API。
  • 基于DataFrame的MLlib API跨ML算法和多种语言提供统一的API。
  • DataFrames有助于实用的ML管道,特别是功能转换。有关详细信息,请参阅管道指南
什么是“Spark ML”?

“Spark ML”不是官方名称,但偶尔用于指代基于MLlib DataFrame的API。这主要是由于基于DataFrame的API使用的org.apache.spark.ml Scala包名称,以及我们最初用来强调管道概念的“Spark ML Pipelines”术语。

MLlib已被弃用吗?

不,MLlib包括基于RDD的API和基于DataFrame的API。基于RDD的API现在处于维护模式。但是,API都不被弃用,也不是MLlib

依赖关系

MLlib使用线性代数包Breeze,它依赖于netlib-java进行优化的数值处理。如果本机库1在运行时不可用,您将看到一条警告消息,而将使用纯JVM实现。

由于运行时专有二进制文件的许可问题,我们默认不包括netlib-java的本机代理。要配置netlib-java / Breeze以使用系统优化的二进制文件,请包含com.github.fommil.netlib:all:1.1.2(或使用-Pnetlib-lgpl构建Spark)作为项目的依赖项并阅读netlib-java文档为您的平台提供其他安装说明。

最受欢迎的原生BLAS,如英特尔MKL,OpenBLAS,可以在一次操作中使用多个线程,这可能与Spark的执行模型冲突。

配置这些BLAS实现以使用单个线程进行操作实际上可以提高性能(请参阅SPARK-21305)。通常最好将此与每个Spark任务配置使用的核心数相匹配,默认情况下为1,通常保留为1。

请参考以下资源,了解如何配置这些BLAS实现使用的线程数:Intel MKL和OpenBLAS。

要在Python中使用MLlib,您将需要NumPy 1.4或更高版本。

2.3中的亮点

下面的列表重点介绍了Spark 2.3版本中添加到MLlib的一些新功能和增强功能:

  • 添加了内置支持将图像读入DataFrame(SPARK-21866)。
  • 添加了OneHotEncoderEstimator,应该使用它来代替现有的OneHotEncoder转换器。 新的估算器支持转换多个列。
  • QuantileDiscretizer和Bucketizer(SPARK-22397和SPARK-20542)也增加了多列支持
  • 添加了一个新的FeatureHasher变换器(SPARK-13969)。
  • 在使用TrainValidationSplit或CrossValidator(SPARK-19357)执行交叉验证时,添加了对并行评估多个模型的支持。
  • 改进了对Python中自定义管道组件的支持(请参阅SPARK-21633和SPARK-21542)。
  • DataFrame函数用于矢量列的描述性摘要统计(SPARK-19634)。
  • Huber损失的稳健线性回归(SPARK-3181)。
打破变化

逻辑回归模型摘要的类和特征层次结构被更改为更清晰,更好地适应了多类摘要的添加。对于将LogisticRegressionTrainingSummary强制转换为BinaryLogisticRegressionTrainingSummary的用户代码,这是一个重大变化。用户应该使用model.binarySummary方法。有关更多详细信息,请参阅SPARK-17139(请注意,这是一个实验API)。这不会影响Python摘要方法,它对于多项和二进制情况仍然可以正常工作。

废弃和行为变化
弃用
  • OneHotEncoder已被弃用,将在3.0中删除。它已被新的OneHotEncoderEstimator所取代(参见SPARK-13​​030)。请注意,OneHotEncoderEstimator将在3.0中重命名为OneHotEncoder(但OneHotEncoderEstimator将保留为别名)。
行为的变化
  • SPARK-21027:OneVsRest中使用的默认并行度现在设置为1(即串行)。在2.2及更早版本中,并行度级别设置为Scala中的默认线程池大小。
  • SPARK-22156:当numIterations设置为大于1时,Word2Vec的学习速率更新不正确。这将导致2.3和早期版本之间的训练结果不同。
  • SPARK-21681:修复了多项Logistic回归中的边缘案例错误,当某些特征的方差为零时,导致系数不正确。
  • SPARK-16957:树算法现在使用中点来分割值。这可能会改变模型训练的结果。
  • SPARK-14657:修复了RFormula在没有截距的情况下生成的特征与R中的输出不一致的问题。这可能会改变此场景中模型训练的结果。

2 MLlib的数据结构

2.1 本地向量(Local vector)

具有整数类型和基于0的索引和双类型值

本地向量的基类是Vector,我们提供了两个实现:DenseVector 和 SparseVector

◆ 本地向量是存储在本地节点上的,其基本数据类型是Vector.
其有两个子集,分别是密集的与稀疏的

  • 密集向量由表示其条目值的双数组支持
  • 而稀疏向量由两个并行数组支持:索引和值

我们一般使用Vectors工厂类来生成
例如:

◆ Vectors.dense(1.0,2.0,3.0) 主要使用稠密的

◆ Vectors.sparse(3,(0,1),(1,2),(2,3)) 稀疏的了解即可

向量(1.00.03.0)可以密集格式表示为1.00.03.0,或以稀疏格式表示为(3,02,1.03.0),其中3是矢量的大小。

2.2 标签数据(Labeled point)

与标签/响应相关联的局部矢量,密集或稀疏
在MLlib中,用于监督学习算法。 我们使用双重存储标签,所以我们可以在回归和分类中使用标记点
对于二进制分类,标签应为0(负)或1(正)
对于多类分类,标签应该是从零开始的类索引:0,1,2,....

标记点由事例类  LabeledPoint 表示

◆ 我们在前面介绍过"监督学习”, 知道监督学习是(x,y)数据形式,其中这个y就是标签,X是特征向量
标签数据也是一样,我们看一下这个代码

LabeledPoint(1.0,Vectors.dense(1.0,2.0,3.0))

2.3 本地矩阵

本地矩阵具有整数类型的行和列索引和双类型值,存储在单个机器上。 MLlib支持密集矩阵,其入口值以列主序列存储在单个双阵列中,稀疏矩阵的非零入口值以列主要顺序存储在压缩稀疏列(CSC)格式中

与向量相似,本地矩阵类型为Matrix , 分为稠密与稀疏两种类型。同样使
用工厂方法Matrices来生成。但是要注意,MLlib的矩阵是按列存储的。
例如下面创建一个3x3的单位矩阵:

Matrices.dense(3,3,Array(1,0,0,0,1,0,0,0,1))

类似地,稀疏矩阵的创建方法

Matrices.sparse(3,3,Array(0,1,2,3),Array(0,1,2),Array(1,1,1))

2.4 分布式矩阵

◆ 把一个矩数据分布式存储到多个RDD中
将分布式矩阵进行数据转换需要全局的shuffle函数
最基本的分布式矩阵是RowMatrix.

分布式矩阵具有长类型的行和列索引和双类型值,分布式存储在一个或多个RDD中。选择正确的格式来存储大型和分布式矩阵是非常重要的。将分布式矩阵转换为不同的格式可能需要全局shuffle,这是相当昂贵的。到目前为止已经实现了四种类型的分布式矩阵。

基本类型称为RowMatrix。 RowMatrix是没有有意义的行索引的行向分布式矩阵,例如特征向量的集合。它由其行的RDD支持,其中每行是局部向量。我们假设RowMatrix的列数不是很大,因此单个本地向量可以合理地传递给驱动程序,也可以使用单个节点进行存储/操作。 IndexedRowMatrix与RowMatrix类似,但具有行索引,可用于标识行和执行连接。 CoordinateMatrix是以坐标 list(COO) 格式存储的分布式矩阵,由其条目的RDD支持。 BlockMatrix是由MatrixBlock的RDD支持的分布式矩阵,它是(Int,Int,Matrix)的元组。

2.5 分布式数据集

◆ RDD Dataset DataFrame都是Spark的分布式数据集的数据格式
三者在一定程度上可以互相转化,有各自的适用范围
其中RDD是最为基础与简单的一种数据集形式

2.5.1 RDD

◆ RDD(Resilient Distributed Datasets),弹性分布式数据集,是Spark中结构最简单,也是最常用的一类数据集形 式。
可以理解为把输入数据进行简单的封装之后形成的对内存数据的抽象。

2.5.2 Dataset

◆ 与RDD分行存储,没有列的概念不同,Dataset 引入了列的概念,这一点类似于一个CSV文件结构。类似于一个简单的2维表

2.5.3 DataFrame

DataFrame结构与Dataset 是类似的,都引|入了列的概念
与Dataset不同的是,DataFrame中的毎一-行被再次封装刃Row的対象。需要通过该対象的方法来获取到具体的值.

3 MLlib与ml

3.1 Spark提供的机器学习算法

◆ 通用算法
分类,回归,聚类等

◆ 特征工程类
降维,转换,选择,特征提取等

◆数学工具
概率统计 ,矩阵运算等

◆ pipeline 等

3.2 MLlib与ml的区别

MLlib采用RDD形式的数据结构,而ml使用DataFrame的结构.

◆ Spark官方希望 用ml逐步替换MLlib
◆ 教程中两者兼顾

如无特殊指明,MLlib指代Spark的机器学习组件

4 MLlib的应用场景

4.1 海量数据的分析与挖掘

◆ 例如对海量的房屋出租,出售信息进行数据挖掘,预测房价价格,租金
◆ 典型数据集:波士顿房价数据集
◆ 主要用到传统的数据挖掘算法,例如使用回归算法

4.2 大数据机器学习系统

◆ 例如自然语言处理类的系统,推荐系统等
◆ 推荐系统,需要实时进行数据的收集,统计,任务调度,定期更新训练模型
◆ 核心实现: Spark Streaming +MLlib

Spark机器学习实践系列

目录
相关文章
|
27天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从理论到实践的旅程
【8月更文挑战第26天】机器学习,这个听起来既神秘又充满无限可能的领域,实际上已经深入到我们生活的方方面面。本文将通过一次虚拟的“旅行”,带领读者了解机器学习的基本概念、主要技术和应用实例,同时提供一个简单的Python代码示例,帮助初学者迈出探索这一激动人心领域的第一步。无论你是科技爱好者,还是对未来充满好奇的学生,这篇文章都将成为你理解并应用机器学习技术的启航点。
|
2月前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从理论到实践的旅程
本文旨在为读者提供一个关于机器学习领域的全面概述,涵盖了基本概念、关键技术、实际应用以及未来发展趋势。通过深入浅出的方式,引导读者理解机器学习的核心原理,并通过具体案例展示其在现实世界中的应用价值。文章不仅探讨了机器学习的理论基础,还着重介绍了几种主要的机器学习算法,并分析了它们在不同场景下的适用性。同时,本文也对机器学习面临的挑战和未来的发展方向进行了前瞻性的讨论。
34 0
|
2月前
|
机器学习/深度学习 运维 监控
智能化运维的崛起:机器学习在IT管理中的实践与挑战
本文深入探讨了智能化运维领域,特别是机器学习技术在IT管理中的应用。文章首先介绍了智能化运维的概念及其重要性,随后详细阐述了机器学习在故障预测、自动化响应和系统优化中的作用。同时,文章也指出了实施智能化运维时可能遇到的技术挑战和数据治理问题,并提出了相应的解决策略。最后,通过具体案例分析,展示了机器学习技术如何在实际运维中提高系统稳定性和效率。
|
1月前
|
机器学习/深度学习 人工智能 供应链
掌握机器学习:从理论到实践PHP:从入门到精通的旅程
【8月更文挑战第20天】在探索人工智能的无限可能时,机器学习作为核心驱动力,引领着技术革新和产业变革。本文深入浅出地介绍了机器学习的基本概念、核心算法及其在实际中的应用,旨在为初学者提供一个清晰的学习路径和对这一激动人心领域的全面理解。通过探讨机器学习如何影响我们的生活和工作,本文不仅阐述了理论知识,还分享了实践案例,帮助读者把握机器学习的精髓,激发对未来技术发展的想象与创造。
165 65
|
2天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从理论到实践
【9月更文挑战第19天】在这篇文章中,我们将深入探讨机器学习的基本概念、主要算法和应用。我们将从理论基础出发,逐步过渡到实际应用,包括代码示例。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启发。
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习:从理论到实践
【9月更文挑战第15天】本文将深入浅出地介绍机器学习的基本概念,并逐步展开讲解如何通过Python实现一个简单的线性回归模型。我们的目标是为初学者提供一条清晰的学习路径,帮助他们理解机器学习的核心原理,并通过动手实践加深印象。文章分为三个部分:首先,我们将解释机器学习的基础知识;其次,我们将展示如何使用Python和scikit-learn库构建一个线性回归模型;最后,我们将探讨如何评估模型的性能。无论你是机器学习领域的新手还是有一定基础的学习者,这篇文章都将为你提供有价值的见解和实用的技能。
|
1月前
|
机器学习/深度学习 人工智能 数据处理
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
探测外太空中的系外行星是天文学和天体物理学的重要研究领域。随着望远镜观测技术的进步和大数据的积累,科学家们已经能够观测到大量恒星的光度变化,并尝试从中识别出由行星凌日(行星经过恒星前方时遮挡部分光线)引起的微小亮度变化。然而,由于数据量巨大且信号微弱,传统方法难以高效准确地识别所有行星信号。因此,本项目旨在利用机器学习技术,特别是深度学习,从海量的天文观测数据中自动识别和分类系外行星的信号。这要求设计一套高效的数据处理流程、构建适合的机器学习模型,并实现自动化的预测和验证系统。
34 1
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
|
1月前
|
机器学习/深度学习 人工智能 算法
AI基础科普:机器学习入门与实践
本文全面介绍了机器学习及其在信用评分预测中的应用。首先概览了机器学习作为人工智能核心领域的重要性及其实现数字化转型的作用。接着定义了机器学习,并区分了监督、无监督和强化学习等主要类型。随后,通过一个具体的场景——利用Python与scikit-learn库构建逻辑回归模型来预测客户的信用等级,详细阐述了从数据准备、模型训练到评估的全过程。此外,还介绍了如何借助阿里云机器学习平台PAI进行云上的模型训练和部署。最后,通过总结逻辑回归算法和其在金融领域的应用,鼓励读者深入学习并实践AI技术,以适应快速发展的科技趋势。
85 2
AI基础科普:机器学习入门与实践
|
25天前
|
机器学习/深度学习 数据处理 定位技术
构建您的首个机器学习项目:从理论到实践
【8月更文挑战第28天】本文旨在为初学者提供一个简明的指南,通过介绍一个基础的机器学习项目——预测房价——来揭示机器学习的神秘面纱。我们将从数据收集开始,逐步深入到数据处理、模型选择、训练和评估等环节。通过实际操作,你将学会如何利用Python及其强大的科学计算库来实现自己的机器学习模型。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往机器学习世界的大门。
|
30天前
|
机器学习/深度学习 人工智能 算法
探索机器学习的奥秘:从理论到实践
【8月更文挑战第23天】在这篇文章中,我们将深入探讨机器学习的世界,从基础理论到实际应用。我们将了解机器学习的基本概念,探索不同类型的机器学习算法,并讨论如何将这些算法应用于实际问题。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。让我们一起踏上这段激动人心的旅程吧!

热门文章

最新文章