การจัดหมวดหมู่ - บทนำ

ความรู้เบื้องต้นเกี่ยวกับการจำแนกประเภท

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

ในทางคณิตศาสตร์การจำแนกประเภทเป็นงานในการประมาณฟังก์ชันการทำแผนที่ (f) จากตัวแปรอินพุต (X) ไปยังตัวแปรเอาต์พุต (Y) โดยพื้นฐานแล้วเป็นของแมชชีนเลิร์นนิงภายใต้การดูแลซึ่งมีการจัดเตรียมเป้าหมายพร้อมกับชุดข้อมูลอินพุตด้วย

ตัวอย่างปัญหาการจัดประเภทอาจเป็นการตรวจจับสแปมในอีเมล เอาต์พุตสามารถมีได้เพียงสองประเภทคือ "สแปม" และ "ไม่มีสแปม" ด้วยเหตุนี้จึงเป็นการจำแนกประเภทไบนารี

ในการใช้การจำแนกประเภทนี้ก่อนอื่นเราต้องฝึกลักษณนาม สำหรับตัวอย่างนี้จะใช้อีเมล "สแปม" และ "ไม่มีสแปม" เป็นข้อมูลการฝึกอบรม หลังจากฝึกลักษณนามสำเร็จแล้วสามารถใช้ตรวจหาอีเมลที่ไม่รู้จักได้

ประเภทของผู้เรียนในการจำแนกประเภท

เรามีผู้เรียนสองประเภทตามปัญหาการจำแนกประเภท -

ผู้เรียนขี้เกียจ

ตามชื่อผู้เรียนประเภทนี้รอให้ข้อมูลการทดสอบปรากฏขึ้นหลังจากจัดเก็บข้อมูลการฝึกอบรม การจัดประเภทจะทำได้หลังจากได้รับข้อมูลการทดสอบแล้วเท่านั้น พวกเขาใช้เวลาในการฝึกฝนน้อยลง แต่มีเวลาในการทำนายมากขึ้น ตัวอย่างของผู้เรียนที่ขี้เกียจ ได้แก่ เพื่อนบ้านที่ใกล้ที่สุด K และการให้เหตุผลตามกรณี

ผู้เรียนที่กระตือรือร้น

ตรงกันข้ามกับผู้เรียนที่ขี้เกียจผู้เรียนกระตือรือร้นสร้างแบบจำลองการจำแนกโดยไม่ต้องรอให้ข้อมูลการทดสอบปรากฏขึ้นหลังจากจัดเก็บข้อมูลการฝึกอบรม พวกเขาใช้เวลาในการฝึกฝนมากขึ้น แต่ใช้เวลาในการทำนายน้อยลง ตัวอย่างของผู้เรียนที่กระตือรือร้น ได้แก่ ต้นไม้แห่งการตัดสินใจ, Naïve Bayes และ Artificial Neural Networks (ANN)

การสร้างลักษณนามใน Python

Scikit-learn ซึ่งเป็นไลบรารี Python สำหรับการเรียนรู้ของเครื่องสามารถใช้เพื่อสร้างลักษณนามใน Python ขั้นตอนในการสร้างลักษณนามใน Python มีดังต่อไปนี้ -

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

สำหรับการสร้างลักษณนามโดยใช้ scikit-learn เราจำเป็นต้องนำเข้า เราสามารถนำเข้าได้โดยใช้สคริปต์ต่อไปนี้ -

import sklearn

ขั้นตอนที่ 2: การนำเข้าชุดข้อมูล

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

from sklearn.datasets import load_breast_cancer

สคริปต์ต่อไปนี้จะโหลดชุดข้อมูล

data = load_breast_cancer()

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

label_names = data['target_names']
   labels = data['target']
   feature_names = data['feature_names']
   features = data['data']

คำสั่งต่อไปนี้จะพิมพ์ชื่อป้ายกำกับ 'malignant'และ'benign'ในกรณีของฐานข้อมูลของเรา

print(label_names)

ผลลัพธ์ของคำสั่งด้านบนคือชื่อของเลเบล -

['malignant' 'benign']

ป้ายกำกับเหล่านี้แมปกับค่าไบนารี 0 และ 1 Malignant มะเร็งแสดงด้วย 0 และ Benign มะเร็งแสดงด้วย 1.

ชื่อคุณลักษณะและค่าคุณลักษณะของป้ายกำกับเหล่านี้สามารถมองเห็นได้ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -

print(feature_names[0])

ผลลัพธ์ของคำสั่งด้านบนคือชื่อของคุณลักษณะสำหรับ label 0 เช่น Malignant มะเร็ง -

mean radius

ในทำนองเดียวกันชื่อของคุณสมบัติสำหรับฉลากสามารถสร้างได้ดังนี้ -

print(feature_names[1])

