如何在Spark for SVM和DT上使用交叉验证来拆分数据

时间:2019-01-01 06:01:22

标签: apache-spark svm cross-validation

我将Spark MLlib用于我的项目。我使用了SVM,决策树和随机森林。我将数据集分为“训练和测试”(60%的训练,40%的测试),并得到了结果。

我想重复我的工作,但是使用交叉验证来分割数据,而不是对SVM,DT和RF进行百分比分割。

如何在Spark上执行此操作? 我发现了一些用于使用逻辑回归进行拆分的代码,并且Pipeline无法用于SVM。

我需要将数据分割为10倍,然后暂时应用SVM。

我也想为每一折打印准确度。

1 个答案:

答案 0 :(得分:0)

您必须使用 ML API 而不是 MLLib,在第一个中,SVM 模型称为 LinearSVC,您可以通过以下方式使用它:

from pyspark.ml.classification import LinearSVC
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml.tuning import ParamGridBuilder, CrossValidator

dataset = spark.createDataFrame(
    [(Vectors.dense([0.0]), 0.0),
     (Vectors.dense([0.6]), 1.0),
     (Vectors.dense([1.0]), 1.0)] * 10,
    ["features", "label"])

cv = CrossValidator(
    estimator=LinearSVC(),
    estimatorParamMaps=ParamGridBuilder().build(),
    evaluator=MulticlassClassificationEvaluator(metricName='accuracy'),
    numFolds=10
)

best_model = cv.fit(dataset)
print(f'Best accuracy -> {best_model.avgMetrics[0]}')

现在,如果您想获得所有折叠的指标,您需要编写自定义 CrossValidator。 This blog 可以帮到你!