วิธีการดำเนินการถดถอยโลจิสติกใน python (ทีละขั้นตอน)


การถดถอยแบบลอจิสติก เป็นวิธีการที่เราสามารถใช้เพื่อให้พอดีกับแบบจำลองการถดถอยเมื่อ ตัวแปรตอบสนอง เป็นไบนารี

การถดถอยโลจิสติกใช้วิธีการที่เรียกว่า การประมาณค่าความน่าจะเป็นสูงสุด เพื่อค้นหาสมการในรูปแบบต่อไปนี้:

บันทึก[p(X) / ( 1 -p(X))] = β 0 + β 1 X 1 + β 2 X 2 + … + β พี

ทอง:

  • X j : ตัวแปร ทำนายที่ j
  • β j : การประมาณค่าสัมประสิทธิ์ของตัวแปรทำนายที่ j

สูตรทางด้านขวาของสมการทำนาย อัตราต่อรองของบันทึก ที่ตัวแปรตอบกลับรับค่า 1

ดังนั้น เมื่อเราปรับแบบจำลองการถดถอยลอจิสติกให้เหมาะสม เราสามารถใช้สมการต่อไปนี้เพื่อคำนวณความน่าจะเป็นที่การสังเกตที่กำหนดจะได้ค่า 1:

p(X) = อี β 0 + β 1 X 1 + β 2 X 2 + + β p

จากนั้นเราใช้เกณฑ์ความน่าจะเป็นที่แน่นอนเพื่อจัดประเภทการสังเกตเป็น 1 หรือ 0

ตัวอย่างเช่น เราสามารถพูดได้ว่าการสังเกตที่มีความน่าจะเป็นมากกว่าหรือเท่ากับ 0.5 จะถูกจัดประเภทเป็น “1” และการสังเกตอื่นๆ ทั้งหมดจะถูกจัดประเภทเป็น “0”

บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีการดำเนินการถดถอยโลจิสติกใน R

ขั้นตอนที่ 1: นำเข้าแพ็คเกจที่จำเป็น

ขั้นแรก เราจะนำเข้าแพ็คเกจที่จำเป็นเพื่อทำการถดถอยโลจิสติกใน Python:

 import pandas as pd
import numpy as np
from sklearn. model_selection import train_test_split
from sklearn. linear_model import LogisticRegression
from sklearn import metrics
import matplotlib. pyplot as plt

ขั้นตอนที่ 2: โหลดข้อมูล

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล เริ่มต้น จาก หนังสือ Introduction to Statistical Learning เราสามารถใช้โค้ดต่อไปนี้เพื่อโหลดและแสดงข้อมูลสรุปของชุดข้อมูล:

 #import dataset from CSV file on Github
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/default.csv"
data = pd. read_csv (url)

#view first six rows of dataset
data[0:6]

        default student balance income
0 0 0 729.526495 44361.625074
1 0 1 817.180407 12106.134700
2 0 0 1073.549164 31767.138947
3 0 0 529.250605 35704.493935
4 0 0 785.655883 38463.495879
5 0 1 919.588530 7491.558572  

#find total observations in dataset
len( data.index )

10000

ชุดข้อมูลนี้มีข้อมูลต่อไปนี้เกี่ยวกับบุคคล 10,000 คน:

  • ค่าเริ่มต้น: ระบุว่าบุคคลนั้นผิดนัดหรือไม่
  • นักเรียน: ระบุว่าบุคคลนั้นเป็นนักเรียนหรือไม่
  • ยอดคงเหลือ: ยอดคงเหลือเฉลี่ยที่ถือโดยบุคคล
  • รายได้: รายได้ของแต่ละบุคคล

เราจะใช้สถานะนักศึกษา ยอดคงเหลือในธนาคาร และรายได้เพื่อสร้างแบบจำลองการถดถอยลอจิสติกที่คาดการณ์ความน่าจะเป็นที่บุคคลหนึ่งๆ จะผิดนัดชำระหนี้

ขั้นตอนที่ 3: สร้างตัวอย่างการฝึกอบรมและการทดสอบ

ต่อไป เราจะแบ่งชุดข้อมูลออกเป็นชุดการฝึกเพื่อ ฝึก โมเดลและชุดทดสอบ เพื่อทดสอบ โมเดล

 #define the predictor variables and the response variable
X = data[[' student ',' balance ',' income ']]
y = data[' default ']

#split the dataset into training (70%) and testing (30%) sets
X_train,X_test,y_train,y_test = train_test_split (X,y,test_size=0.3,random_state=0)

ขั้นตอนที่ 4: ติดตั้งแบบจำลองการถดถอยโลจิสติก

ต่อไป เราจะใช้ฟังก์ชัน LogisticRegression() เพื่อให้พอดีกับแบบจำลองการถดถอยโลจิสติกกับชุดข้อมูล:

 #instantiate the model
log_regression = LogisticRegression()

#fit the model using the training data
log_regression. fit (X_train,y_train)

#use model to make predictions on test data
y_pred = log_regression. predict (X_test)

ขั้นตอนที่ 5: การวินิจฉัยโมเดล

เมื่อเราติดตั้งแบบจำลองการถดถอยแล้ว เราก็จะสามารถวิเคราะห์ประสิทธิภาพของแบบจำลองของเราบนชุดข้อมูลทดสอบได้

ขั้นแรก เราจะสร้างเมทริกซ์ความสับสน สำหรับโมเดล:

 cnf_matrix = metrics. confusion_matrix (y_test, y_pred)
cnf_matrix

array([[2886, 1],
       [113,0]])

จากเมทริกซ์ความสับสนเราจะเห็นได้ว่า:

  • #คำทำนายเชิงบวกที่แท้จริง: 2886
  • #คำทำนายเชิงลบที่แท้จริง: 0
  • #คำทำนายผลบวกลวง : 113
  • #การทำนายเชิงลบที่เป็นเท็จ: 1

นอกจากนี้เรายังสามารถรับแบบจำลองความแม่นยำ ซึ่งบอกเปอร์เซ็นต์ของการคาดการณ์การแก้ไขที่ทำโดยแบบจำลอง:

 print(" Accuracy: ", metrics.accuracy_score (y_test, y_pred))l

Accuracy: 0.962

ข้อมูลนี้บอกเราว่าโมเดลคาดการณ์ได้ถูกต้องว่าบุคคลนั้นจะผิดนัด 96.2% ของเวลาหรือไม่

สุดท้ายนี้ เราสามารถพล็อตเส้นโค้งลักษณะการทำงานของตัวรับ (ROC) ซึ่งแสดงเปอร์เซ็นต์ของผลบวกจริงที่ทำนายโดยแบบจำลอง เมื่อเกณฑ์ความน่าจะเป็นในการทำนายลดลงจาก 1 เป็น 0

ยิ่ง AUC สูง (พื้นที่ใต้เส้นโค้ง) แบบจำลองของเราก็สามารถทำนายผลลัพธ์ได้แม่นยำยิ่งขึ้น:

 #define metrics
y_pred_proba = log_regression. predict_proba (X_test)[::,1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred_proba)
auc = metrics. roc_auc_score (y_test, y_pred_proba)

#create ROC curve
plt. plot (fpr,tpr,label=" AUC= "+str(auc))
plt. legend (loc=4)
plt. show ()

เส้นโค้ง ROC ใน Python

รหัส Python แบบเต็มที่ใช้ในบทช่วยสอนนี้สามารถพบได้ ที่นี่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *