Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 17.5 KB

File metadata and controls

242 lines (163 loc) · 17.5 KB

ตัวจำแนกประเภทอาหาร 2

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

ความรู้เบื้องต้น

เราสมมติว่าคุณได้ผ่านบทเรียนก่อนหน้าแล้วและมีชุดข้อมูลที่ทำความสะอาดแล้วในโฟลเดอร์ data ของคุณชื่อ cleaned_cuisines.csv ซึ่งอยู่ในโฟลเดอร์หลักของบทเรียน 4 บทนี้

การเตรียมตัว

เราได้โหลดไฟล์ notebook.ipynb ของคุณพร้อมชุดข้อมูลที่ทำความสะอาดแล้ว และได้แบ่งออกเป็นกรอบข้อมูล X และ y พร้อมสำหรับกระบวนการสร้างโมเดล

แผนที่การจำแนกประเภท

ก่อนหน้านี้ คุณได้เรียนรู้เกี่ยวกับตัวเลือกต่าง ๆ ที่มีเมื่อจำแนกข้อมูลโดยใช้ชีทช่วยจำของ Microsoft แล้ว Scikit-learn มีชีทช่วยจำที่คล้ายกัน แต่มีรายละเอียดมากกว่า ซึ่งสามารถช่วยจำกัดตัวประมาณ (ซึ่งเป็นอีกคำหนึ่งของตัวจำแนก) ได้มากขึ้น:

ML Map from Scikit-learn

เคล็ดลับ: เยี่ยมชมแผนที่นี้ออนไลน์ และคลิกตามเส้นทางเพื่ออ่านเอกสารประกอบ

แผนงาน

แผนที่นี้มีประโยชน์มากเมื่อคุณเข้าใจข้อมูลของคุณอย่างชัดเจน เพราะคุณสามารถ 'เดิน' ตามเส้นทางเพื่อตัดสินใจได้:

  • เรามีตัวอย่าง >50 ตัวอย่าง
  • เราต้องการทำนายหมวดหมู่
  • เรามีข้อมูลที่ติดป้ายกำกับแล้ว
  • เรามีตัวอย่างไม่เกิน 100K ตัวอย่าง
  • ✨ เราสามารถเลือก Linear SVC
  • ถ้าไม่ได้ผล เนื่องจากเรามีข้อมูลเชิงตัวเลข
    • เราสามารถลองใช้ ✨ KNeighbors Classifier
      • ถ้าไม่ได้ผล ลองใช้ ✨ SVC และ ✨ Ensemble Classifiers

นี่คือเส้นทางที่เป็นประโยชน์มากให้ติดตาม

แบบฝึกหัด - แยกข้อมูล

ตามเส้นทางนี้ เราควรเริ่มต้นด้วยการนำเข้าบางไลบรารีที่จำเป็นต้องใช้

  1. นำเข้าไลบรารีที่จำเป็น:

    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
  2. แบ่งข้อมูลการฝึกและทดสอบของคุณ:

    X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)

ตัวจำแนก Linear SVC

Support-Vector Clustering (SVC) เป็นส่วนหนึ่งของตระกูล Support-Vector Machines ของเทคนิค ML (เรียนรู้เพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ด้านล่าง) ในวิธีนี้ คุณสามารถเลือก 'kernel' เพื่อกำหนดวิธีจัดกลุ่มป้ายกำกับ พารามิเตอร์ 'C' หมายถึง 'regularization' ที่ควบคุมอิทธิพลของพารามิเตอร์ kernel สามารถเป็นหนึ่งใน หลายตัว; ที่นี่เรากำหนดเป็น 'linear' เพื่อให้ใช้ประโยชน์จาก Linear SVC ได้เต็มที่ ค่า probability ตั้งเป็น 'false' โดยค่าเริ่มต้น; ที่นี่เราตั้งเป็น 'true' เพื่อรวบรวมค่าประมาณความน่าจะเป็น เราตั้งค่า random state เป็น '0' เพื่อสุ่มสับเปลี่ยนข้อมูลเพื่อให้ได้ความน่าจะเป็น

แบบฝึกหัด - ใช้ Linear SVC

เริ่มต้นโดยการสร้างอาร์เรย์ของตัวจำแนก คุณจะเพิ่มไปยังอาร์เรย์นี้อย่างต่อเนื่องในขณะที่เราทดสอบ

  1. เริ่มต้นด้วย Linear SVC:

    C = 10
    # สร้างตัวจำแนกประเภทที่แตกต่างกัน.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
  2. ฝึกโมเดลโดยใช้ 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

K-Neighbors เป็นส่วนหนึ่งของตระกูล "neighbors" ของวิธี ML ซึ่งสามารถใช้ได้ทั้งการเรียนรู้แบบมีผู้สอนและไม่มีผู้สอน วิธีนี้จะกำหนดจำนวนจุดล่วงหน้า และรวบรวมข้อมูลรอบจุดเหล่านี้เพื่อทำนายป้ายกำกับทั่วไปสำหรับข้อมูล

แบบฝึกหัด - ใช้ตัวจำแนก K-Neighbors

ตัวจำแนกก่อนหน้านี้ดีและทำงานได้ดีกับข้อมูล แต่บางทีเราอาจได้ความแม่นยำที่ดีกว่า ลองใช้ตัวจำแนก K-Neighbors

  1. เพิ่มบรรทัดลงในอาร์เรย์ตัวจำแนกของคุณ (เพิ่มเครื่องหมายจุลภาคหลังรายการ 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 เป็นส่วนหนึ่งของตระกูล Support-Vector Machine ของวิธี ML ที่ใช้สำหรับงานจำแนกประเภทและการถดถอย SVMs "แมปตัวอย่างการฝึกไปยังจุดในอวกาศ" เพื่อเพิ่มระยะห่างระหว่างสองหมวดหมู่ ข้อมูลต่อไปจะถูกแมปเข้าสู่อวกาศนี้เพื่อให้สามารถทำนายหมวดหมู่ได้

แบบฝึกหัด - ใช้ตัวจำแนก Support Vector

ลองเพิ่มความแม่นยำเล็กน้อยด้วยตัวจำแนก Support Vector

  1. เพิ่มเครื่องหมายจุลภาคหลังรายการ 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

เรามาติดตามเส้นทางจนถึงจุดสิ้นสุดกัน แม้ว่าการทดสอบก่อนหน้าจะค่อนข้างดี ลองใช้ '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 แม้เราจะพยายามอย่างดีที่สุดเพื่อความถูกต้อง โปรดทราบว่าการแปลด้วยระบบอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำได้ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่มีความสำคัญ ขอแนะนำให้ใช้บริการแปลโดยผู้เชี่ยวชาญมนุษย์ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดใด ๆ ที่เกิดจากการใช้การแปลนี้