PySpark MLlib:AssertionError:分类器未从 HasRawPredictionCol 扩展

Posted

技术标签:

【中文标题】PySpark MLlib:AssertionError:分类器未从 HasRawPredictionCol 扩展【英文标题】:PySpark MLlib: AssertionError: Classifier doesn't extend from HasRawPredictionCol 【发布时间】:2018-04-29 22:27:02 【问题描述】:

我是 Spark 的新手。我想在 PySpark MLlib 中对 SVM 使用多类分类。我在 Windows 上安装了 Spark 2.3.0。

但是我搜索发现SVM只在Spark中实现了二进制分类,所以我们必须使用one-vs-all策略。当我尝试将 one-vs-all 与 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】:

您收到错误是因为您尝试将 Spark ML (OneVsRest) 中的模型与 Spark MLlib (SVMWithSGD) 中的基本二进制分类器一起使用。

Spark MLlib(旧的、基于 RDD 的 API)和 Spark ML(新的、基于数据帧的 API)不仅是不同的库,而且它们也不兼容:你不能混用它们之间的模型(仔细查看示例,您会发现它们从 pyspark.ml 导入基本分类器,而不是从 pyspark.mllib 导入,就像您在此处尝试做的那样)。

不幸的是,在撰写本文时 (Spark 2.3),Spark ML 不包括 SVM,您目前不能将该算法用作具有OneVsRest 的基本分类器...

【讨论】:

以上是关于PySpark MLlib:AssertionError:分类器未从 HasRawPredictionCol 扩展的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 和 MLLib:随机森林预测的类概率

PySpark 和 MLLib:随机森林特征的重要性

PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解+代码详解

pyspark_mllib_classifier—(SVM)

PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解+代码详解

在 PySpark mllib 中使用随机森林的非法参数异常