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

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

1 MLlib概述

1.1 MLlib 介绍

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

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

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

1.2 Spark MLlib实现的算法

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

1.3 Spark MLlib官方介绍

1.3.1 搜索官方文档

image.png

image.png

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-13030)。请注意,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中的输出不一致的问题。这可能会改变此场景中模型训练的结果。
目录
相关文章
|
8月前
|
机器学习/深度学习 数据采集 数据处理
构建高效机器学习模型的策略与实践
【2月更文挑战第14天】 在数据驱动的时代,机器学习已成为智能系统的核心。本文将探讨构建高效机器学习模型的关键技术要素,包括数据预处理、特征工程、模型选择和调参策略等。通过实例分析,我们将展示如何优化模型性能,减少过拟合风险,并提高泛化能力。文章旨在为开发者提供实用的技术指导,帮助他们在实际项目中实现机器学习模型的高效构建与应用。
|
8月前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的策略与实践
【2月更文挑战第23天】 在数据科学领域,构建一个高效的机器学习模型是至关重要的。本文旨在探讨并提出一系列策略和最佳实践,以指导读者如何从数据处理到模型部署的各个阶段优化其机器学习项目。我们将重点讨论特征工程、算法选择、超参数调整以及模型评估等关键环节,并通过案例分析展示如何应对常见的挑战和误区。文章的目的是为从业者提供实用的指南,帮助他们构建出既准确又高效的机器学习系统。
|
8月前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。
|
8月前
|
机器学习/深度学习 算法 数据处理
构建高效机器学习模型的策略与实践
【2月更文挑战第25天】本文旨在探讨如何通过一系列策略性步骤来构建一个高效的机器学习模型。我们将从数据处理的重要性讲起,接着讨论特征选择的艺术以及模型训练的技巧。文章将提供实用的建议,并通过案例分析展示如何在实践中应用这些策略,以期帮助数据科学家和开发者提高他们的模型性能。
|
8月前
|
机器学习/深度学习 数据采集 存储
使用机器学习算法进行文本分类的方法与实践
本文将介绍使用机器学习算法进行文本分类的方法与实践。通过分析文本特征、选择合适的机器学习算法和构建有效的训练模型,可以实现准确和高效的文本分类任务。我们还将探讨如何处理文本数据预处理、特征提取和模型评估等方面的关键问题,以帮助读者更好地应用机器学习技术解决文本分类挑战。
|
8月前
|
机器学习/深度学习 数据采集 自然语言处理
构建高效机器学习模型的策略与实践
【2月更文挑战第20天】 在数据科学的黄金时代,机器学习已成为解决复杂问题的利器。本文将探讨如何构建一个高效的机器学习模型,包括数据预处理、特征选择、模型训练和调优等关键步骤。我们将通过实例展示如何应用这些策略,以提高模型的准确性和泛化能力。
|
8月前
|
机器学习/深度学习 人工智能 算法
构建高效机器学习模型的策略与实践
【2月更文挑战第19天】 在机器学习领域,构建一个既高效又准确的模型是每个数据科学家追求的目标。本文将深入探讨如何通过现代技术手段和策略来优化机器学习模型的性能。我们将讨论特征工程的重要性、超参数调优的技巧、以及利用集成学习方法提升预测准确度。文章还将涉及模型压缩和加速的先进技术,包括网络剪枝、量化和知识蒸馏等方法。这些策略不仅能够提高模型在资源受限环境中的实用性,还能在保持准确率的同时减少计算成本。
|
8月前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的策略与实践
【2月更文挑战第26天】 在当今数据驱动的时代,构建高效的机器学习模型已经成为了企业获取竞争优势的关键。本文将探讨一系列实用的策略和技术,旨在指导读者如何从数据准备到模型部署的全过程中优化其机器学习项目。我们将重点讨论特征工程的重要性、超参数调优的技巧、以及模型评估和验证的最佳实践。通过这些方法的应用,读者可以提升模型的性能,确保在现实世界的复杂问题中达到更高的准确率和泛化能力。
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习:从基础概念到应用实践
探索机器学习:从基础概念到应用实践
|
8月前
|
机器学习/深度学习 数据挖掘 程序员
深入理解Python协程:提升并发编程效率基于Python的机器学习入门:从理论到实践
本文旨在探讨Python协程(Coroutine)的内部机制及其在并发编程中的应用。区别于传统的线程和进程,协程提供了一种更轻量级、高效的并发编程模式。通过深入分析协程的工作原理,本文将展示如何利用协程优化程序性能,实现高效的异步任务处理。我们将通过实例探讨协程的创建、事件循环的管理、以及与异步IO的集成,为读者提供一套完整的协程应用方案。此外,本文还将对比协程与其他并发模型(如多线程和多进程)的优劣,帮助读者全面理解协程在现代编程中的重要性。 在本文中,我们将深入探讨机器学习的核心概念,并通过Python实现其基础应用。不同于传统的技术文章摘要,我们希望通过一个故事性的引入,让读者感受到

热门文章

最新文章