我在项目中使用 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]}')
现在,如果你想获取所有折叠的指标,你需要编写你的自定义交叉验证器。这个博客可能会帮助你!