迁移指南: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
重大变更
-
OneHotEncoder在 2.3 中已被弃用,3.0 中被移除,OneHotEncoderEstimator现在重命名为OneHotEncoder。 -
org.apache.spark.ml.image.ImageSchema.readImages在 2.3 中已被弃用,3.0 中被移除,请改用spark.read.format('image')。 -
org.apache.spark.mllib.clustering.KMeans.train的参数 Intruns在 2.1 中已被弃用,3.0 中被移除。请改用没有runs参数的train方法。 -
org.apache.spark.mllib.classification.LogisticRegressionWithSGD在 2.0 中已被弃用,3.0 中被移除,请改用org.apache.spark.ml.classification.LogisticRegression或spark.mllib.classification.LogisticRegressionWithLBFGS。 -
org.apache.spark.mllib.feature.ChiSqSelectorModel.isSorted在 2.1 中已被弃用,3.0 中被移除,此方法不打算供子类使用。 -
org.apache.spark.mllib.regression.RidgeRegressionWithSGD在 2.0 中已被弃用,3.0 中被移除,请改用org.apache.spark.ml.regression.LinearRegression,并将elasticNetParam设置为 0.0。请注意,RidgeRegressionWithSGD的默认regParam为 0.01,而LinearRegression的默认值为 0.0。 -
org.apache.spark.mllib.regression.LassoWithSGD在 2.0 中已被弃用,3.0 中被移除,请改用org.apache.spark.ml.regression.LinearRegression,并将elasticNetParam设置为 1.0。请注意,LassoWithSGD的默认regParam为 0.01,而LinearRegression的默认值为 0.0。 -
org.apache.spark.mllib.regression.LinearRegressionWithSGD在 2.0 中已被弃用,3.0 中被移除,请改用org.apache.spark.ml.regression.LinearRegression或LBFGS。 -
org.apache.spark.mllib.clustering.KMeans.getRuns和setRuns在 2.1 中已被弃用,3.0 中被移除,自 Spark 2.0.0 起无效。 -
org.apache.spark.ml.LinearSVCModel.setWeightCol在 2.4 中已被弃用,3.0 中被移除,不打算供用户使用。 -
从 3.0 开始,
org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel扩展了MultilayerPerceptronParams以公开训练参数。因此,MultilayerPerceptronClassificationModel中的layers从Array[Int]改为IntArrayParam。用户应该使用MultilayerPerceptronClassificationModel.getLayers而不是MultilayerPerceptronClassificationModel.layers来获取层的大小。 -
org.apache.spark.ml.classification.GBTClassifier.numTrees在 2.4.5 中已被弃用,3.0 中被移除,请改用getNumTrees。 -
org.apache.spark.ml.clustering.KMeansModel.computeCost在 2.4 中已被弃用,3.0 中被移除,请改用ClusteringEvaluator。 -
在
org.apache.spark.mllib.evaluation.MulticlassMetrics中,precision成员变量在 2.0 中已被弃用,3.0 中被移除。请改用accuracy。 -
在
org.apache.spark.mllib.evaluation.MulticlassMetrics中,recall成员变量在 2.0 中已被弃用,3.0 中被移除。请改用accuracy。 -
在
org.apache.spark.mllib.evaluation.MulticlassMetrics中,fMeasure成员变量在 2.0 中已被弃用,3.0 中被移除。请改用accuracy。 -
org.apache.spark.ml.util.GeneralMLWriter.context在 2.0 中已被弃用,3.0 中被移除,请改用session。 -
org.apache.spark.ml.util.MLWriter.context在 2.0 中已被弃用,3.0 中被移除,请改用session。 -
org.apache.spark.ml.util.MLReader.context在 2.0 中已被弃用,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
:
labels在StringIndexerModel中已过时,并将在 3.1.0 中移除。请改用labelsArray。 -
SPARK-25758
:
computeCost在BisectingKMeansModel中已过时,并将在未来的版本中移除。请改用ClusteringEvaluator。
行为的变化
-
SPARK-11215
:
在 Spark 2.4 及之前的版本中,当指定
frequencyDesc或frequencyAsc作为stringOrderType参数在StringIndexer中时,如果频率相同,字符串的顺序是未定义的。 从 Spark 3.0 开始,具有相同频率的字符串会进一步按字母排序。并且从 Spark 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 模型时,以前如果发生了重新运行,用户会看到由于输入/输出用户/项目块不匹配导致的 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
:
regParam的默认值从1.0改为0.1,用于ALS.train方法(标记为DeveloperApi)。 注意 这并 不影响ALS估计器或模型,也不影响 MLlib 的ALS类。 -
SPARK-14772
:
修复了 Python 和 Scala API 在
Param.copy方法之间的不一致。 -
SPARK-11569
:
StringIndexer现在以与未见值相同的方式处理NULL值。以前,无论handleInvalid参数的设置如何,总是会抛出异常。
从 MLlib 2.0 升级到 2.1
重大变更
已移除弃用的方法
-
setLabelCol在feature.ChiSqSelectorModel中 -
numTrees在classification.RandomForestClassificationModel中 (这现在指的是参数numTrees) -
numTrees在regression.RandomForestRegressionModel中 (这现在指的是参数numTrees) -
model在regression.LinearRegressionSummary中 -
validateParams在PipelineStage中 -
validateParams在Evaluator中
弃用及行为变化
弃用
-
SPARK-18592
:
弃用除了输入/输出列参数外的所有参数设置方法,适用于
DecisionTreeClassificationModel、GBTClassificationModel、RandomForestClassificationModel、DecisionTreeRegressionModel、GBTRegressionModel和RandomForestRegressionModel
行为的变化
-
SPARK-17870
:
修复了一个
ChiSqSelector的bug,该bug可能会改变其结果。现在ChiSquareSelector使用 pValue 而不是原始统计量来选择固定数量的最佳特征。 -
SPARK-3261
:
KMeans在没有可用的 k 个不同中心或没有被选中的情况下,可能返回少于 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
。
基于DataFrame的API在
spark.ml
中现在依赖于
spark.ml.linalg
类,
这导致了一些重大变更,主要在各种模型类中
(请参见
SPARK-14810
以获取完整列表)。
注意:
基于RDD的API在
spark.mllib
中仍然依赖于之前的包
spark.mllib.linalg
。
转换向量和矩阵
虽然大多数管道组件支持加载的向后兼容,但在 2.0 之前的 Spark 版本中,一些包含向量或矩阵列的现有
DataFrames
和管道可能需要迁移到新的
spark.ml
向量和矩阵类型。将
DataFrame
列从
spark.mllib.linalg
转换为
spark.ml.linalg
类型的工具(反之亦然)可以在
spark.mllib.util.MLUtils
中找到。
还有一些工具方法可以用于转换单个实例的向量和矩阵。使用
asML
方法在
mllib.linalg.Vector
/
mllib.linalg.Matrix
上进行转换为
ml.linalg
类型,并使用
mllib.linalg.Vectors.fromML
/
mllib.linalg.Matrices.fromML
进行转换为
mllib.linalg
类型。
from pyspark.mllib.util import MLUtils
# 转换 DataFrame 列
convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
# 转换单个向量或矩阵
mlVec = mllibVec.asML()
mlMat = mllibMat.asML()
有关详细信息,请参阅
MLUtils
Python 文档
。
import org.apache.spark.mllib.util.MLUtils
// 转换 DataFrame 列
val convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
val convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
// 转换单个向量或矩阵
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;
// 转换 DataFrame 列
Dataset<Row> convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF);
Dataset<Row> convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF);
// 转换单个向量或矩阵
org.apache.spark.ml.linalg.Vector mlVec = mllibVec.asML();
org.apache.spark.ml.linalg.Matrix mlMat = mllibMat.asML();
有关更多详细信息,请参阅
MLUtils
Java 文档
。
已移除弃用的方法
在
spark.mllib
和
spark.ml
包中,删除了一些已弃用的方法:
-
setScoreCol在ml.evaluation.BinaryClassificationEvaluator -
weights在LinearRegression和LogisticRegression在spark.ml -
setMaxNumIterations在mllib.optimization.LBFGS(标记为DeveloperApi) -
treeReduce和treeAggregate在mllib.rdd.RDDFunctions(这些函数可以直接在RDD上使用,标记为DeveloperApi) -
defaultStrategy在mllib.tree.configuration.Strategy -
build在mllib.tree.Node -
libsvm 加载器用于多类以及在
mllib.util.MLUtils中加载/保存 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的一个错误,该错误可能会改变其结果。 -
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
: Java 的可变参数支持被移除
自
Params.setDefault由于一个 Scala 编译器错误 。 -
SPARK-10097
:
Evaluator.isLargerBetter被 添加以指示指标排序。像 RMSE 这样的指标在 1.4 中不再翻转符号。
从 MLlib 1.3 升级到 1.4
在
spark.mllib
包中,有几个重大变化,但都是在
DeveloperApi
或
Experimental
API 中:
-
梯度提升树
-
(重大改动)
Loss.gradient方法的签名已被更改。这仅对编写了自己损失函数的 GBT 用户构成问题。 -
(重大改动)
由于对案例类字段的修改,案例类
BoostingStrategy的apply和copy方法已被更改。这可能会影响使用BoostingStrategy设置 GBT 参数的用户。
-
(重大改动)
-
(重大改动)
LDA.run的返回值已更改。现在它返回一个抽象类LDAModel,而不是具体类DistributedLDAModel。类型为LDAModel的对象仍然可以被强制转换为合适的具体类型,这取决于优化算法。
在
spark.ml
包中,发生了一些主要的API更改,包括:
-
Param和其他用于指定参数的API -
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仍然是一个实验性组件。在其中,有两个变化:- 构造函数参数已被移除,取而代之的是使用默认构造函数加参数设置方法的构建者模式。
-
变量
model不再是公有的。
-
(重大变化)
DecisionTree仍然是一个实验性组件。在它及其相关类中,有若干变化:-
在
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
替代。所有以前使用 SchemaRDD 的
spark.ml中的算法现在使用 DataFrame。 -
在 Spark 1.2 中,我们通过调用
import sqlContext._从LabeledPoint的RDD隐式转换为SchemaRDD,其中sqlContext是SQLContext的一个实例。这些隐式已被移动,因此我们现在调用import sqlContext.implicits._。 - Java 的 SQL 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:
-
(重大变更) 树的深度含义已更改为 1,以匹配 scikit-learn 和 rpart 中的实现。 在 MLlib v1.0 中,深度为 1 的树有 1 个叶子节点,深度为 2 的树有 1 个根节点和 2 个叶子节点。 在 MLlib v1.1 中,深度为 0 的树有 1 个叶子节点,深度为 1 的树有 1 个根节点和 2 个叶子节点。 这个深度由
maxDepth参数指定,在Strategy或通过DecisionTree静态trainClassifier和trainRegressor方法。 -
(非重大变更) 我们建议使用新添加的
trainClassifier和trainRegressor方法来构建DecisionTree, 而不是使用旧的参数类Strategy。这些新的训练方法明确区分了分类和回归,并用 简单的String类型替代了专用参数类型。
新的推荐的
trainClassifier
和
trainRegressor
的示例请参见
决策树指南
。
从 MLlib 0.9 升级到 1.0
在 MLlib v1.0 中,我们以统一的方式支持密集输入和稀疏输入,这引入了一些重大更改。如果您的数据是稀疏的,请以稀疏格式存储它,而不是密集格式,以利用存储和计算中的稀疏性。详细信息如下所述。