วิธีการตีความรายงานการจำแนกประเภทใน sklearn (พร้อมตัวอย่าง)
เมื่อเราใช้ โมเดลการจัดหมวดหมู่ ในการเรียนรู้ของเครื่อง เราจะใช้เมตริกทั่วไปสามรายการเพื่อประเมินคุณภาพของโมเดล:
1. ความแม่นยำ : เปอร์เซ็นต์ของการทำนายเชิงบวกที่ถูกต้อง เปรียบเทียบกับการคาดการณ์เชิงบวกทั้งหมด
2. การเรียกคืน : เปอร์เซ็นต์ของการคาดการณ์เชิงบวกที่ถูกต้อง เปรียบเทียบกับผลบวกที่เกิดขึ้นจริงทั้งหมด
3. คะแนน F1 : ค่าเฉลี่ยฮาร์มอนิกถ่วงน้ำหนักของความแม่นยำและการเรียกคืน ยิ่งโมเดลอยู่ใกล้ 1 มากเท่าไร โมเดลก็ยิ่งดีเท่านั้น
- คะแนน F1: 2* (ความแม่นยำ * การเรียกคืน) / (ความแม่นยำ + การเรียกคืน)
การใช้ตัวชี้วัดทั้งสามนี้ทำให้เราเข้าใจได้ว่าแบบจำลองการจำแนกประเภทที่กำหนดสามารถทำนายผลลัพธ์สำหรับ ตัวแปรตอบสนอง บางอย่างได้ดีเพียงใด
โชคดีที่เมื่อปรับโมเดลการจำแนกประเภทใน Python ให้เหมาะสม เราสามารถใช้ฟังก์ชัน การจำแนกประเภทรายงาน () จากไลบรารี sklearn เพื่อสร้างตัวชี้วัดทั้งสามนี้
ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟังก์ชันนี้ในทางปฏิบัติ
ตัวอย่าง: วิธีใช้รายงานการจำแนกประเภทใน sklearn
สำหรับตัวอย่างนี้ เราจะปรับโมเดลการถดถอยลอจิสติกที่ใช้คะแนนและช่วยในการคาดการณ์ว่าผู้เล่นบาสเกตบอลระดับวิทยาลัย 1,000 คนจะถูกร่างเข้าสู่ NBA หรือไม่
ขั้นแรก เราจะนำเข้าแพ็คเกจที่จำเป็นเพื่อทำการถดถอยโลจิสติกใน 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. metrics import classification_report
ต่อไป เราจะสร้างกรอบข้อมูลที่มีข้อมูลของผู้เล่นบาสเก็ตบอล 1,000 คน:
#make this example reproducible
n.p. random . seeds (1)
#createDataFrame
df = pd. DataFrame ({' points ': np. random . randint (30, size=1000),
' assists ': np. random . randint (12, size=1000),
' drafted ': np. random . randint (2, size=1000)})
#view DataFrame
df. head ()
points assists drafted
0 5 1 1
1 11 8 0
2 12 4 1
3 8 7 0
4 9 0 0
หมายเหตุ : ค่า 0 บ่งชี้ว่าผู้เล่นยังไม่ได้ร่าง ในขณะที่ค่า 1 บ่งชี้ว่าผู้เล่นถูกร่างแล้ว
ต่อไป เราจะแบ่งข้อมูลของเราออกเป็นชุดการฝึกและชุดการทดสอบ และปรับให้เข้ากับโมเดลการถดถอยโลจิสติก:
#define the predictor variables and the response variable X = df[[' points ', ' assists ']] y = df[' drafted '] #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) #instantiate the model logistic_regression = LogisticRegression() #fit the model using the training data logistic_regression. fit (X_train,y_train) #use model to make predictions on test data y_pred = logistic_regression. predict (X_test)
สุดท้ายนี้ เราจะใช้ฟังก์ชัน Classification_report() เพื่อพิมพ์เมตริกการจัดหมวดหมู่ของโมเดลของเรา:
#print classification report for model
print (classification_report(y_test, y_pred))
precision recall f1-score support
0 0.51 0.58 0.54 160
1 0.43 0.36 0.40 140
accuracy 0.48 300
macro avg 0.47 0.47 0.47 300
weighted avg 0.47 0.48 0.47 300
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
ชี้แจง : ของผู้เล่นทั้งหมดที่โมเดลคาดการณ์ว่าจะถูกดราฟท์ มีเพียง 43% เท่านั้นที่เป็นเช่นนั้น
คำเตือน : ในบรรดาผู้เล่นทั้งหมดที่ดราฟท์จริง โมเดลทำนายผลลัพธ์นี้ได้อย่างถูกต้องเพียง 36% เท่านั้น
คะแนน F1 : ค่านี้คำนวณดังนี้:
- คะแนน F1: 2* (ความแม่นยำ * การเรียกคืน) / (ความแม่นยำ + การเรียกคืน)
- คะแนน F1: 2*(.43*.36)/(.43+.36)
- เรตติ้ง F1: 0.40 .
เนื่องจากค่านี้ไม่ใกล้กับ 1 มากนัก จึงบอกเราว่าโมเดลคาดการณ์ได้ไม่ดีว่าผู้เล่นจะถูกดราฟต์หรือไม่
การสนับสนุน : ค่าเหล่านี้เพียงบอกเราว่ามีผู้เล่นกี่คนในแต่ละคลาสในชุดข้อมูลทดสอบ เราจะเห็นได้ว่าในบรรดาผู้เล่นในชุดข้อมูลทดสอบ 160 คน ยังไม่ได้ร่าง และ 140 คน ยังไม่ได้ร่าง
หมายเหตุ : คุณสามารถค้นหาเอกสารฉบับเต็มสำหรับฟังก์ชัน Classification_report() ได้ที่นี่
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับการใช้แบบจำลองการจัดหมวดหมู่ใน Python:
วิธีการดำเนินการถดถอยโลจิสติกใน Python
วิธีสร้างเมทริกซ์ความสับสนใน Python
วิธีการคำนวณความแม่นยำที่สมดุลใน Python