Scala与Python中的Apache SPARK SVM
最近我一直在尝试利用Spark进行二元分类。我使用Python编写代码,为了使用Spark SVM,我使用以下软件包:Scala与Python中的Apache SPARK SVM,python,scala,apache-spark,svm,Python,Scala,Apache Spark,Svm,最近我一直在尝试利用Spark进行二元分类。我使用Python编写代码,为了使用Spark SVM,我使用以下软件包: from pyspark.mllib.classification import SVMWithSGD 通过查看,我意识到Scala版本的SVM.predict返回一个分数,而python版本的SVM.predict返回一个标签。因为我想使用以下公式计算AUROC: from pyspark.mllib.evaluation import BinaryClassificati
from pyspark.mllib.classification import SVMWithSGD
通过查看,我意识到Scala版本的SVM.predict返回一个分数,而python版本的SVM.predict返回一个标签。因为我想使用以下公式计算AUROC:
from pyspark.mllib.evaluation import BinaryClassificationMetrics
我需要的是分数,而不是测试样本的标签。阅读spark官方文档时,我发现不幸的是,前面提到的python版本只返回标签。如果我错了,请纠正我,或帮助我解决此问题(如果您知道任何其他软件包或其他内容)
感谢@eliasah指出的,您可以扩展
SVMModel
,添加一个函数,返回您需要的内容:
def predictRaw(self, x):
"""
Predict values for a single data point or an RDD of points
using the model trained.
"""
if isinstance(x, RDD):
return x.map(lambda v: self.predict(v))
x = _convert_to_vector(x)
margin = self.weights.dot(x) + self.intercept
return margin
我去实现了参数清除,这样你就可以像Scala API那样完成它,看起来它已经可以为你工作了,只需在模型上调用
clearThreshold
,predict将切换到与Scala API一样返回边距。正如@eliasah所指出的,您可以扩展SVMModel
来添加一个函数,该函数将返回您想要的:
def predictRaw(self, x):
"""
Predict values for a single data point or an RDD of points
using the model trained.
"""
if isinstance(x, RDD):
return x.map(lambda v: self.predict(v))
x = _convert_to_vector(x)
margin = self.weights.dot(x) + self.intercept
return margin
我去实现了参数清除,这样你就可以像Scala API那样完成它,看起来它已经可以为你工作了,只需在模型上调用
clearThreshold
,predict将切换到与Scala API一样返回边距。正如@eliasah所指出的,您可以扩展SVMModel
来添加一个函数,该函数将返回您想要的:
def predictRaw(self, x):
"""
Predict values for a single data point or an RDD of points
using the model trained.
"""
if isinstance(x, RDD):
return x.map(lambda v: self.predict(v))
x = _convert_to_vector(x)
margin = self.weights.dot(x) + self.intercept
return margin
我去实现了参数清除,这样你就可以像Scala API那样完成它,看起来它已经可以为你工作了,只需在模型上调用
clearThreshold
,predict将切换到与Scala API一样返回边距。正如@eliasah所指出的,您可以扩展SVMModel
来添加一个函数,该函数将返回您想要的:
def predictRaw(self, x):
"""
Predict values for a single data point or an RDD of points
using the model trained.
"""
if isinstance(x, RDD):
return x.map(lambda v: self.predict(v))
x = _convert_to_vector(x)
margin = self.weights.dot(x) + self.intercept
return margin
我去实现参数清除,这样你就可以像Scala API那样做了,它似乎已经可以为你工作了,只需在模型上调用
clearThreshold
,预测将切换到返回与Scala API相同的保证金。没错,但问题是什么?@eliasah python中有没有返回分数而不是标签的方法?没有。你得自己调整一下。您还可以编写自己的评估类。这就是我所做的,因为即使在Scala中,它们仍然不都可用。现在不应该这样,但最终会这样。在标准化API方面有很多工作要做。尽管如此,Python并没有在JVM中运行,而且它使用的numpy与Scala或Java中的结构定义不同。因此,API之间存在不一致性。但是apachespark团队正在研究它。该项目非常复杂和庞大,需要维护所有的库,还需要管道中的钨项目。所以你只需要耐心,同时调整你自己的解决方案。我就是这么做的,有道理。无论如何,谢谢你的帮助。没错,但问题是什么?@eliasah python spark svm中有没有返回分数而不是标签的方法?没有。你得自己调整一下。您还可以编写自己的评估类。这就是我所做的,因为即使在Scala中,它们仍然不都可用。现在不应该这样,但最终会这样。在标准化API方面有很多工作要做。尽管如此,Python并没有在JVM中运行,而且它使用的numpy与Scala或Java中的结构定义不同。因此,API之间存在不一致性。但是apachespark团队正在研究它。该项目非常复杂和庞大,需要维护所有的库,还需要管道中的钨项目。所以你只需要耐心,同时调整你自己的解决方案。我就是这么做的,有道理。无论如何,谢谢你的帮助。没错,但问题是什么?@eliasah python spark svm中有没有返回分数而不是标签的方法?没有。你得自己调整一下。您还可以编写自己的评估类。这就是我所做的,因为即使在Scala中,它们仍然不都可用。现在不应该这样,但最终会这样。在标准化API方面有很多工作要做。尽管如此,Python并没有在JVM中运行,而且它使用的numpy与Scala或Java中的结构定义不同。因此,API之间存在不一致性。但是apachespark团队正在研究它。该项目非常复杂和庞大,需要维护所有的库,还需要管道中的钨项目。所以你只需要耐心,同时调整你自己的解决方案。我就是这么做的,有道理。无论如何,谢谢你的帮助。没错,但问题是什么?@eliasah python spark svm中有没有返回分数而不是标签的方法?没有。你得自己调整一下。您还可以编写自己的评估类。这就是我所做的,因为即使在Scala中,它们仍然不都可用。现在不应该这样,但最终会这样。在标准化API方面有很多工作要做。尽管如此,Python并没有在JVM中运行,而且它使用的numpy与Scala或Java中的结构定义不同。因此,API之间存在不一致性。但是apachespark团队正在研究它。该项目非常复杂和庞大,需要维护所有的库,还需要管道中的钨项目。所以你只需要耐心,同时调整你自己的解决方案。我就是这么做的,有道理。无论如何,谢谢你的帮助。谢谢你对霍尔顿的有用评论。我也会给这一个镜头,让你知道结果。谢谢你有用的评论霍尔顿。我也会试一试,让你知道结果