迁移指南:MLlib(机器学习)
- 从 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 特有的项目。在将 MLlib 迁移到更高版本的基于 DataFrame 的 API 时,可以应用 SQL 迁移的许多项目。请参阅迁移指南:SQL、数据集和 DataFrame。
从 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')
。 - 带有参数 Int
runs
的org.apache.spark.mllib.clustering.KMeans.train
在 2.1 中已弃用,并在 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 中已删除,请改用org.apache.spark.ml.regression.LinearRegression
,并将elasticNetParam
设置为 0.0。请注意,RidgeRegressionWithSGD
的默认regParam
为 0.01,而LinearRegression
的默认regParam
为 0.0。 - 在 2.0 中已弃用的
org.apache.spark.mllib.regression.LassoWithSGD
在 3.0 中已删除,请改用org.apache.spark.ml.regression.LinearRegression
,并将elasticNetParam
设置为 1.0。请注意,LassoWithSGD
的默认regParam
为 0.01,而LinearRegression
的默认regParam
为 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
。 abstract class UnaryTransformer[IN, OUT, T <: UnaryTransformer[IN, OUT, T]]
在 3.0 中已更改为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
中指定frequencyDesc
或frequencyAsc
作为stringOrderType
参数时,如果频率相等,则字符串的顺序未定义。自 Spark 3.0 以来,频率相等的字符串将按字母顺序进一步排序。并且自 Spark 3.0 以来,StringIndexer
支持编码多个列。 - SPARK-20604:在 3.0 之前的版本中,
Imputer
要求输入列为 Double 或 Float。在 3.0 中,此限制被解除,因此Imputer
可以处理所有数字类型。 - SPARK-23469:在 Spark 3.0 中,
HashingTF
Transformer 使用 murmur3 哈希函数的更正实现将元素哈希到向量。HashingTF
在 Spark 3.0 中会将元素映射到向量中的不同位置,而不是在 Spark 2 中。但是,使用 Spark 2.x 创建并使用 Spark 3.0 加载的HashingTF
仍将使用先前的哈希函数,并且不会更改行为。 - SPARK-28969:为了与 Scala 实现保持一致,PySpark 的
OneVsRestModel
中的setClassifier
方法已在 3.0 中删除。调用者在创建后不需要在模型中设置分类器。 - SPARK-25790:PCA 在 Spark 3.0 中增加了对超过 65535 列矩阵的支持。
- SPARK-28927:在非确定性输入数据上拟合 ALS 模型时,如果之前发生重新运行,用户会看到由输入/输出用户/项目块之间的不匹配引起的 ArrayIndexOutOfBoundsException。从 3.0 开始,将抛出一个带有更清晰消息的 SparkException,并包装原始的 ArrayIndexOutOfBoundsException。
- SPARK-29232:在 3.0 之前的版本中,
RandomForestRegressionModel
不会更新底层 DecisionTreeRegressionModels 的参数映射。这在 3.0 中已修复。
从 MLlib 2.2 升级到 2.3
重大变更
- 逻辑回归模型摘要的类和特征层次结构已更改为更清晰,并更好地适应多类摘要的添加。对于将
LogisticRegressionTrainingSummary
强制转换为BinaryLogisticRegressionTrainingSummary
的用户代码来说,这是一个重大更改。用户应改用model.binarySummary
方法。有关更多详细信息,请参阅 SPARK-17139 (注意 这是一个Experimental
API)。这不会影响 Pythonsummary
方法,该方法对于多项式和二进制情况仍然可以正常工作。
弃用和行为变更
弃用
OneHotEncoder
已被弃用,将在3.0
中移除。它已被新的OneHotEncoderEstimator
替代 (参见 SPARK-13030)。 注意 在3.0
中,OneHotEncoderEstimator
将被重命名为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
。 注意 这不影响ALS
Estimator 或 Model,也不影响 MLlib 的ALS
类。 - SPARK-14772: 修复了
Param.copy
方法的 Python 和 Scala API 之间的不一致。 - SPARK-11569:
StringIndexer
现在以与未见值相同的方式处理NULL
值。以前,无论handleInvalid
参数的设置如何,都会始终抛出异常。
从 MLlib 2.0 升级到 2.1
重大变更
已删除弃用的方法
feature.ChiSqSelectorModel
中的setLabelCol
classification.RandomForestClassificationModel
中的numTrees
(现在指的是名为numTrees
的 Param)regression.RandomForestRegressionModel
中的numTrees
(现在指的是名为numTrees
的 Param)regression.LinearRegressionSummary
中的model
PipelineStage
中的validateParams
Evaluator
中的validateParams
弃用和行为变更
弃用
- SPARK-18592: 弃用除
DecisionTreeClassificationModel
、GBTClassificationModel
、RandomForestClassificationModel
、DecisionTreeRegressionModel
、GBTRegressionModel
和RandomForestRegressionModel
的输入/输出列 Params 之外的所有 Param setter 方法
行为变更
- 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
。
转换向量和矩阵
虽然大多数 pipeline 组件都支持向后兼容性加载,但 Spark 2.0 之前版本中一些包含向量或矩阵列的现有 DataFrames
和 pipelines 可能需要迁移到新的 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
中的setScoreCol
spark.ml
中LinearRegression
和LogisticRegression
中的weights
mllib.optimization.LBFGS
中的setMaxNumIterations
(标记为DeveloperApi
)mllib.rdd.RDDFunctions
中的treeReduce
和treeAggregate
(这些函数可以直接在RDD
上使用,并标记为DeveloperApi
)mllib.tree.configuration.Strategy
中的defaultStrategy
mllib.tree.Node
中的build
- 用于多类别的 libsvm 加载器以及
mllib.util.MLUtils
中的 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 Updater 训练二元分类模型时,截距将不会被正则化。
- 如果用户设置不进行正则化,则使用或不使用特征缩放进行训练将返回相同的解决方案并具有相同的收敛速度。
- 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:
HashingTF
在spark.ml
和spark.mllib
中默认使用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 的 varargs 支持已从
Params.setDefault
中移除。 - SPARK-10097: 添加了
Evaluator.isLargerBetter
以指示指标排序。像 RMSE 这样的指标不再像 1.4 中那样翻转符号。
从 MLlib 1.3 升级到 1.4
在 spark.mllib
包中,有几个破坏性的更改,但都在 DeveloperApi
或 Experimental
API 中
- 梯度提升树
- (破坏性更改)
Loss.gradient
方法的签名已更改。这仅适用于为 GBT 编写自己的损失函数的用户。 - (破坏性更改) 由于对 case class 字段进行了修改,
BoostingStrategy
的 case class 的apply
和copy
方法已更改。对于使用BoostingStrategy
设置 GBT 参数的用户来说,这可能是一个问题。
- (破坏性更改)
- (破坏性更改)
LDA.run
的返回值已更改。它现在返回抽象类LDAModel
,而不是具体类DistributedLDAModel
。LDAModel
类型的对象仍然可以转换为适当的具体类型,这取决于优化算法。
在 spark.ml
包中,发生了一些主要的 API 更改,包括
Param
和其他用于指定参数的 API- Pipeline 组件的
uid
唯一 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 已被 DataFrame 替换,并略有修改的 API。
spark.ml
中所有以前使用 SchemaRDD 的算法现在都使用 DataFrame。 - 在 Spark 1.2 中,我们通过调用
import sqlContext._
将LabeledPoint
的RDD
隐式转换为SchemaRDD
,其中sqlContext
是SQLContext
的一个实例。这些隐式转换已被移动,因此我们现在调用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
中,它在 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
中,它在 MLlib 1.1 中继续是一个实验性 API
-
(重大变更) 为了与 scikit-learn 和 rpart 中的树的实现方式保持一致,树的深度含义已更改了 1。在 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 中,我们以统一的方式支持密集和稀疏输入,这引入了一些重大变更。如果您的数据是稀疏的,请将其存储为稀疏格式而不是密集格式,以便在存储和计算中利用稀疏性。详细信息如下所述。