使用训练、测试和验证集的Spark交叉验证

3
我想使用RandomSplits在Spark中进行两个交叉验证过程,分别是:
1. CV_global:将数据拆分为训练集90%和测试集10%。
1.1. CV_grid:在训练集的一半(即45%的数据)上进行网格搜索。
1.2. Fit Model:使用CV_grid中最佳设置在训练集(90%)上进行拟合模型。
1.3 Test Model:在测试集(10%)上测试模型。
2. 每10折报告平均指标和全局指标。
问题是我只找到了在整个训练集上使用CV和Grid search的示例。
如何从CV_grid中获取最佳表现模型的参数?
如何进行CV而不进行网格搜索,但获得每个fold的统计数据?例如sklearn.cross_validation.cross_val_score

实际上,apache-spark不支持这个功能,你必须自己使用DataFramesRDDs来完成。这并不难(我已经做过了)。 - Alberto Bonsanto
好的,我正在使用一个端到端的ML管道,所以我希望不需要为此打破代码。主要问题是如何从ParamGridBuilder中获取最佳模型的参数。我对Spark不是很熟悉。 - harvybcn
2个回答

0

您把三个问题合并成了一个。以下是每个问题的答案:

1. 问题在于我只找到了使用CV和Grid搜索整个训练集的示例。

如果您只需要训练数据集的一部分,则可以按所需百分比进行采样,例如

training = training.sample(false, .45, 78L)

2. 我如何从CV_grid中获取最佳表现模型的参数?

crossValidatedModel.bestModel().getParamMap() 

从那里获取参数名称,然后获取值。

3. 如何在没有网格搜索的情况下进行CV,但每个折叠都获得统计数据?例如:

如何访问CrossValidatorModel中每个折叠的计算指标的副本

在这里看看:Spark CrossValidatorModel访问除bestModel之外的其他模型?


0

你有像这样的东西

crossval.setEstimatorParamMaps(paramGrid)

然后

cvModel = crossval.fit(trainingSetDF).bestModel 

对于单个模型(至少对于某些模型),有像explainParams()这样的函数。它在Spark 1.6中可用(也许可以追溯到1.4.2,我不确定)。 希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接