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



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

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

如何在 Spark 上执行此操作?我发现了几个使用逻辑回归和管道进行拆分的代码,这些代码不适用于 SVM。

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

我也想打印每个折叠的准确性。

您必须使用 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]}')

现在,如果你想获取所有折叠的指标,你需要编写你的自定义交叉验证器。这个博客可能会帮助你!

最新更新