逻辑回归

使用 PySpark 进行机器学习

Andrew Collier

Data Scientist, Fathom Data

逻辑曲线

一条逻辑曲线。

使用 PySpark 进行机器学习

逻辑曲线

阈值以上着色的逻辑曲线

使用 PySpark 进行机器学习

逻辑曲线

阈值以下着色的逻辑曲线

使用 PySpark 进行机器学习

逻辑曲线

向右平移的逻辑曲线

使用 PySpark 进行机器学习

逻辑曲线

向左平移的逻辑曲线

使用 PySpark 进行机器学习

逻辑曲线

带有平缓过渡的逻辑曲线

使用 PySpark 进行机器学习

逻辑曲线

带有快速过渡的逻辑曲线

使用 PySpark 进行机器学习

重访汽车数据

建模前准备:

  • 将各预测变量组装为单列(名为 features
  • 将数据划分为训练集和测试集。
+---+----+------+------+----+-----------+----------------------------------+-----+
|cyl|size|mass  |length|rpm |consumption|features                          |label|
+---+----+------+------+----+-----------+----------------------------------+-----+
|6  |3.0 |1451.0|4.775 |5200|9.05       |[6.0,3.0,1451.0,4.775,5200.0,9.05]|1.0  |
|4  |2.2 |1129.0|4.623 |5200|6.53       |[4.0,2.2,1129.0,4.623,5200.0,6.53]|0.0  |
|4  |2.2 |1399.0|4.547 |5600|7.84       |[4.0,2.2,1399.0,4.547,5600.0,7.84]|1.0  |
|4  |1.8 |1147.0|4.343 |6500|7.84       |[4.0,1.8,1147.0,4.343,6500.0,7.84]|0.0  |
|4  |1.6 |1111.0|4.216 |5750|9.05       |[4.0,1.6,1111.0,4.216,5750.0,9.05]|0.0  |
+---+----+------+------+----+-----------+----------------------------------+-----+
使用 PySpark 进行机器学习

构建逻辑回归模型

from pyspark.ml.classification import LogisticRegression

创建一个逻辑回归分类器。

logistic = LogisticRegression()

用训练数据进行学习。

logistic = logistic.fit(cars_train)
使用 PySpark 进行机器学习

预测

prediction = logistic.transform(cars_test)
+-----+----------+---------------------------------------+
|label|prediction|probability                            |
+-----+----------+---------------------------------------+
|0.0  |0.0       |[0.8683802216422138,0.1316197783577862]|
|0.0  |1.0       |[0.1343792056399585,0.8656207943600416]|
|0.0  |0.0       |[0.9773546766387631,0.0226453233612368]|
|1.0  |1.0       |[0.0170508265586195,0.9829491734413806]|
|1.0  |0.0       |[0.6122241729292978,0.3877758270707023]|
+-----+----------+---------------------------------------+
使用 PySpark 进行机器学习

查准率与召回率

模型在测试数据上的效果如何?

查看混淆矩阵。

+-----+----------+-----+
|label|prediction|count|
+-----+----------+-----+
|  1.0|       1.0|    8| - TP(真正例)
|  0.0|       1.0|    4| - FP(假正例)
|  1.0|       0.0|    2| - FN(假负例)
|  0.0|       0.0|   10| - TN(真负例)
+-----+----------+-----+
# Precision (positive)
TP / (TP + FP)
0.6666666666666666
# Recall (positive)
TP / (TP + FN)
0.8
使用 PySpark 进行机器学习

加权指标

from pyspark.ml.evaluation import MulticlassClassificationEvaluator

evaluator = MulticlassClassificationEvaluator()

evaluator.evaluate(prediction, {evaluator.metricName: 'weightedPrecision'})
0.7638888888888888

其他指标:

  • weightedRecall
  • accuracy
  • f1
使用 PySpark 进行机器学习

ROC 与 AUC

一条 ROC 曲线

ROC = "受试者工作特征"

  • TP 对比 FP
  • 阈值 = 0(右上)
  • 阈值 = 1(左下)

AUC = "曲线下面积"

  • 理想情况 AUC = 1
使用 PySpark 进行机器学习

来做一次逻辑回归!

使用 PySpark 进行机器学习

Preparing Video For Download...