2016-09-22 3 views
0

Поддержка векторных машин в настоящее время еще не поддерживает классификацию нескольких классов внутри Spark, но в будущем, как описано на Spark page.Линейная поддержка Vector Machines многоклассовая классификация с API PySpark

Есть ли дата выпуска или какой-либо шанс запустить ее с помощью API PySpark, который реализует многоуровневый интерфейс с поддержкой векторных машин? Спасибо за любые идеи.

ответ

2

На практике вы можете выполнять классификацию многоклассов, используя произвольный бинарный классификатор и стратегию с одним взлетом. 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.

Смежные вопросы