org.apache.spark.ml.classification和org.apache.spark.mllib.classification的区别

17
我正在编写一个Spark应用程序并希望在MLlib中使用算法。在API文档中,我发现了同一算法的两个不同类别。例如,org.apache.spark.ml.classification中有一个LogisticRegression,而org.apache.spark.mllib.classification中有一个LogisticRegressionwithSGD。
我唯一找到的区别是org.apache.spark.ml中的LogisticRegression是从Estimator继承而来的,并且可以用于交叉验证。我很困惑它们被放置在不同的包中。有没有人知道原因?谢谢!
2个回答

23

这是一个JIRA问题单

并且根据设计文档

MLlib现在包含了基本的机器学习算法,例如逻辑回归、决策树、交替最小二乘和k均值等。目前的API集合存在一些设计缺陷,阻碍我们向前发展,无法解决实际的机器学习流程,使MLlib自身成为一个可扩展的项目。

新的API集合将位于org.apache.spark.ml下,一旦我们将所有功能迁移到o.a.s.mlo.a.s.mllib将被弃用。


嗨,Yijie,非常感谢!据我所知,如果我想在o.a.s.mllib中的算法上执行交叉验证,我只能手动设置参数并多次运行,而不能使用Cross-validator方法。你有更好的方法吗? - ailzhang
@ailzhang,也许你可以发布另一个问题,看看是否有其他人能够帮忙 :) 我对Mllib知之甚少。 - yjshen

6
Spark MLlib指南”中提到:

spark.mllib包含基于RDD的原始API。

spark.ml提供了更高级别的API,基于DataFrames构建ML管道。

并且

推荐使用spark.ml,因为使用DataFrames的API更加通用和灵活。但是,我们将继续支持spark.mllib,并与spark.ml的开发一起进行。用户应该熟悉使用spark.mllib功能,并期望更多功能的推出。如果新算法很好地符合了ML管道的概念,则开发人员应将其贡献到spark.ml中,例如特征提取器和转换器。

我认为这篇文档解释得非常明白易懂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接