ในบทเรียนการจำแนกประเภทครั้งที่สองนี้ คุณจะได้สำรวจวิธีการจำแนกข้อมูลเชิงตัวเลขเพิ่มเติม คุณจะได้เรียนรู้เกี่ยวกับผลกระทบของการเลือกตัวจำแนกหนึ่งเหนืออีกตัวหนึ่งด้วย
เราสมมติว่าคุณได้ผ่านบทเรียนก่อนหน้าแล้วและมีชุดข้อมูลที่ทำความสะอาดแล้วในโฟลเดอร์ data ของคุณชื่อ cleaned_cuisines.csv ซึ่งอยู่ในโฟลเดอร์หลักของบทเรียน 4 บทนี้
เราได้โหลดไฟล์ notebook.ipynb ของคุณพร้อมชุดข้อมูลที่ทำความสะอาดแล้ว และได้แบ่งออกเป็นกรอบข้อมูล X และ y พร้อมสำหรับกระบวนการสร้างโมเดล
ก่อนหน้านี้ คุณได้เรียนรู้เกี่ยวกับตัวเลือกต่าง ๆ ที่มีเมื่อจำแนกข้อมูลโดยใช้ชีทช่วยจำของ Microsoft แล้ว Scikit-learn มีชีทช่วยจำที่คล้ายกัน แต่มีรายละเอียดมากกว่า ซึ่งสามารถช่วยจำกัดตัวประมาณ (ซึ่งเป็นอีกคำหนึ่งของตัวจำแนก) ได้มากขึ้น:
เคล็ดลับ: เยี่ยมชมแผนที่นี้ออนไลน์ และคลิกตามเส้นทางเพื่ออ่านเอกสารประกอบ
แผนที่นี้มีประโยชน์มากเมื่อคุณเข้าใจข้อมูลของคุณอย่างชัดเจน เพราะคุณสามารถ 'เดิน' ตามเส้นทางเพื่อตัดสินใจได้:
- เรามีตัวอย่าง >50 ตัวอย่าง
- เราต้องการทำนายหมวดหมู่
- เรามีข้อมูลที่ติดป้ายกำกับแล้ว
- เรามีตัวอย่างไม่เกิน 100K ตัวอย่าง
- ✨ เราสามารถเลือก Linear SVC
- ถ้าไม่ได้ผล เนื่องจากเรามีข้อมูลเชิงตัวเลข
- เราสามารถลองใช้ ✨ KNeighbors Classifier
- ถ้าไม่ได้ผล ลองใช้ ✨ SVC และ ✨ Ensemble Classifiers
- เราสามารถลองใช้ ✨ KNeighbors Classifier
นี่คือเส้นทางที่เป็นประโยชน์มากให้ติดตาม
ตามเส้นทางนี้ เราควรเริ่มต้นด้วยการนำเข้าบางไลบรารีที่จำเป็นต้องใช้
-
นำเข้าไลบรารีที่จำเป็น:
from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve import numpy as np
-
แบ่งข้อมูลการฝึกและทดสอบของคุณ:
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
Support-Vector Clustering (SVC) เป็นส่วนหนึ่งของตระกูล Support-Vector Machines ของเทคนิค ML (เรียนรู้เพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ด้านล่าง) ในวิธีนี้ คุณสามารถเลือก 'kernel' เพื่อกำหนดวิธีจัดกลุ่มป้ายกำกับ พารามิเตอร์ 'C' หมายถึง 'regularization' ที่ควบคุมอิทธิพลของพารามิเตอร์ kernel สามารถเป็นหนึ่งใน หลายตัว; ที่นี่เรากำหนดเป็น 'linear' เพื่อให้ใช้ประโยชน์จาก Linear SVC ได้เต็มที่ ค่า probability ตั้งเป็น 'false' โดยค่าเริ่มต้น; ที่นี่เราตั้งเป็น 'true' เพื่อรวบรวมค่าประมาณความน่าจะเป็น เราตั้งค่า random state เป็น '0' เพื่อสุ่มสับเปลี่ยนข้อมูลเพื่อให้ได้ความน่าจะเป็น
เริ่มต้นโดยการสร้างอาร์เรย์ของตัวจำแนก คุณจะเพิ่มไปยังอาร์เรย์นี้อย่างต่อเนื่องในขณะที่เราทดสอบ
-
เริ่มต้นด้วย Linear SVC:
C = 10 # สร้างตัวจำแนกประเภทที่แตกต่างกัน. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
ฝึกโมเดลโดยใช้ Linear SVC และพิมพ์รายงานออกมา:
n_classifiers = len(classifiers) for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) print(classification_report(y_test,y_pred))
ผลลัพธ์ค่อนข้างดี:
Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199 macro avg 0.79 0.79 0.79 1199 weighted avg 0.79 0.79 0.79 1199
K-Neighbors เป็นส่วนหนึ่งของตระกูล "neighbors" ของวิธี ML ซึ่งสามารถใช้ได้ทั้งการเรียนรู้แบบมีผู้สอนและไม่มีผู้สอน วิธีนี้จะกำหนดจำนวนจุดล่วงหน้า และรวบรวมข้อมูลรอบจุดเหล่านี้เพื่อทำนายป้ายกำกับทั่วไปสำหรับข้อมูล
ตัวจำแนกก่อนหน้านี้ดีและทำงานได้ดีกับข้อมูล แต่บางทีเราอาจได้ความแม่นยำที่ดีกว่า ลองใช้ตัวจำแนก K-Neighbors
-
เพิ่มบรรทัดลงในอาร์เรย์ตัวจำแนกของคุณ (เพิ่มเครื่องหมายจุลภาคหลังรายการ Linear SVC):
'KNN classifier': KNeighborsClassifier(C),
ผลลัพธ์แย่กว่านิดหน่อย:
Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199 macro avg 0.76 0.74 0.74 1199 weighted avg 0.76 0.74 0.74 1199✅ เรียนรู้เกี่ยวกับ K-Neighbors
ตัวจำแนก Support-Vector เป็นส่วนหนึ่งของตระกูล Support-Vector Machine ของวิธี ML ที่ใช้สำหรับงานจำแนกประเภทและการถดถอย SVMs "แมปตัวอย่างการฝึกไปยังจุดในอวกาศ" เพื่อเพิ่มระยะห่างระหว่างสองหมวดหมู่ ข้อมูลต่อไปจะถูกแมปเข้าสู่อวกาศนี้เพื่อให้สามารถทำนายหมวดหมู่ได้
ลองเพิ่มความแม่นยำเล็กน้อยด้วยตัวจำแนก Support Vector
-
เพิ่มเครื่องหมายจุลภาคหลังรายการ K-Neighbors แล้วเพิ่มบรรทัดนี้:
'SVC': SVC(),
ผลลัพธ์ค่อนข้างดีมาก!
Accuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199 macro avg 0.84 0.83 0.83 1199 weighted avg 0.84 0.83 0.83 1199✅ เรียนรู้เกี่ยวกับ Support-Vectors
เรามาติดตามเส้นทางจนถึงจุดสิ้นสุดกัน แม้ว่าการทดสอบก่อนหน้าจะค่อนข้างดี ลองใช้ 'Ensemble Classifiers' โดยเฉพาะ Random Forest และ AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)ผลลัพธ์ดีมาก โดยเฉพาะกับ Random Forest:
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
✅ เรียนรู้เกี่ยวกับ Ensemble Classifiers
วิธีนี้ของ Machine Learning "รวมการทำนายของตัวประมาณพื้นฐานหลายตัว" เพื่อปรับปรุงคุณภาพของโมเดล ในตัวอย่างของเรา เราใช้ Random Trees และ AdaBoost
-
Random Forest ซึ่งเป็นวิธีเฉลี่ย สร้าง 'ป่า' ของ 'ต้นไม้ตัดสินใจ' ที่มีความสุ่มเพื่อหลีกเลี่ยงการฟิตมากเกินไป พารามิเตอร์ n_estimators ถูกตั้งค่าจำนวนต้นไม้
-
AdaBoost ฝึกตัวจำแนกกับชุดข้อมูล จากนั้นฝึกสำเนาของตัวจำแนกนั้นกับชุดข้อมูลเดียวกัน โดยเน้นน้ำหนักของรายการที่จำแนกผิดและปรับการฟิตสำหรับตัวจำแนกถัดไปเพื่อแก้ไข
แต่ละเทคนิคเหล่านี้มีพารามิเตอร์จำนวนมากที่คุณสามารถปรับเปลี่ยน ค้นคว้าพารามิเตอร์เริ่มต้นของแต่ละเทคนิคและคิดว่าการปรับพารามิเตอร์เหล่านี้จะส่งผลต่อคุณภาพของโมเดลอย่างไร
ในบทเรียนเหล่านี้มีศัพท์มากมาย ดังนั้นใช้เวลาสักครู่ในการทบทวน รายชื่อนี้ ของคำศัพท์ที่มีประโยชน์!
ข้อจำกัดความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ Co-op Translator แม้เราจะพยายามอย่างดีที่สุดเพื่อความถูกต้อง โปรดทราบว่าการแปลด้วยระบบอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำได้ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่มีความสำคัญ ขอแนะนำให้ใช้บริการแปลโดยผู้เชี่ยวชาญมนุษย์ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดใด ๆ ที่เกิดจากการใช้การแปลนี้
