线性支持向量机使用PySpark API进行多类分类

时间:2016-09-22 05:53:22

标签: python apache-spark pyspark svm apache-spark-mllib

支持向量机目前还不支持Spark中的多类分类,但将来会像Spark page中描述的那样。

是否有任何发布日期或任何机会使用支持向量机实现多类的PySpark API运行它?感谢您的任何见解。

1 个答案:

答案 0 :(得分:3)

在实践中,您可以使用任意二元分类器和一对一休息策略执行多类分类。 mllib没有提供一个(ml中有一个),但您可以轻松构建自己的版本。假设数据看起来像这样

import numpy as np
np.random.seed(323)

classes = [0, 1, 2, 3, 4, 5]

def make_point(classes):
    label = np.random.choice(classes)
    features = np.random.random(len(classes))
    features[label] += 10
    return LabeledPoint(label, features)

data  = sc.parallelize([make_point(classes) for _ in range(1000)])

xs = data.take(5)

我们可以为每个班级培训单独的模型:

def model_for_class(c, rdd):
    def adjust_label(lp):
        return LabeledPoint(1 if lp.label == c else 0, lp.features)

    model = SVMWithSGD.train(rdd.map(adjust_label))
    model.clearThreshold()
    return model

models = [model_for_class(c, data) for c in classes]

并将其用于预测:

[(x.label, np.argmax([model.predict(x.features) for model in models]))
for x in xs]
## [(0.0, 0), (1.0, 1), (0.0, 0), (5.0, 5), (2.0, 2)]

在旁注中,您不能指望pyspark.mllib中的任何进一步发展,因为它已被弃用而不是ml