对Pyspark中随机森林的评估不正确



我正在使用Logistic回归和随机森林对电信客户流失数据集进行预测。

请在这里找到我笔记本上的代码片段:

data=spark.read.csv("D:ShashankCBAPysparkTelecom_Churn_Data_SingTel.csv", header=True, inferSchema=True)
data.show(3)

这个链接是为了显示我在高级上处理的数据类型

data=data.drop("State").drop("Area Code").drop("Phone Number")
from pyspark.ml.feature import StringIndexer, VectorAssembler
intlPlanIndex = StringIndexer(inputCol="International Plan", outputCol="International Plan Index")
voiceMailPlanIndex = StringIndexer(inputCol="Voice mail Plan", outputCol="Voice mail Plan Index")
churnIndex = StringIndexer(inputCol="Churn", outputCol="label")
othercols=["Account Length", "Num of Voice mail Messages","Total Day Minutes", "Total Day Calls", "Total day Charge","Total Eve Minutes","Total Eve Calls","Total Eve Charge","Total Night Minutes","Total Night Calls ","Total Night Charge","Total International Minutes","Total Intl  Calls","Total Intl Charge","Number Customer Service calls "]
assembler = VectorAssembler(inputCols= ['International Plan Index'] + ['Voice mail Plan Index'] + othercols, outputCol="features")
(train, test) = data.randomSplit([0.8,0.2])
from pyspark.ml.classification import LogisticRegression
lrObj = LogisticRegression(labelCol='label', featuresCol='features')
from pyspark.ml.pipeline import Pipeline
pipeline = Pipeline(stages=[intlPlanIndex, voiceMailPlanIndex, churnIndex, assembler, lrObj])
lrModel = pipeline.fit(train)
prediction_train = lrModel.transform(train)
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
lr_Evaluator = MulticlassClassificationEvaluator()
lr_Evaluator.evaluate(prediction_train)

此图显示了使用逻辑回归进行评估的结果

然后,我使用随机森林分类模型重复同样的操作:我的评估结果是94.4%我的结果有点像这样:链接到我的随机森林评估结果

到目前为止一切都很好。但我很好奇事情实际上是如何预测的,所以我用下面的代码打印我的预测值:

selected = prediction_1.select("features", "Label", "Churn", "prediction")
for row in selected.collect():
print(row)

在下面的屏幕截图中,我得到的结果是这样的:链接到显示打印出来用于手动分析的2个结果的图像

然后,我将上面链接中显示的两个单元格复制到一个压缩器中,看看我的预测值是否不同。(我预计会有一些差异,因为随机森林的评估结果更好)

但对任何工具的比较都表明,预测是相同的。然而,评估结果显示,使用LogisticRegression的差异为83.6%,使用RandomForest的差异为94.4%。

当使用MuticlassClassificationEvaluator的最终评估给我不同的概率时,为什么我从两个不同的模型生成的两组数据没有差异?

您似乎对metricName="accuracy"感兴趣

predictions = model.transform(test)
evaluator = MulticlassClassificationEvaluator(labelCol="indexedLabel", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)

有关更多信息,请参阅官方文档。

这个问题不再相关,因为我能够看到预测中的差异,这与每个模型下预测的准确性一致。这个问题的出现是因为我从Jupyter笔记本上复制的数据不完整。

感谢并感谢您抽出时间。

相关内容

  • 没有找到相关文章

最新更新