迁移指南:MLlib(机器学习)
- 从 MLlib 3.5 升级到 4.0
- 从 MLlib 2.4 升级到 3.0
- 从 MLlib 2.2 升级到 2.3
- 从 MLlib 2.1 升级到 2.2
- 从 MLlib 2.0 升级到 2.1
- 从 MLlib 1.6 升级到 2.0
- 从 MLlib 1.5 升级到 1.6
- 从 MLlib 1.4 升级到 1.5
- 从 MLlib 1.3 升级到 1.4
- 从 MLlib 1.2 升级到 1.3
- 从 MLlib 1.1 升级到 1.2
- 从 MLlib 1.0 升级到 1.1
- 从 MLlib 0.9 升级到 1.0
请注意,本迁移指南仅描述 MLlib 特有的内容。在将基于 DataFrame 的 API 的 MLlib 迁移到更高版本时,许多 SQL 迁移的内容也同样适用。请参阅 迁移指南:SQL、Dataset 和 DataFrame。
从 MLlib 3.5 升级到 4.0
破坏性变更
没有破坏性变更。
弃用和行为变更
弃用
没有弃用内容。
行为变更
- SPARK-51132:通过 PMML 模型导出 导出的 PMML 格式模型的 PMML XML 模式版本已从
PMML-4_3升级到PMML-4_4。
从 MLlib 2.4 升级到 3.0
破坏性变更
- 在 2.3 版本中已弃用的
OneHotEncoder在 3.0 版本中被移除,OneHotEncoderEstimator现已重命名为OneHotEncoder。 - 在 2.3 版本中已弃用的
org.apache.spark.ml.image.ImageSchema.readImages在 3.0 版本中被移除,请改用spark.read.format('image')。 - 在 2.1 版本中已弃用的带有
runs参数(Int 类型)的org.apache.spark.mllib.clustering.KMeans.train在 3.0 版本中被移除。请改用不带runs参数的train方法。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.classification.LogisticRegressionWithSGD在 3.0 版本中被移除,请改用org.apache.spark.ml.classification.LogisticRegression或spark.mllib.classification.LogisticRegressionWithLBFGS。 - 在 2.1 版本中已弃用的
org.apache.spark.mllib.feature.ChiSqSelectorModel.isSorted在 3.0 版本中被移除,该方法不建议子类使用。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.regression.RidgeRegressionWithSGD在 3.0 版本中被移除,请改用带有elasticNetParam= 0.0 的org.apache.spark.ml.regression.LinearRegression。注意:RidgeRegressionWithSGD的默认regParam为 0.01,而LinearRegression的默认为 0.0。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.regression.LassoWithSGD在 3.0 版本中被移除,请改用带有elasticNetParam= 1.0 的org.apache.spark.ml.regression.LinearRegression。注意:LassoWithSGD的默认regParam为 0.01,而LinearRegression的默认为 0.0。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.regression.LinearRegressionWithSGD在 3.0 版本中被移除,请改用org.apache.spark.ml.regression.LinearRegression或LBFGS。 - 在 2.1 版本中已弃用的
org.apache.spark.mllib.clustering.KMeans.getRuns和setRuns在 3.0 版本中被移除,自 Spark 2.0.0 起它们已不再生效。 - 在 2.4 版本中已弃用的
org.apache.spark.ml.LinearSVCModel.setWeightCol在 3.0 版本中被移除,该方法不面向用户。 - 从 3.0 版本开始,
org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel扩展了MultilayerPerceptronParams以公开训练参数。因此,MultilayerPerceptronClassificationModel中的layers参数已从Array[Int]更改为IntArrayParam。用户应使用MultilayerPerceptronClassificationModel.getLayers来获取层大小,而不是直接访问MultilayerPerceptronClassificationModel.layers。 - 在 2.4.5 版本中已弃用的
org.apache.spark.ml.classification.GBTClassifier.numTrees在 3.0 版本中被移除,请改用getNumTrees。 - 在 2.4 版本中已弃用的
org.apache.spark.ml.clustering.KMeansModel.computeCost在 3.0 版本中被移除,请改用ClusteringEvaluator。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.evaluation.MulticlassMetrics中的成员变量precision在 3.0 版本中被移除。请改用accuracy。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.evaluation.MulticlassMetrics中的成员变量recall在 3.0 版本中被移除。请改用accuracy。 - 在 2.0 版本中已弃用的
org.apache.spark.mllib.evaluation.MulticlassMetrics中的成员变量fMeasure在 3.0 版本中被移除。请改用accuracy。 - 在 2.0 版本中已弃用的
org.apache.spark.ml.util.GeneralMLWriter.context在 3.0 版本中被移除,请改用session。 - 在 2.0 版本中已弃用的
org.apache.spark.ml.util.MLWriter.context在 3.0 版本中被移除,请改用session。 - 在 2.0 版本中已弃用的
org.apache.spark.ml.util.MLReader.context在 3.0 版本中被移除,请改用session。 - 在 3.0 版本中,抽象类
UnaryTransformer[IN, OUT, T <: UnaryTransformer[IN, OUT, T]]变更为abstract class UnaryTransformer[IN: TypeTag, OUT: TypeTag, T <: UnaryTransformer[IN, OUT, T]]。
弃用和行为变更
弃用
- SPARK-11215:
StringIndexerModel中的labels已弃用,并将在 3.1.0 版本中移除。请改用labelsArray。 - SPARK-25758:
BisectingKMeansModel中的computeCost已弃用,并将在未来版本中移除。请改用ClusteringEvaluator。
行为变更
- SPARK-11215:在 Spark 2.4 及之前的版本中,当在
StringIndexer中将stringOrderType参数指定为frequencyDesc或frequencyAsc时,如果频率相同,字符串的顺序是不确定的。自 Spark 3.0 起,频率相同的字符串会按字母顺序进一步排序。此外,从 3.0 开始,StringIndexer支持对多列进行编码。 - SPARK-20604:在 3.0 之前,
Imputer要求输入列为 Double 或 Float 类型。在 3.0 中,此限制被取消,因此Imputer可以处理所有数值类型。 - SPARK-23469:在 Spark 3.0 中,
HashingTF转换器使用了改进的 murmur3 哈希函数实现,将元素映射到向量中。Spark 3.0 中的HashingTF会将元素映射到与 Spark 2 中不同的向量位置。但是,由 Spark 2.x 创建并由 Spark 3.0 加载的HashingTF将继续使用之前的哈希函数,行为不会改变。 - SPARK-28969:PySpark
OneVsRestModel中的setClassifier方法已在 3.0 中移除,以与 Scala 实现保持一致。调用者通常不需要在模型创建后重新设置分类器。 - SPARK-25790:PCA 在 Spark 3.0 中增加了对超过 65535 列矩阵的支持。
- SPARK-28927:当对非确定性输入数据拟合 ALS 模型时,之前如果发生重跑,用户会看到由 In/Out 用户/项目块不匹配引起的
ArrayIndexOutOfBoundsException。从 3.0 开始,将抛出带有更清晰消息的SparkException,并将原始的ArrayIndexOutOfBoundsException进行包装。 - SPARK-29232:在 3.0 之前的版本中,
RandomForestRegressionModel不会更新其底层DecisionTreeRegressionModels的参数映射。此问题已在 3.0 中修复。
从 MLlib 2.2 升级到 2.3
破坏性变更
- 逻辑回归模型摘要的类和特征层次结构已进行更改,使其更简洁,并更好地适应多分类摘要的添加。对于将
LogisticRegressionTrainingSummary强制转换为BinaryLogisticRegressionTrainingSummary的用户代码,这是一个破坏性变更。用户应改为使用model.binarySummary方法。详情请参阅 SPARK-17139(注:这是一个ExperimentalAPI)。这不会影响 Python 的summary方法,该方法在多项式和二项式情况下均可正常工作。
弃用和行为变更
弃用
OneHotEncoder已弃用,并将在3.0版本中移除。它已被新的OneHotEncoderEstimator取代(参见 SPARK-13030)。注意,OneHotEncoderEstimator将在3.0中重命名为OneHotEncoder(但OneHotEncoderEstimator将保留作为别名)。
行为变更
- SPARK-21027:
OneVsRest中使用的默认并行度现设置为 1(即串行)。在2.2及更早版本中,并行度设置为 Scala 中的默认线程池大小。 - SPARK-22156:当
numIterations设置大于1时,Word2Vec的学习率更新不正确。这将导致训练结果在2.3及更早版本之间存在差异。 - SPARK-21681:修复了多项逻辑回归中的一个边缘情况错误,该错误导致某些特征具有零方差时产生错误的系数。
- SPARK-16957:树算法现在使用中点作为分割值。这可能会改变模型训练的结果。
- SPARK-14657:修复了
RFormula在没有截距的情况下生成的特征与 R 中的输出不一致的问题。在这种情况下,这可能会改变模型训练的结果。
从 MLlib 2.1 升级到 2.2
破坏性变更
没有破坏性变更。
弃用和行为变更
弃用
没有弃用内容。
行为变更
- SPARK-19787:
ALS.train方法(标记为DeveloperApi)的regParam默认值已从1.0更改为0.1。注意:这不影响ALSEstimator 或 Model,也不影响 MLlib 的ALS类。 - SPARK-14772:修复了
Param.copy方法在 Python 和 Scala API 之间的不一致。 - SPARK-11569:
StringIndexer现在以处理未见值相同的方式处理NULL值。之前,无论handleInvalid参数设置如何,总是会抛出异常。
从 MLlib 2.0 升级到 2.1
破坏性变更
已移除弃用的方法
feature.ChiSqSelectorModel中的setLabelColclassification.RandomForestClassificationModel中的numTrees(现在指向名为numTrees的参数)regression.RandomForestRegressionModel中的numTrees(现在指向名为numTrees的参数)regression.LinearRegressionSummary中的modelPipelineStage中的validateParamsEvaluator中的validateParams
弃用和行为变更
弃用
- SPARK-18592:弃用除输入/输出列参数之外的所有参数设置方法,适用于
DecisionTreeClassificationModel,GBTClassificationModel,RandomForestClassificationModel,DecisionTreeRegressionModel,GBTRegressionModel和RandomForestRegressionModel
行为变更
- SPARK-17870:修复
ChiSqSelector的一个 Bug,该修复很可能会改变结果。现在ChiSquareSelector使用 pValue 而非原始统计量来选择固定数量的顶级特征。 - SPARK-3261:在 k 个不同质心不可用或未被选中的情况下,
KMeans可能会返回少于 k 个聚类中心。 - SPARK-17389:
KMeans将 k-means|| 初始化模式的默认步数从 5 减少到 2。
从 MLlib 1.6 升级到 2.0
破坏性变更
Spark 2.0 中有几项破坏性变更,概述如下。
用于 DataFrame API 的线性代数类
Spark 的线性代数依赖项已被移动到一个新项目 mllib-local(参见 SPARK-13944)。作为此更改的一部分,线性代数类被复制到了一个新的包 spark.ml.linalg 中。spark.ml 中的基于 DataFrame 的 API 现在依赖于 spark.ml.linalg 类,导致了一些破坏性变更,主要是在各个模型类中(完整列表请参见 SPARK-14810)。
注意:spark.mllib 中的基于 RDD 的 API 继续依赖于之前的包 spark.mllib.linalg。
转换向量和矩阵
虽然大多数流水线组件支持加载时的向后兼容性,但在 2.0 之前的 Spark 版本中,一些包含向量或矩阵列的现有 DataFrame 和流水线可能需要迁移到新的 spark.ml 向量和矩阵类型。用于将 DataFrame 列从 spark.mllib.linalg 类型转换为 spark.ml.linalg 类型(反之亦然)的工具可以在 spark.mllib.util.MLUtils 中找到。
此外,还有用于转换单个向量和矩阵实例的实用方法。在 mllib.linalg.Vector / mllib.linalg.Matrix 上使用 asML 方法可转换为 ml.linalg 类型,使用 mllib.linalg.Vectors.fromML / mllib.linalg.Matrices.fromML 可转换为 mllib.linalg 类型。
from pyspark.mllib.util import MLUtils
# convert DataFrame columns
convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
# convert a single vector or matrix
mlVec = mllibVec.asML()
mlMat = mllibMat.asML()有关详细信息,请参阅 MLUtils Python 文档。
import org.apache.spark.mllib.util.MLUtils
// convert DataFrame columns
val convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
val convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
// convert a single vector or matrix
val mlVec: org.apache.spark.ml.linalg.Vector = mllibVec.asML
val mlMat: org.apache.spark.ml.linalg.Matrix = mllibMat.asML有关详细信息,请参阅 MLUtils Scala 文档。
import org.apache.spark.mllib.util.MLUtils;
import org.apache.spark.sql.Dataset;
// convert DataFrame columns
Dataset<Row> convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF);
Dataset<Row> convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF);
// convert a single vector or matrix
org.apache.spark.ml.linalg.Vector mlVec = mllibVec.asML();
org.apache.spark.ml.linalg.Matrix mlMat = mllibMat.asML();有关详细信息,请参阅 MLUtils Java 文档。
已移除弃用的方法
spark.mllib 和 spark.ml 包中删除了几个已弃用的方法
ml.evaluation.BinaryClassificationEvaluator中的setScoreColspark.ml中LinearRegression和LogisticRegression中的weightsmllib.optimization.LBFGS中的setMaxNumIterations(标记为DeveloperApi)mllib.rdd.RDDFunctions中的treeReduce和treeAggregate(这些函数现在直接在RDD上可用,此前标记为DeveloperApi)mllib.tree.configuration.Strategy中的defaultStrategymllib.tree.Node中的buildmllib.util.MLUtils中的多类 libsvm 加载器和 load/save labeledData 方法
完整的破坏性变更列表可在 SPARK-14810 中找到。
弃用和行为变更
弃用
spark.mllib 和 spark.ml 包中的弃用内容包括
- SPARK-14984:在
spark.ml.regression.LinearRegressionSummary中,model字段已弃用。 - SPARK-13784:在
spark.ml.regression.RandomForestRegressionModel和spark.ml.classification.RandomForestClassificationModel中,numTrees参数已弃用,建议改用getNumTrees方法。 - SPARK-13761:在
spark.ml.param.Params中,validateParams方法已弃用。我们将重写方法中的所有功能移动到相应的transformSchema中。 - SPARK-14829:在
spark.mllib包中,LinearRegressionWithSGD,LassoWithSGD,RidgeRegressionWithSGD和LogisticRegressionWithSGD已弃用。我们鼓励用户使用spark.ml.regression.LinearRegression和spark.ml.classification.LogisticRegression。 - SPARK-14900:在
spark.mllib.evaluation.MulticlassMetrics中,precision,recall和fMeasure参数已弃用,建议改用accuracy。 - SPARK-15644:在
spark.ml.util.MLReader和spark.ml.util.MLWriter中,context方法已弃用,建议改用session。 - 在
spark.ml.feature.ChiSqSelectorModel中,setLabelCol方法已弃用,因为它未被ChiSqSelectorModel使用。
行为变更
spark.mllib 和 spark.ml 包中的行为变更包括
- SPARK-7780:
spark.mllib.classification.LogisticRegressionWithLBFGS现在直接调用spark.ml.classification.LogisticRegression进行二分类。这将为spark.mllib.classification.LogisticRegressionWithLBFGS引入以下行为变更:- 在使用 L1/L2 更新器训练二分类模型时,截距不会被正则化。
- 如果用户设置不进行正则化,无论是否进行特征缩放,训练都将以相同的收敛速度返回相同的解。
- SPARK-13429:为了与
spark.ml.classification.LogisticRegression提供更好且一致的结果,spark.mllib.classification.LogisticRegressionWithLBFGS的默认值:convergenceTol已从 1E-4 更改为 1E-6。 - SPARK-12363:修复了
PowerIterationClustering的一个 Bug,这很可能会改变其结果。 - SPARK-13048:如果使用了检查点,使用
EM优化器的LDA默认将保留最后一个检查点。 - SPARK-12153:
Word2Vec现在遵守句子边界。之前,它处理不正确。 - SPARK-10574:在
spark.ml和spark.mllib中,HashingTF默认使用MurmurHash3作为哈希算法。 - SPARK-14768:移除了 PySpark
Param的expectedType参数。 - SPARK-14931:更改了一些在 Scala 和 Python 的流水线之间不匹配的默认
Param值。 - SPARK-13600:
QuantileDiscretizer现在使用spark.sql.DataFrameStatFunctions.approxQuantile来查找分割点(之前使用自定义抽样逻辑)。对于相同的输入数据和参数,输出的分桶将会不同。
从 MLlib 1.5 升级到 1.6
spark.mllib 或 spark.ml 包中没有破坏性的 API 变更,但存在一些弃用和行为变更。
弃用
- SPARK-11358:在
spark.mllib.clustering.KMeans中,runs参数已弃用。 - SPARK-10592:在
spark.ml.classification.LogisticRegressionModel和spark.ml.regression.LinearRegressionModel中,weights字段已弃用,改用新名称coefficients。这有助于消除与赋予算法的实例(行)“权重”的歧义。
行为变更
- SPARK-7770:
spark.mllib.tree.GradientBoostedTrees:validationTol在 1.6 中更改了语义。之前,它是绝对误差变化的阈值。现在,它类似于GradientDescent的convergenceTol的行为:对于较大的误差,它使用相对误差(相对于先前的误差);对于较小的误差(< 0.01),它使用绝对误差。 - SPARK-11069:
spark.ml.feature.RegexTokenizer:之前,它在标记化之前不会将字符串转换为小写。现在,它默认转换为小写,并提供不转换的选项。这与较简单的Tokenizer转换器的行为一致。
从 MLlib 1.4 升级到 1.5
在 spark.mllib 包中,没有破坏性的 API 变更,但有几处行为变更
- SPARK-9005:
RegressionMetrics.explainedVariance返回平均回归平方和。 - SPARK-8600:
NaiveBayesModel.labels变为排序状态。 - SPARK-3382:
GradientDescent具有默认的收敛容差1e-3,因此迭代可能比 1.4 更早结束。
在 spark.ml 包中,存在一项破坏性的 API 变更和一项行为变更
- SPARK-9268:由于 Scala 编译器错误,Java 的可变参数支持已从
Params.setDefault中移除。 - SPARK-10097:添加了
Evaluator.isLargerBetter来指示指标排序。像 RMSE 这样的指标不再像 1.4 中那样反转符号。
从 MLlib 1.3 升级到 1.4
在 spark.mllib 包中,有几项破坏性变更,但均在 DeveloperApi 或 Experimental API 中
- 梯度提升树
- (破坏性变更)
Loss.gradient方法的签名已更改。这仅对为 GBT 编写自定义损失函数的用户有影响。 - (破坏性变更) case 类
BoostingStrategy的apply和copy方法已更改,原因是对 case 类字段进行了修改。对于使用BoostingStrategy设置 GBT 参数的用户,这可能是一个问题。
- (破坏性变更)
- (破坏性变更)
LDA.run的返回值已更改。它现在返回抽象类LDAModel而不是具体类DistributedLDAModel。类型为LDAModel的对象仍可强制转换为相应的具体类型,具体取决于优化算法。
在 spark.ml 包中,发生了几项重大 API 变更,包括
Param和其他用于指定参数的 APIuid流水线组件的唯一 ID- 某些类的重组
由于 spark.ml API 在 Spark 1.3 中是 Alpha 组件,我们在此不列出所有变更。然而,自 1.4 起 spark.ml 不再是 Alpha 组件,我们将为未来版本提供任何 API 变更的详细信息。
从 MLlib 1.2 升级到 1.3
在 spark.mllib 包中,有几项破坏性变更。第一个变更(在 ALS 中)是唯一一个不在标记为 Alpha 或 Experimental 的组件中的变更。
- (破坏性变更) 在
ALS中,无关的方法solveLeastSquares已被移除。DeveloperApi方法analyzeBlocks也被移除。 - (破坏性变更)
StandardScalerModel仍为 Alpha 组件。其中,variance方法已被std方法替换。要计算原variance方法返回的列方差值,只需将std返回的标准差值平方即可。 - (破坏性变更)
StreamingLinearRegressionWithSGD仍为 Experimental 组件。其中有两项变更:- 移除带参数的构造函数,改用构建器模式,即使用默认构造函数加上参数设置方法。
- 变量
model不再是公共的。
- (破坏性变更)
DecisionTree仍为 Experimental 组件。在它及其相关类中,有几项变更:- 在
DecisionTree中,弃用的类方法train已被移除。(对象/静态train方法保留。) - 在
Strategy中,checkpointDir参数已被移除。仍然支持检查点,但检查点目录必须在调用树和树集成训练之前设置。
- 在
PythonMLlibAPI(Scala/Java 和 Python 之间用于 MLlib 的接口)以前是一个公共 API,但现在是私有的,声明为private[python]。这从来就不是为了外部使用而设计的。- 在线性回归(包括 Lasso 和岭回归)中,平方损失现在除以 2。因此,为了产生与 1.2 中相同的结果,正则化参数需要除以 2,步长需要乘以 2。
在 spark.ml 包中,主要的 API 变更来自 Spark SQL。我们在此列出最重要的变更:
- 旧的 SchemaRDD 已被具有稍作修改的 API 的 DataFrame 取代。
spark.ml中所有曾经使用 SchemaRDD 的算法现在都使用 DataFrame。 - 在 Spark 1.2 中,我们使用
import sqlContext._(其中sqlContext是SQLContext的实例)从LabeledPoint的RDD隐式转换为SchemaRDD。这些隐式转换已被移动,因此我们现在调用import sqlContext.implicits._。 - 用于 SQL 的 Java API 也相应发生了变化。详情请参阅上述示例和 Spark SQL 编程指南。
其他变更发生在 LogisticRegression 中
scoreCol输出列(默认值为 “score”)被重命名为probabilityCol(默认值为 “probability”)。该类型最初是Double(表示类别 1.0 的概率),但现在是Vector(表示每个类别的概率,以支持未来的多分类)。- 在 Spark 1.2 中,
LogisticRegressionModel不包含截距。在 Spark 1.3 中,它包含截距;但是,由于它使用 spark.mllib.LogisticRegressionWithLBFGS 的默认设置,它将始终为 0.0。使用截距的选项将在未来添加。
从 MLlib 1.1 升级到 1.2
MLlib v1.2 中唯一的 API 变更是在 DecisionTree 中,该 API 在 MLlib 1.2 中继续作为实验性 API
-
(破坏性变更) 分类的 Scala API 采用命名参数指定类别数量。在 MLlib v1.1 中,此参数在 Python 中称为
numClasses,在 Scala 中称为numClassesForClassification。在 MLlib v1.2 中,名称均设置为numClasses。此numClasses参数通过Strategy或通过DecisionTree静态trainClassifier和trainRegressor方法指定。 -
(破坏性变更)
Node的 API 发生了变化。这通常不应影响用户代码,除非用户手动构建决策树(而不是使用trainClassifier或trainRegressor方法)。树Node现在包含更多信息,包括预测标签的概率(用于分类)。 -
打印方法的输出已更改。
toString(Scala/Java) 和__repr__(Python) 方法过去打印完整模型;现在它们打印摘要。对于完整模型,请使用toDebugString。
Spark 发行版中的示例以及 决策树指南 中的示例已相应更新。
从 MLlib 1.0 升级到 1.1
MLlib v1.1 中唯一的 API 变更是在 DecisionTree 中,该 API 在 MLlib 1.1 中继续作为实验性 API
-
(破坏性变更) 树深度的含义已更改了 1,以匹配 scikit-learn 和 rpart 中的树实现。在 MLlib v1.0 中,深度为 1 的树有 1 个叶节点,深度为 2 的树有 1 个根节点和 2 个叶节点。在 MLlib v1.1 中,深度为 0 的树有 1 个叶节点,深度为 1 的树有 1 个根节点和 2 个叶节点。此深度由
Strategy中的maxDepth参数指定,或通过DecisionTree静态trainClassifier和trainRegressor方法指定。 -
(非破坏性变更) 我们建议使用新添加的
trainClassifier和trainRegressor方法来构建DecisionTree,而不是使用旧的参数类Strategy。这些新的训练方法明确区分了分类和回归,并将专门的参数类型替换为简单的String类型。
建议使用的新 trainClassifier 和 trainRegressor 的示例在 决策树指南 中给出。
从 MLlib 0.9 升级到 1.0
在 MLlib v1.0 中,我们以统一的方式支持密集和稀疏输入,这引入了一些破坏性变更。如果您的数据是稀疏的,请以稀疏格式存储,而不是密集格式,以利用存储和计算中的稀疏性。详细信息如下所述。