Я новичок в PySpark.Я установил Spark 2.3.0 на Windows 10.Я хочу использовать Linear SVM классификатор для обучения с перекрестной проверкой, но для набора данных, который имеет 3 класса.Поэтому я пытаюсь применить стратегию One vs Rest от Spark ML.Но похоже, что в моем коде что-то не так, потому что я получил ошибку, показывающую, что LinearSVC предназначен для двоичной классификации.
Вот ошибка, которая возникает, когда я пытаюсь выполнить строку "crossval.fit" во время отладки:
pyspark.sql.utils.IllegalArgumentException: u'requirement failed: LinearSVC only supports binary classification. 1 classes detected in LinearSVC_43a48b0b70d59a8cbdb1__labelCol'
Вот мой код: (я пытаюсь использовать очень маленький набор данных из 10 экземпляров)
from pyspark import SparkContext
sc = SparkContext('local', 'my app')
from pyspark.ml.linalg import Vectors
from pyspark import SQLContext
sqlContext = SQLContext(sc)
import numpy as np
x_train=np.array([[1,2,3],[5,6,7],[9,10,11],[2,4,5],[2,7,9],[3,7,6],[8,3,6],[5,8,2],[44,11,55],[77,33,22]])
y_train=[1,0,2,1,0,2,1,0,2,1]
#converting numpy array to dataframe
df_list = []
i = 0
for element in x_train: # row
tup = (y_train[i], Vectors.dense(element))
i = i + 1
df_list.append(tup)
Train_sparkframe = sqlContext.createDataFrame(df_list, schema=['label', 'features'])
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml.classification import OneVsRest
from pyspark.ml.classification import LinearSVC
LSVC = LinearSVC()
ovr = OneVsRest(classifier=LSVC)
paramGrid = ParamGridBuilder().addGrid(LSVC.maxIter, [10, 100]).addGrid(LSVC.regParam,
[0.001, 0.01, 1.0,10.0]).build()
crossval = CrossValidator(estimator=ovr,
estimatorParamMaps=paramGrid,
evaluator=MulticlassClassificationEvaluator(metricName="f1"),
numFolds=2)
cvModel = crossval.fit(Train_sparkframe)
bestModel = cvModel.bestModel