แปลง heuristic ให้กลายเป็น classifier
คุณแปลกใจที่ heuristic สามารถช่วยได้มากขนาดนี้ จึงตัดสินใจนำ heuristic ที่ว่า "พอร์ตที่ไม่ซ้ำกันจำนวนมากเกินไปถือว่าน่าสงสัย" มาใช้เป็น classifier โดยตรง วิธีการคือกำหนด threshold จากจำนวนพอร์ตที่ไม่ซ้ำกันของแต่ละ source เปรียบเทียบกับค่าเฉลี่ยของ source ที่มีป้ายกำกับเป็น True ซึ่งหมายถึงคอมพิวเตอร์ที่ถูกระบุว่าเป็นอันตราย ชุดข้อมูลถูกโหลดและแบ่งเป็น training และ test เรียบร้อยแล้ว จึงมีออบเจกต์ X_train, X_test, y_train และ y_test พร้อมใช้งาน และมีการ import accuracy_score() กับ numpy ในนาม np ไว้แล้ว ขอชี้แจงว่าในแบบฝึกหัดนี้จะไม่ได้ใช้ classifier จาก scikit-learn แต่จะกำหนดกฎการจำแนกประเภทด้วยตัวเองโดยตรง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การออกแบบ Machine Learning Workflows ด้วย Python
คำแนะนำการฝึกหัด
- เลือกเฉพาะ host ที่ไม่ดีจาก
X_trainเพื่อสร้างชุดข้อมูลใหม่ชื่อX_train_badโดยทราบว่าy_trainเป็น Boolean array - คำนวณค่าเฉลี่ยของคอลัมน์
unique_portsสำหรับ host ที่ไม่ดี แล้วเก็บไว้ในตัวแปรavg_bad_ports - สร้าง classifier ที่ทำนายว่าตัวอย่างใดก็ตามที่มีค่า
unique_portsเกินavg_bad_portsเป็น positive แล้วบันทึกผลการทำนายบนข้อมูลทดสอบไว้ในตัวแปรใหม่ชื่อpred_port - คำนวณความแม่นยำของ classifier นี้บนข้อมูลทดสอบโดยใช้
accuracy_score()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a new dataset X_train_bad by subselecting bad hosts
X_train_bad = ____[____]
# Calculate the average of unique_ports in bad examples
avg_bad_ports = np.____(____['unique_ports'])
# Label as positive sources that use more ports than that
pred_port = ____['unique_ports'] > ____
# Print the accuracy of the heuristic
print(____(y_test, ____))