逻辑回归与ROC曲线

使用 scikit-learn 的监督学习

George Boorman

Core Curriculum Manager, DataCamp

二分类的逻辑回归

  • 逻辑回归用于分类问题

  • 逻辑回归输出概率

  • 若概率 $ \ p>0.5$:

    • 将数据标记为 1
  • 若概率 $ \ p<0.5$:

    • 将数据标记为 0
使用 scikit-learn 的监督学习

线性决策边界

特征1对特征2的散点图,预测流失的直线决策边界自左向右

使用 scikit-learn 的监督学习

scikit-learn中的逻辑回归

from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
使用 scikit-learn 的监督学习

预测概率

y_pred_probs = logreg.predict_proba(X_test)[:, 1]

print(y_pred_probs[0])
[0.08961376]
使用 scikit-learn 的监督学习

概率阈值

  • 默认情况下,逻辑回归阈值 = 0.5

  • 并非逻辑回归独有

    • KNN 分类器也有阈值
  • 若调整阈值会怎样?

使用 scikit-learn 的监督学习

ROC曲线

真阳性率与假阳性率,虚线自左下到右上

使用 scikit-learn 的监督学习

ROC曲线

右上角高亮的阈值为0

使用 scikit-learn 的监督学习

ROC曲线

左下角高亮的阈值为1

使用 scikit-learn 的监督学习

ROC曲线

两个阈值均已高亮

使用 scikit-learn 的监督学习

ROC曲线

表示不同阈值的点,位于虚线之上,向右上弯曲

使用 scikit-learn 的监督学习

ROC曲线

表示不同阈值的折线,位于虚线之上,向右上弯曲

使用 scikit-learn 的监督学习

绘制ROC曲线

from sklearn.metrics import roc_curve

fpr, tpr, thresholds = roc_curve(y_test, y_pred_probs)
plt.plot([0, 1], [0, 1], 'k--') plt.plot(fpr, tpr) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Logistic Regression ROC Curve') plt.show()
使用 scikit-learn 的监督学习

绘制ROC曲线

客户流失数据集的ROC曲线图,折线自左下向右上

使用 scikit-learn 的监督学习

ROC AUC

客户流失数据集的ROC曲线图,折线自左下向右上,标注 p=0.67

使用 scikit-learn 的监督学习

scikit-learn中的ROC AUC

from sklearn.metrics import roc_auc_score

print(roc_auc_score(y_test, y_pred_probs))
0.6700964152663693
使用 scikit-learn 的监督学习

Passons à la pratique !

使用 scikit-learn 的监督学习

Preparing Video For Download...