ผลลัพธ์ของคำสั่งด้านบนคือชื่อของคุณลักษณะสำหรับ label 1 ie Benign มะเร็ง -

mean texture

เราสามารถพิมพ์คุณสมบัติสำหรับฉลากเหล่านี้ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -

print(features[0])

สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้ -

[
   1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
   1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
   6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
   1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
   4.601e-01 1.189e-01
]

เราสามารถพิมพ์คุณสมบัติสำหรับฉลากเหล่านี้ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -

print(features[1])

สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้ -

[
   2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
   7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
   5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
   2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
   2.750e-01 8.902e-02
]

ขั้นตอนที่ 3: การจัดระเบียบข้อมูลลงในชุดการฝึกอบรมและการทดสอบ

เนื่องจากเราจำเป็นต้องทดสอบโมเดลของเรากับข้อมูลที่มองไม่เห็นเราจะแบ่งชุดข้อมูลของเราออกเป็นสองส่วนคือชุดฝึกและชุดทดสอบ เราสามารถใช้ train_test_split () ฟังก์ชั่นของ sklearn python package เพื่อแบ่งข้อมูลออกเป็นชุด ๆ คำสั่งต่อไปนี้จะนำเข้าฟังก์ชัน -

from sklearn.model_selection import train_test_split

ตอนนี้คำสั่งถัดไปจะแบ่งข้อมูลออกเป็นข้อมูลการฝึกอบรมและการทดสอบ ในตัวอย่างนี้เราใช้ข้อมูล 40 เปอร์เซ็นต์เพื่อวัตถุประสงค์ในการทดสอบและ 60 เปอร์เซ็นต์ของข้อมูลเพื่อการฝึกอบรม -

train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)

ขั้นที่ 4: การประเมินแบบจำลอง

หลังจากแบ่งข้อมูลออกเป็นการฝึกอบรมและการทดสอบแล้วเราจำเป็นต้องสร้างแบบจำลอง เราจะใช้อัลกอริทึมNaïve Bayes เพื่อจุดประสงค์นี้ คำสั่งต่อไปนี้จะนำเข้าโมดูล GaussianNB -

from sklearn.naive_bayes import GaussianNB

ตอนนี้เริ่มต้นโมเดลดังนี้ -

gnb = GaussianNB()

ถัดไปด้วยความช่วยเหลือของคำสั่งต่อไปนี้เราสามารถฝึกโมเดลได้ -

model = gnb.fit(train, train_labels)

ตอนนี้เพื่อวัตถุประสงค์ในการประเมินเราจำเป็นต้องทำการคาดการณ์ สามารถทำได้โดยใช้ฟังก์ชันทำนาย () ดังนี้ -

preds = gnb.predict(test)
print(preds)

สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้ -

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
   0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
   1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
   0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
   1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 
   1

]

อนุกรมของ 0s และ 1s ข้างต้นในเอาต์พุตเป็นค่าที่คาดการณ์ไว้สำหรับ Malignant และ Benign ชั้นเรียนเนื้องอก

ขั้นที่ 5: ค้นหาความแม่นยำ

เราสามารถค้นหาความถูกต้องของการสร้างแบบจำลองในขั้นตอนก่อนหน้าโดยการเปรียบเทียบอาร์เรย์ทั้งสองคือ test_labels และ preds เราจะใช้ฟังก์ชัน precision_score () เพื่อกำหนดความถูกต้อง

from sklearn.metrics import accuracy_score
   print(accuracy_score(test_labels,preds))
   0.951754385965

ผลลัพธ์ข้างต้นแสดงให้เห็นว่าลักษณนามNaïveBayesมีความแม่นยำ 95.17%

เมตริกการประเมินการจำแนกประเภท

งานจะไม่เสร็จแม้ว่าคุณจะติดตั้งแอปพลิเคชันหรือโมเดล Machine Learning ของคุณเสร็จแล้วก็ตาม เราต้องค้นหาให้ได้ว่า Model ของเรามีประสิทธิภาพแค่ไหน? อาจมีเมตริกการประเมินที่แตกต่างกัน แต่เราต้องเลือกอย่างรอบคอบเนื่องจากการเลือกเมตริกมีผลต่อวิธีการวัดและเปรียบเทียบประสิทธิภาพของอัลกอริทึมการเรียนรู้ของเครื่อง

ต่อไปนี้เป็นเมตริกการประเมินการจำแนกประเภทที่สำคัญซึ่งคุณสามารถเลือกได้ตามชุดข้อมูลและประเภทของปัญหาของคุณ -

เมทริกซ์ความสับสน

เป็นวิธีที่ง่ายที่สุดในการวัดประสิทธิภาพของปัญหาการจำแนกประเภทโดยที่ผลลัพธ์อาจเป็นประเภทของคลาสสองประเภทขึ้นไป เมทริกซ์ความสับสนไม่ใช่อะไรนอกจากตารางที่มีสองมิติ ได้แก่ “ ตามจริง” และ“ คาดการณ์” และนอกจากนี้มิติข้อมูลทั้งสองยังมี“ True Positives (TP)”,“ True Negatives (TN)”,“ False Positives (FP)”,“ False Negatives (FN)” ตามที่แสดงด้านล่าง

