千家信息网

如何解析spark MLlib训练原理和使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关如何解析spark MLlib训练原理和使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。说明spark MLlib是Sp
千家信息网最后更新 2026年11月02日如何解析spark MLlib训练原理和使用

今天就跟大家聊聊有关如何解析spark MLlib训练原理和使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

说明

spark MLlib是Spark提供的可扩展的机器学习库。MLlib中已经包含了一些通用的学习算法和工具,如:分类、回归、聚类、协同过滤、降维以及底层的优化原语等算法和工具,MLlib提供的API主要分为以下两类。

spark.mllib包中提供的主要API,操作RDD,后续可能废弃。

spark.ml包中提供的构建机器学习工作流的高层次的API,主要操作DataFrame,可使用pipeline把很多操作(算法/特征提取/特征转换)以管道的形式串起来,让数据在这个管道中流动。ml所有模型提供统一的算法操作接口,比如模型训练都是fit。mllib中不同模型会有各种各样的trainXXX。

训练原理

随机森林训练原理:

优化:

逐层训练:因为数据存放在不同的机器上,频繁的访问数据效率非常低,因此采用广度遍历的方法,每次构造所有树的一层,例如如果要训练10棵树,第一次构造所有树的第一层根节点,第二次构造所有深度为2的节点,以此类推,这样访问数据的次数降为树的最大深度,大大减少了机器之间的通信,提高训练效率。

样本抽样:当样本存在连续特征时,其可能的取值可能是无限的,存储其可能出现的值占用较大空间,因此spark对样本进行了抽样,抽样数量,最少抽样1万条

特征装箱:每个离散特征值(对于连续特征,先离散化)称为一个Split,上下限[lowSplit, highSplit]组成一个bin,也就是特征装箱,默认的maxBins是32。对于连续特征,离散化时的bin的个数就是maxBins,采用等频离散化;对于有序的离散特征,bin的个数是特征值个数+1;对于无序离散特征,bin的个数是2^(M-1)-1,M是特征值个数

过程:

1、初始化模型:构建numTrees个Node,赋默认值emptyNode,这些node将作为每棵树的root node,参与后面的训练。将这些node与treeIndex封装加入到队列nodeQueue中,后面会将所有待split的node都加入到这个队列中,依次split,直到所有node触发截止条件,也就是后面的while循环中队列为空了。

2、选择待分裂Node:循环从nodeQueue取出待处理node放入nodesForGroup和treeToNodeToIndexInfo中nodesForGroup是Map[Int, Array[Node]],其key是treeIndex,value是Node数组,其中放着该tree本次要分裂的node

treeToNodeToIndexInfo的类型是Map[Int, Map[Int, NodeIndexInfo]],key为treeIndex,value中Map的key是node.id,这个id来自Node初始化时的第一个参数,第一轮时node的id都是1。其value为NodeIndexInfo结构,

计算最佳node分裂:先在个partition上分别统计,再累积各partition成全局统计,针对每个node遍历所有特征,计算获得最佳分裂。

3、分裂node:根据最佳split进行node的分裂,包括当前节点的一些属性完善,左右孩子节点的构造等,将当前节点的左右孩子节点继续加入nodeQueue中,这里面放的是需要继续分裂的节点,至此当前层分裂完成。

4、循环训练循环执行取出node、分裂node步骤, 直到的所有节点触发结束为止。

5、随机森林继承自树模型集合模型,最终结果,分类投票,回归平均。

梯度下降步骤:

1、把当前的模型参数广播到各个数据partition(可当作虚拟的计算节点)

2、各计算节点进行数据抽样得到mini batch的数据,分别计算梯度,再通过treeAggregate操作汇总梯度,得到最终梯度gradientSum

3、利用gradientSum更新模型权重

缺点:

1、采用全局广播的方式,在每轮迭代前广播全部模型参数。众所周知Spark的广播过程非常消耗带宽资源,特别是当模型的参数规模过大时,广播过程和在每个节点都维护一个权重参数副本的过程都是极消耗资源的过程,这导致了Spark在面对复杂模型时的表现不佳;

2、采用阻断式的梯度下降方式,每轮梯度下降由最慢的节点决定。从上面的分析可知,Spark MLlib的mini batch的过程是在所有节点计算完各自的梯度之后,逐层Aggregate最终汇总生成全局的梯度。也就是说,如果由于数据倾斜等问题导致某个节点计算梯度的时间过长,那么这一过程将block其他所有节点无法执行新的任务。这种同步阻断的分布式梯度计算方式,是Spark MLlib并行训练效率较低的主要原因;

3、Spark MLlib并不支持复杂网络结构和大量可调超参。事实上,Spark MLlib在其标准库里只支持标准的多层感知机神经网络的训练,并不支持RNN,LSTM等复杂网络结构,而且也无法选择不同的activation function等大量超参。这就导致Spark MLlib在支持深度学习方面的能力欠佳

看完上述内容,你们对如何解析spark MLlib训练原理和使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

节点 特征 训练 模型 梯度 数据 过程 离散 个数 参数 广播 抽样 支持 原理 机器 算法 学习 循环 不同 复杂 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 互联网科技网 中国互联网科技工作委员会毛军 互联网科技行业发展 美国互联网科技巨头监管 华中科技大学互联网 上海万想互联网科技 互联网科技论坛 四个字互联网科技公司取名 汉立互联网科技有限公司联系电话 江苏南京365互联网科技 荆州市昕露互联网络科技有限公司 苏州铭阳互联网科技有限公司 互联网金融科技公司的优势 杭州披云加互联网科技有限公司 互联网领先科技宣传片 易租星互联网科技有限公司 深圳互联网科技园地址 陕西彩京云互联网科技有限公司 知域互联网科技有限公司官网 湖南永感互联网科技有限公司 易互联网科技有限公司 唐信互联网科技 壹账通互联网科技 居家互联网科技有限公司 互联网教育科技公司vipkid 坤平互联网科技 恒生互联网科技业指数调整周期 高科技互联网套路 广州智享互联网科技
0