如何在 Spark MLLib 中为支持向量机配置内核选择和损失函数

How to configure kernel selection and loss function for Support Vector Machines in Spark MLLib

我已经在 AWS Elastic Map Reduce(EMR) 上安装了 spark,并且 运行 SVM 使用了 MLLib 中的包。但是没有选择参数来构建模型的选项,例如内核选择和错误分类的成本(就像在 R 的 e1071 包中一样)。有人可以告诉我如何在构建模型时设置这些参数吗?

总结/长话短说:

SVMWithSGD 的硬编码方法是:

private val gradient = new HingeGradient()
private val updater new SquaredL2Updater()

由于这些是硬编码的 - 您不能按照在 R 中习惯的方式配置它们。

详情:

在 "bare metal" 级别,mllib SVMWithSGD 支持以下参数:

  • 为每个特征计算的权重。
  • 为此模型计算的截距。
  • positive/negative 预测之间的阈值(默认为 0.0)

还有其他方便的方法可以让您定义:

  • 正则化类型(L1 vs L2)
  • 正则化参数 (lambda)
  • 每个训练批次使用多少输入数据
  • 初始步长(用于梯度下降)

您会注意到您提到的两项:

  • 内核选择
  • 错误成本class化

不包含在那些可配置参数中

在幕后,这些是通过调用 GradientDescent class 定义的,如下所示:

* @param gradient Gradient function to be used.
* @param updater Updater to be used to update weights after every iteration.
GradientDescent(gradient: Gradient, private var updater: Updater)

使用以下设置

MLLib 的 SVM 实现仅限于线性内核,因此您不会找到任何与内核相关的内容。但是,有一些与此相关的工作,例如 Pegasos.