Spark 中的机器学习

数据挖掘 大数据 阿帕奇火花 pyspark
2021-10-08 02:00:37

我正在使用 Apache Spark 执行情感分析。我正在使用朴素贝叶斯算法对文本进行分类。我不知道如何找出标签的概率。如果我知道在 python 中获取一些片段来查找标签的概率,我将不胜感激。

1个回答

一旦您训练了模型并转换为测试数据集,就可以找到测试数据集的概率,例如:如果您训练的朴素贝叶斯模型是模型 ,则 model.transform(test)包含概率节点,有关更多详细信息,请查看以下代码,将向您展示概率节点和其他有用的节点也适用于iris数据集。

将数据集随机划分为训练集和测试集。为可重复性设置种子

(trainingData, testData) = irisdf.randomSplit([0.7, 0.3], seed = 100)

trainingData.cache()
testData.cache()

print trainingData.count()
print testData.count()

输出:

103
47

接下来,我们将使用 VectorAssembler() 将我们的特征列合并为一个向量列,我们将把它传递给我们的朴素贝叶斯模型。同样,我们暂时不会转换数据集,因为我们会将 VectorAssembler 传递到我们的 ML 管道中。

from pyspark.ml.feature import VectorAssembler
vecAssembler = VectorAssembler(inputCols=["SepalLength", "SepalWidth", "PetalLength", "PetalWidth"], outputCol="features")

对于iris 数据集,它有setosaversicolorvirginica三个类因此,让我们使用 pysaprk 库创建一个多类朴素贝叶斯分类ml器。

from pyspark.ml.classification import NaiveBayes
from pyspark.ml import Pipeline

# Train a NaiveBayes model
nb = NaiveBayes(smoothing=1.0, modelType="multinomial")

# Chain labelIndexer, vecAssembler and NBmodel in a pipeline
pipeline = Pipeline(stages=[labelIndexer, vecAssembler, nb])

# Run stages in pipeline and train model
model = pipeline.fit(trainingData)

分析创建的模式模型,我们可以从中进行预测。

predictions = model.transform(testData)
# Display what results we can view
predictions.printSchema()

输出

root
 |-- SepalLength: double (nullable = true)
 |-- SepalWidth: double (nullable = true)
 |-- PetalLength: double (nullable = true)
 |-- PetalWidth: double (nullable = true)
 |-- Species: string (nullable = true)
 |-- label: double (nullable = true)
 |-- features: vector (nullable = true)
 |-- rawPrediction: vector (nullable = true)
 |-- probability: vector (nullable = true)
 |-- prediction: double (nullable = true)

您还可以选择特定节点以查看某些数据集,如下所示:

# DISPLAY Selected nodes only
display(predictions.select("label", "prediction", "probability"))

以上将以表格形式显示。

参考:

  1. 火花
  2. 使用管道的模型
  3. https://mike.seddon.ca/natural-language-processing-with-apache-spark-ml-and-amazon-reviews-part-1/
  4. https://stackoverflow.com/questions/31028806/how-to-create-correct-data-frame-for-classification-in-spark-ml