2.5 Spark 2.2 MLlib
Spark 2.2版本中新增了基于DataFrame的机器学习;Spark 2.2对R语言的机器学习新增了更多算法的支持,如Random Forest(随机森林)、Gaussian Mixture Model(高斯混合模型)、Naive Bayes(朴素贝叶斯)、Survival Regression(生存回归分析)以及K-Means(K-均值)等算法。
Apache Spark 2.2.0版本中MLlib的更新如下。
1.基于DataFrame的API的新算法
SPARK-14709:LinearSVC(线性SVM分类器)(Scala/Java/Python/R)。
SPARK-19635:基于DataFrame的API(Scala/Java/Python)中的ChiSquare测试。
SPARK-19636:基于DataFrame的API(Scala/Java/Python)的相关性。
SPARK-13568:用于估算缺失值的计算特征变换器(Scala/Java/Python)。
SPARK-18929:为GLM增加Tweedie分布(Scala/Java/Python/R)。
SPARK-14503:FPGrowth频繁模式挖掘和关联规则(Scala/Java/Python/R)。
2.现有的算法增加到Python和R API
SPARK-18239:梯度增强树。
SPARK-18821:二分K均值。
SPARK-18080:区域敏感哈希(LSH)(Python)。
SPARK-6227:PySpark的分布式PCA和SVD(基于RDD的API)。
3.主要的BUG修复
SPARK-19110:DistributedLDAModel.logPrior正确性修复。
SPARK-17975:EMLDAOptimizer失败产生的异常ClassCastException(由GraphX检查点错误引起)。
SPARK-18715:修正二项式GLM中AIC计算的错误。
SPARK-16473:二分K均值失败,训练使用一定的输入次数时,提示“java.util. NoSuchElementException: key not found”。
SPARK-19348:pyspark.ml.Pipeline在多线程使用下损坏。
SPARK-20047:箱约束逻辑回归。
4.废弃功能
SPARK-18613:spark.ml LDA类不应在API中公开spark.mllib。在spark.ml.LDAModel中已弃用oldLocalModel和getModel。
5.行为变化
SPARK-19787:DeveloperApi ALS.train()使用默认的regParam值0.1,而不是1.0,以匹配常规ALS API的默认regParam设置。
2.5.1 基于DataFrame的Machine Learning API
我们可以从下载的Spark源码中看到加入了spark.ml包(原来的spark.mllib仍然存在),这是在新版本中加入的基于DataFrame的机器学习代码包,存储在DataFrames中的向量和矩阵现在使用更高效的序列化,减少了调用MLlib算法的开销。现在spark.ml包代替基于RDD的ML成为主要的SparkMLAPI。有一个很重要的功能是,现在可以保存和加载Spark支持的所有语言的Machine Learning pipeline和model了。
2.5.2 R的分布式算法
Apache Spark 2.2.0版本中SparkR的更新如下。
SparkR在2.2.0版本中为现有的Spark SQL功能增加了广泛的支持。
1.主要更新的功能点
SPARK-19654:R的结构化流式API。
SPARK-20159:在R中支持完整的Catalog API。
SPARK-19795:列函数to_json、from_json。
SPARK-19399:在DataFrame上合并,并在列上合并。
SPARK-20020:支持DataFrame检查点。
SPARK-18285:R中的多列近似数。
2.废弃功能
SPARK-20195:弃用createExternalTable。
3.行为变化
SPARK-19291:为SparkR高斯混合模型增加了对数似然,但这导致SparkR 2.1版本与2.2版本不兼容:从SparkR 2.1保存的高斯混合模型可能不会加载到SparkR 2.2中。计划未来推出SparkR的向后兼容性保证。
4.已知的问题
SPARK-21093:在SparkR中,多次执行有时会失败。
Spark 2.X版本对SparkR的最大改进是用户自定义函数,包括dapply、gapply和lapply,前两者可以用于执行基于分区的用户自定义函数(如分区域模型学习),而后者可用于超参数整定。
Spark 2.X对R语言的机器学习增加了几种算法:Random Forest(随机森林)、Gaussian Mixture Model(高斯混合模型)、Naive Bayes(朴素贝叶斯)、Survival Regression(生存回归分析)以及K-Means(K-均值)等。支持多项逻辑回归,来提供与glmnet R相似的功能。
同时对Python的机器学习也增加了一些算法,如LDA(线性判别式分析Linear Discriminant Analysis)、高斯混合模型、广义线性回归等。