机器学习库MLib指南
MLib是运行在spark上的机器学习库,目的是为了方便使用scala语言进行机器学习。提供如下功能:
- ML算法:提供分类、回归、聚类和协作筛选等常用机器学习算子
- 功能:特征提取、转换、降维,和选择
- 管道线:构建、评估和调优工具
- 缓存:保存和加载算子、模型和管道线
- 工具集:线性代数、统计、数据处理
公告:基于DataFrame的API是私有API
基于RDD的api目前处于维护阶段。
从spark2.0开始,spark.mlib包中基于RDD的api已经进入维护阶段,机器学习中私有API都存放在spark.ml包中,都是基于DataFrame的api。
上面的信息意味着:
- MLib仍然支持spark.mlib包中基于RDD的API,并且会时不时修复个bug。
- MLib目前不会增加新功能。
- spark2.x后续更新会逐渐支持基于DataFrame的API,功能点与RDD的api类似。
- 一旦基与DataFrame的API开发完毕(预计在spark2.2版本时),基于RDD的API就废弃了。
- spark3.0彻底删除基于RDD的api
为何放弃RDD的api,转而支持DataFrame的api
- DataFrame的API比RDD的API更加友好,DataFrame的优势包括spark数据源,SQL/DataFrame查询, 钨和催化剂的优化以及跨语言的统一API。
- 基于DataFrame的机器学习api,是一套统一的,跨机器学习算法和跨多个语言的。
- DataFrame也能促进使用ML管道线,尤其是功能转换。
Spark ML是什么?
Spark ML
,并不是官方名称,而是偶尔指代基于DataFrame
的api
,因为DataFrame
的API
的包名为org.apache.spark.ml
。而且Spark ML Pipelines
也是为了强调PipeLines
的概念。
MLib已经废弃了么
还没有。Mlib包括RDD和DataFrame两种API,目前处于维护阶段,既没有废弃,也不是MLib的全部。
依赖
MLib使用线性代数包Breeze
(依赖优化数据处理的netlib-java
包),如果原生库在runtime没有包含,JVM会报错,且用一个干净的接口代替。
由于许可证的原因,原生我们并不包括netlib-java这个库,需要自行安装或导入到项目中。
如果使用python语言,你需要1.4+版本的NumPy。
迁移指南
MLib目前仍处于开发阶段,Experimental/DeveloperApi 标记的API意味着将来会有变更,下面介绍从2.0升级到2.1的变化
2.0 -》 2.1
改变
移除废弃的方法
- setLabelCol in feature.ChiSqSelectorModel
- numTrees in classification.RandomForestClassificationModel
- numTrees in regression.RandomForestRegressionModel
- model in regression.LinearRegressionSummary
- validateParams in PipelineStage
- validateParams in Evaluator
废弃与变更
废弃
Deprecate all Param setter methods except for input/output column Params for DecisionTreeClassificationModel, GBTClassificationModel, RandomForestClassificationModel, DecisionTreeRegressionModel, GBTRegressionModel and RandomForestRegressionModel
变更
- SPARK-17870: Fix a bug of ChiSqSelector which will likely change its result. Now ChiSquareSelector use pValue rather than raw statistic to select a fixed number of top features.
- SPARK-3261: KMeans returns potentially fewer than k cluster centers in cases where k distinct centroids aren’t available or aren’t selected.
- SPARK-17389: KMeans reduces the default number of steps from 5 to 2 for the k-means|| initialization mode.