第5章 模型选择和优化


本章数据集下载

第5章 模型选择和优化

本章主要介绍如何使用Spark ML提供的方法及自定义函数等方法来对模型进行调优。我们可以通过Spark ML内建的交叉验证、训练验证拆方法、网格参数等方法进行模型调优,当然也可以自定义函数进行模型优化。
本章主要内容包括:
 模型选择
 交叉验证
 训练验证拆分法
 自定义函数调优

5.1 模型选择

调优可以是对单个的Estimator,比如LogisticRegression,或者对包含多个算法、特征化和其他步骤的整个Pipline。用户可以一次性对整个Pipline进行调优,而不必对Pipline中的每一个元素进行单独的调优。
MLlib支持使用像交叉验证(CrossValidator)和训练验证拆分法(TrainValidationSplit)这样的工具进行模型选择(Model selection)。这些工具需要以下的组件:
 Estimator:用户调优的算法或Pipline
 ParamMap集合:提供参数选择,有时也叫作用户查找的“参数网格”
 Evaluator:衡量模型在测试数据上的拟合程度
在上层,这些模型选择工具的工作方式如下:
 将输入数据切分成训练数据集和测试数据集
 对于每一个(训练数据,测试数据)对,通过ParamMap集合进行迭代:对于每个ParamMap,使用它提供的参数对Estimator进行拟合,给出拟合模型,然后使用Evaluator来评估模型的性能。
 选择表现最好的参数集合生成的模型。

5.2交叉验证

下例使CrossValidator从整个网格的参数中选择合适的参数,而从自动选择最优模型。
在整个参数网格中进行交叉验证是比较耗时的。例如,在下面的例子中,参数网格有3个hashingTF.numFeatures值和2个lr.regParam值,CrossValidator使用2折切分数据。最终将有(3 * 2) * 2 = 12个不同的模型将被训练。在真实场景中,很可能使用更多的参数和进行更多折切分(k=3和k=10都很常见)。使用CrossValidator的代价可能会异常的高,当大数据集比较大时,需要慎重选择。不过采用交叉验证法,对比手动调优,还是有较大优势。
下面通过示例说明如何使用CrossValidator从整个网格的参数中选择合适的参数。
导入必要的包:

配置一个流水线,该流水线包含3个stages: tokenizer, hashingTF, and lr。

使用ParamGridBuilder构造一个parameter grid

流水线,嵌入到CrossValidator实例中,这样流水线的任务都可使用网格参数。
CrossValidator一般需要一个Estimator, 参数集及一个评估器Evaluator。
BinaryClassificationEvaluator缺省的评估指标为AUC(areaUnderROC)。

通过交叉验证模型, 并获取最优参数集,并测试模型

查看最佳模型中各参数值

5.3训练验证拆分法

像CrossValidator一样,TrainValidationSplit最终适合使用最好的ParamMap
和整个数据集的Estimator。

5.4自定义模型选择

the best model was trained with rank = 20 and lambda = 0.1, and numIter = 10, and its RMSE on the test set is 1.0059139723438042.

5.5小结

本章主要介绍了几种模型选择或调优的方法,我们可以从训练的数据集入手,可以从模型参数入手,当然也可把两者结合起来。实际上模型的优化还有很多其他方法,如使用不同的算法、集成算法等等。下一章我们将介绍Spark MLlib一些基础知识,包括Spark MLlib架构、原理、算法及算法依赖的一些库、向量和矩阵等相关内容。

《第5章 模型选择和优化》有1个想法

发表评论