คำอธิบายของคำศัพท์ที่เกี่ยวข้องกับเมทริกซ์ความสับสนมีดังนี้ -

  • True Positives (TP) - เป็นกรณีที่ทั้งคลาสจริงและคลาสของจุดข้อมูลที่คาดการณ์ไว้คือ 1

  • True Negatives (TN) - เป็นกรณีที่ทั้งคลาสจริงและคลาสที่คาดการณ์ไว้ของจุดข้อมูลเป็น 0

  • False Positives (FP) - เป็นกรณีที่คลาสจริงของจุดข้อมูลคือ 0 และคลาสของจุดข้อมูลที่คาดการณ์ไว้คือ 1

  • False Negatives (FN) - เป็นกรณีที่คลาสจริงของจุดข้อมูลคือ 1 และคลาสของจุดข้อมูลที่คาดการณ์ไว้คือ 0

เราสามารถค้นหาเมทริกซ์ความสับสนได้ด้วยความช่วยเหลือของฟังก์ชันความสับสน _matrix () ของ sklearn ด้วยความช่วยเหลือของสคริปต์ต่อไปนี้เราสามารถค้นหาเมทริกซ์ความสับสนของตัวจำแนกไบนารีที่สร้างไว้ด้านบน -

from sklearn.metrics import confusion_matrix

เอาต์พุต

[
   [ 73   7]
   [  4 144]
]

ความถูกต้อง

อาจกำหนดเป็นจำนวนการคาดคะเนที่ถูกต้องซึ่งทำโดยแบบจำลอง ML ของเรา เราสามารถคำนวณได้อย่างง่ายดายโดยเมทริกซ์ความสับสนด้วยความช่วยเหลือของสูตรต่อไปนี้ -

$$ = \ frac {+} {+++} $$

สำหรับลักษณนามไบนารีที่สร้างไว้ข้างต้น TP + TN = 73 + 144 = 217 และ TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228

ดังนั้นความแม่นยำ = 217/228 = 0.951754385965 ซึ่งเหมือนกับที่เราคำนวณไว้หลังจากสร้างตัวจำแนกไบนารีของเรา

ความแม่นยำ

ความแม่นยำที่ใช้ในการเรียกเอกสารอาจกำหนดเป็นจำนวนเอกสารที่ถูกต้องที่ส่งคืนโดยแบบจำลอง ML ของเรา เราสามารถคำนวณได้อย่างง่ายดายโดยเมทริกซ์ความสับสนด้วยความช่วยเหลือของสูตรต่อไปนี้ -

$$ = \ frac {} {+ FP} $$

สำหรับลักษณนามไบนารีที่สร้างขึ้นข้างต้น TP = 73 และ TP + FP = 73 + 7 = 80

ดังนั้นความแม่นยำ = 73/80 = 0.915

การเรียกคืนหรือความอ่อนไหว

การเรียกคืนอาจกำหนดเป็นจำนวนผลบวกที่ส่งคืนโดยแบบจำลอง ML ของเรา เราสามารถคำนวณได้อย่างง่ายดายโดยเมทริกซ์ความสับสนด้วยความช่วยเหลือของสูตรต่อไปนี้ -

$$ = \ frac {} {+ FN} $$

สำหรับลักษณนามไบนารีที่สร้างไว้ข้างต้น TP = 73 และ TP + FN = 73 + 4 = 77

ดังนั้นความแม่นยำ = 73/77 = 0.94805

ความจำเพาะ

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

$$ = \ frac {N} {N + FP} $$

สำหรับลักษณนามไบนารีที่สร้างขึ้นข้างต้น TN = 144 และ TN + FP = 144 + 7 = 151

ดังนั้นความแม่นยำ = 144/151 = 0.95364

อัลกอริธึมการจำแนก ML ต่างๆ

ต่อไปนี้เป็นขั้นตอนวิธีการจำแนก ML ที่สำคัญ -

  • การถดถอยโลจิสติก

  • รองรับ Vector Machine (SVM)

  • ต้นไม้ตัดสินใจ

  • Naïve Bayes

  • ป่าสุ่ม

เราจะพูดถึงอัลกอริทึมการจำแนกเหล่านี้ทั้งหมดโดยละเอียดในบทต่อไป

การใช้งาน

การประยุกต์ใช้อัลกอริทึมการจำแนกประเภทที่สำคัญที่สุดบางส่วนมีดังนี้ -

  • การรู้จำเสียง

  • การจดจำลายมือ

  • การระบุไบโอเมตริกซ์

  • การจำแนกประเภทเอกสาร