【发布时间】:2016-06-23 20:24:20
【问题描述】:
我使用 Spark MLLib 对 LabeledPoints 的 RDD 进行 SVM 分类。 我想交叉验证它。最好的方法是什么? 有人有示例代码吗?我找到了依赖于 DataFrame 的 CrossValidator 类。
我的目标是获得 F 分数。
【问题讨论】:
标签: apache-spark svm cross-validation apache-spark-mllib
我使用 Spark MLLib 对 LabeledPoints 的 RDD 进行 SVM 分类。 我想交叉验证它。最好的方法是什么? 有人有示例代码吗?我找到了依赖于 DataFrame 的 CrossValidator 类。
我的目标是获得 F 分数。
【问题讨论】:
标签: apache-spark svm cross-validation apache-spark-mllib
我已经面临同样的问题一个多月了,直到我意识到我必须使用 ML API 而不是 MLlib API(更多关于它们之间的差异here)。在这种情况下,新 API 的 SVM 是 LinearSVC:
from pyspark.ml.classification import RandomForestClassifier, LinearSVC
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder, CrossValidatorModel
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
# SVM
crossval = CrossValidator(estimator=LinearSVC(),
estimatorParamMaps=ParamGridBuilder().build(),
evaluator=MulticlassClassificationEvaluator(metricName='f1'),
numFolds=5,
parallelism=4)
# Random Forest
crossval = CrossValidator(estimator=RandomForestClassifier(),
estimatorParamMaps=ParamGridBuilder().build(),
evaluator=MulticlassClassificationEvaluator(metricName='f1'),
numFolds=5,
parallelism=4)
在这两种情况下,您都可以只拟合模型:
cross_model: CrossValidatorModel = crossval.fit
【讨论】:
你可以找到一个完整的例子on Spark's github,虽然不是支持向量机,而是逻辑回归。
最好的方法是使用rdd.toDF() 方法将您的RDD 更改为DataFrame。
【讨论】: