我正在编写一个spark应用程序,并希望在MLlib中使用算法。在API文档中,我发现了同一算法的两个不同的类。
例如,org.apache.spark.ml.classification中的一个LogisticRegression也是org.apache.spark.mllib.classification中的LogisticRegressionwithSGD。
我能找到的唯一区别是org.apache.spark.ml中的那个继承自Estimator,并且能够用于交叉验证。我很困惑,他们被放在不同的包装中。有没有人知道它的原因?谢谢!
答案 0 :(得分:22)
来自Design Doc:
MLlib现在涵盖机器学习算法的基本选择,例如逻辑回归,决策树,交替最小二乘和k均值。当前的API集包含一些阻碍我们前进的设计缺陷 解决实用的机器学习管道, 使MLlib本身成为一个可扩展的项目。
新的API集将保留在
:visited
下,并且在我们将所有功能迁移到org.apache.spark.ml
后,我们将弃用o.a.s.mllib
。
答案 1 :(得分:6)
spark.mllib包含在RDD之上构建的原始API。
spark.ml提供了基于DataFrame构建的更高级API,用于构建ML管道。
和
建议使用spark.ml,因为使用DataFrames,API更灵活,更灵活。但是我们将继续支持spark.mllib以及spark.ml的开发。用户应该习惯使用spark.mllib功能并期待更多功能。如果spark.ml符合ML管道概念,开发人员应该为spark.ml提供新算法,例如,特征提取器和变换器。
我认为该文档很好地解释了它。