PySpark MLlib: AssertionError: Классификатор не расширяется от HasRawPredictionCol - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в Искре. Я хочу использовать мультиклассовую классификацию для SVM в PySpark MLlib. Я установил Spark 2.3.0 на Windows.

Но я искал и обнаружил, что SVM реализован для двоичной классификации только в Spark, поэтому мы должны использовать стратегию «один против всех». Это дало мне ошибку, когда я попытался использовать один-все-все с SVM. Я искал ошибку, но не нашел ее решения.

Я использовал код one-vs-all по этой ссылке https://spark.apache.org/docs/2.1.0/ml-classification-regression.html#one-vs-rest-classifier-aka-one-vs-all

вот мой код:

        from pyspark.mllib.classification import SVMWithSGD , SVMModel
        from pyspark.ml.classification import OneVsRest
        # instantiate the One Vs Rest Classifier.
        svm_model = SVMWithSGD()
        ovr = OneVsRest(classifier=svm_model)
        # train the multiclass model.
        ovrModel = ovr.fit(rdd_train)
        # score the model on test data.
        predictions = ovrModel.transform(rdd_test)

Ошибка в строке "ovr.fit (rdd_train)". Вот ошибка

  File "D:/Mycode-newtrials - Copy/stance_detection -norelieff-lgbm - randomizedsearch - modified - spark.py", line 1460, in computescores
ovrModel = ovr.fit(rdd_train)
  File "D:\python27\lib\site-packages\pyspark\ml\base.py", line 132, in fit
return self._fit(dataset)
  File "D:\python27\lib\site-packages\pyspark\ml\classification.py", line 1758, in _fit
"Classifier %s doesn't extend from HasRawPredictionCol." % type(classifier)
 AssertionError: Classifier <class 'pyspark.mllib.classification.SVMWithSGD'> doesn't extend from HasRawPredictionCol.

1 Ответ

0 голосов
/ 30 апреля 2018

Вы получаете ошибку, потому что пытаетесь использовать модель из Spark ML (OneVsRest) с базовым двоичным классификатором из Spark MLlib (SVMWithSGD).

Spark MLlib (старый API на основе RDD) и Spark ML (новый API на основе данных) представляют собой не только разные библиотеки, но и несовместимо : вы не можете смешивать модели между ними (посмотрев на примеры, вы увидите, что они импортируют базовый классификатор из pyspark.ml, а не из pyspark.mllib, как вы пытаетесь это сделать здесь).

К сожалению, поскольку на момент написания (Spark 2.3) Spark ML не включал SVM, в настоящее время вы не можете использовать алгоритм в качестве базового классификатора с OneVsRest ...

...