Logistic Regression และ ROC Curve

Supervised Learning ด้วย scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Logistic Regression สำหรับการจำแนกประเภทแบบไบนารี

  • Logistic Regression ใช้สำหรับปัญหาการจำแนกประเภท

  • Logistic Regression ให้ผลลัพธ์เป็นความน่าจะเป็น

  • ถ้าความน่าจะเป็น $ \ p>0.5$:

    • ข้อมูลจะถูกกำหนดป้ายกำกับเป็น 1
  • ถ้าความน่าจะเป็น $ \ p<0.5$:

    • ข้อมูลจะถูกกำหนดป้ายกำกับเป็น 0
Supervised Learning ด้วย scikit-learn

ขอบเขตการตัดสินใจแบบเส้นตรง

กราฟกระจายของ feature1 กับ feature2 พร้อมเส้นขอบเขตการตัดสินใจแบบเส้นตรงสำหรับทำนายการเลิกใช้บริการ

Supervised Learning ด้วย scikit-learn

Logistic Regression ใน 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)
Supervised Learning ด้วย scikit-learn

การทำนายความน่าจะเป็น

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

print(y_pred_probs[0])
[0.08961376]
Supervised Learning ด้วย scikit-learn

Threshold ของความน่าจะเป็น

  • ค่าเริ่มต้น threshold ของ Logistic Regression = 0.5

  • ไม่ได้จำกัดเฉพาะ Logistic Regression

    • ตัวจำแนก KNN ก็มี threshold เช่นกัน
  • จะเกิดอะไรขึ้นถ้าปรับค่า threshold?

Supervised Learning ด้วย scikit-learn

ROC Curve

กราฟ True Positive Rate เทียบกับ False Positive Rate พร้อมเส้นประจากล่างซ้ายไปบนขวา

Supervised Learning ด้วย scikit-learn

ROC Curve

ไฮไลต์ threshold เป็นศูนย์ที่มุมบนขวา

Supervised Learning ด้วย scikit-learn

ROC Curve

ไฮไลต์ threshold เป็น 1 ที่มุมล่างซ้ายด้วย

Supervised Learning ด้วย scikit-learn

ROC Curve

ไฮไลต์ threshold ทั้งสองค่า

Supervised Learning ด้วย scikit-learn

ROC Curve

จุดที่โค้งขึ้นและไปทางขวาเหนือเส้นประ แสดง threshold ที่แตกต่างกัน

Supervised Learning ด้วย scikit-learn

ROC Curve

เส้นที่โค้งขึ้นและไปทางขวาเหนือเส้นประ แสดง threshold ที่แตกต่างกัน

Supervised Learning ด้วย scikit-learn

การพล็อต ROC Curve

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()
Supervised Learning ด้วย scikit-learn

การพล็อต ROC Curve

กราฟ ROC Curve ของชุดข้อมูลการเลิกใช้บริการ เส้นเคลื่อนจากล่างซ้ายขึ้นไปบนขวา

Supervised Learning ด้วย scikit-learn

ROC AUC

กราฟ ROC Curve ของชุดข้อมูลการเลิกใช้บริการ เส้นเคลื่อนจากล่างซ้ายขึ้นไปบนขวา พร้อมระบุ p=0.67

Supervised Learning ด้วย scikit-learn

ROC AUC ใน scikit-learn

from sklearn.metrics import roc_auc_score

print(roc_auc_score(y_test, y_pred_probs))
0.6700964152663693
Supervised Learning ด้วย scikit-learn

มาฝึกกันเถอะ!

Supervised Learning ด้วย scikit-learn

Preparing Video For Download...