【问题标题】:Linear Support Vector Machines multiclass classification with PySpark API使用 PySpark API 的线性支持向量机多类分类
【发布时间】:2017-01-30 13:39:29
【问题描述】:

支持向量机目前尚不支持 Spark 中的多类分类,但将来会如 Spark page 中所述。

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

【问题讨论】:

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


    【解决方案1】:

    在实践中,您可以使用任意二元分类器和 one-vs-rest 策略执行多类分类。 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

    【讨论】:

      猜你喜欢
      • 2013-08-31
      • 2011-07-01
      • 2015-06-03
      • 2010-12-29
      • 2014-04-08
      • 1970-01-01
      • 2015-02-16
      • 2018-10-12
      • 2017-08-18
      相关资源
      最近更新 更多