我将Spark MLlib用于我的项目。我使用了SVM,决策树和随机森林。我将数据集分为“训练和测试”(60%的训练,40%的测试),并得到了结果。
我想重复我的工作,但是使用交叉验证来分割数据,而不是对SVM,DT和RF进行百分比分割。
如何在Spark上执行此操作? 我发现了一些用于使用逻辑回归进行拆分的代码,并且Pipeline无法用于SVM。
我需要将数据分割为10倍,然后暂时应用SVM。
我也想为每一折打印准确度。
答案 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 可以帮到你!