การจัดการกับ Label Noise
นักวิเคราะห์ด้านความปลอดภัยไซเบอร์คนหนึ่งแจ้งว่าป้ายกำกับของคอมพิวเตอร์ต้นทาง 100 เครื่องแรกในชุดข้อมูลฝึกอาจมีข้อผิดพลาด เนื่องจากปัญหาฐานข้อมูล เธอหวังว่าจะยังใช้ข้อมูลนี้ได้เพราะป้ายกำกับส่วนใหญ่ยังถูกต้อง แต่ขอให้ถือว่าป้ายกำกับทั้ง 100 นั้นเป็น "noisy" โชคดีที่รู้วิธีจัดการกับปัญหานี้ด้วยการเรียนรู้แบบถ่วงน้ำหนัก (weighted learning) ข้อมูลที่มีปัญหาพร้อมใช้งานในพื้นที่ทำงานในรูปแบบ X_train, X_test, y_train_noisy, y_test เป้าหมายคือทดสอบว่าการเรียนรู้แบบถ่วงน้ำหนักช่วยเพิ่มประสิทธิภาพของตัวจำแนกประเภท GaussianNB() ได้หรือไม่ โดยใช้พารามิเตอร์เสริม sample_weight ซึ่งรองรับโดยเมธอด .fit() ของตัวจำแนกประเภทยอดนิยมส่วนใหญ่ ฟังก์ชัน accuracy_score() ถูกโหลดไว้ล่วงหน้าแล้ว ดูภาพด้านล่างเพื่อประกอบการทำความเข้าใจ

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การออกแบบ Machine Learning Workflows ด้วย Python
คำแนะนำการฝึกหัด
- ฝึก
GaussianNB()กับข้อมูลฝึกที่มีป้ายกำกับซึ่งอาจมีข้อผิดพลาด - รายงานความแม่นยำบนชุดข้อมูลทดสอบโดยใช้
accuracy_score() - สร้างค่าน้ำหนักที่กำหนดน้ำหนักให้ป้ายกำกับที่ถูกต้องมากกว่าป้ายกำกับที่มี noise เป็น 2 เท่า โดยค่าน้ำหนักนี้ใช้กับชุดข้อมูลฝึก
- ฝึกโมเดลใหม่อีกครั้งโดยใช้ค่าน้ำหนักดังกล่าว แล้วรายงานความแม่นยำ
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Fit a Gaussian Naive Bayes classifier to the training data
clf = ____.____(____, y_train_noisy)
# Report its accuracy on the test data
print(accuracy_score(y_test, ____.____(X_test)))
# Assign half the weight to the first 100 noisy examples
weights = [____]*100 + [1.0]*(len(____)-100)
# Refit using weights and report accuracy. Has it improved?
clf_weights = GaussianNB().fit(X_train, y_train_noisy, ____=____)
print(accuracy_score(y_test, ____))