精通数据科学笔记 分布式机器学习

在可预见的未来,数据的增长速度仍会大幅超过计算机性能进步的速度。在处理大数据时,需要将很多台计算机联结起来组成一个巨大的分布式计算集群,将收集到的数据分散地存储在这些机器上。

如果每台机器上独立地运行梯度下降法,是可以得到一系列“临时”的参数估计值,但根据这些临时的估计值,我们无法得到正确的参数估值。因此,机器学习的分布式实现并不是那么直接,需要更加精细的分析和设计。


Spark

Spark是由Scala开发的第三方工具包,Spark的python API有个专有名字叫PySpark,基于spark,我们可以很方便地在分布式系统里清洗数据,提取特征和搭建模型。涉及到流式实时计算、ETL(数据仓库技术)、机器学习等。

从MapReduce到spark

纯技术角度讲,大数据涉及两个方面,分布式存储和分布式计算框架,前者的理论基础是谷歌文件系统(GoogleFS),后者的理论基础是MapReduce。

MapReduce里的map步骤是在不同机器上独立且同步运行的,它的主要目的是将数据转换为key-value的形式;而reduce步骤是做聚合运算,它也是在不同机器上独立且同步运行的。map和reduce夹杂着一步数据移动,即shuffle,这步操作会涉及数量巨大的网络传输(network I/O),需要消耗大量时间。spark改进这一点,在训练时将数据存放在内存里,算法性能大幅提高,也称为内存运算

运行spark

两种运行方式:本地运行模型集群运行模式,由参数“--master”控制。

spark dataframe

spark dataframe的读写

sparksession类是运行spark dataframe的基础

创建dataframe的方法有三种:读取特定格式的数据(json,parquet);读取数据库里的数据;将本地Python内的数据转成dataframe。

保存方法有两种:将数据保存为特定格式的数据;将数据保存到外部数据库,如HIVE

spark dataframe的操作

  • 选择数据中的一列或多列
  • 在已有dataframe基础上增加一列(withcolumn)
  • 对dataframe里的数据筛选(filter)
  • 对数据做聚合运算(min,max)
  • spark的运行架构

spark将机器分为两类driver和executor

  • 一个spark程序只有一个driver,其他都是executor
  • pyspark里不仅有JVM进程还有Python进程
  • 当pyspark脚本提交driver后,driver上的Python进程会将代码中需要分步执行的部分编码后传给JVM
  • JVM将需要分布执行的任务分发给各executor,并监控运行情况
  • executor会根据任务的具体内容决定在哪里执行相应的运算,JVM或python 进程

最优化问题的分布式解法

分布式机器学习的原理

绝大多数的机器学习模型,损失函数都可以写成和的形式,根据梯度下降法的迭代公式为

w_{k+1}=w_{k}-\eta \sum _{i}\frac{\partial l}{\partial w}(w_{k},X_{i},y_{i})

将梯度下降法用分布式计算框架MapReduce实现

  • map将第i个数据(X_{i},y_{i})转换为单点损失梯度\frac{\partial l}{\partial w}(w_{k},X_{i},y_{i})
  • reduce将map的结果进行加和
  • MapReduce运算完成以后,用得到的结果去更新参数估计值,并进入下一步迭代。

大数据模型的两个维度

数据量维度:数据集很大,只能依靠集群的力量分布式训练

模型数量维度:需要训练的模型数量很多,每个模型都比较“小”(模型超参数调试


开源工具的弱点

使用开源工具时,是使用者为所用工具的准确性负责。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值