You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/th/4-Classification/3-Classifiers-2/README.md

18 KiB

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

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

แบบทดสอบก่อนเรียน

ความรู้พื้นฐานที่ต้องมี

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

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

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

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

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

แผนที่ ML จาก 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_feature_df, cuisines_label_df, test_size=0.3)
    

ตัวจำแนก Linear SVC

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

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

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

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

    C = 10
    # Create different classifiers.
    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 เป็นส่วนหนึ่งของกลุ่มวิธี ML ในตระกูล "neighbors" ซึ่งสามารถใช้ได้ทั้งการเรียนรู้แบบมีผู้สอนและไม่มีผู้สอน ในวิธีนี้ จะมีการสร้างจุดที่กำหนดไว้ล่วงหน้า และรวบรวมข้อมูลรอบ ๆ จุดเหล่านี้เพื่อให้สามารถทำนายป้ายกำกับทั่วไปสำหรับข้อมูลได้

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

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


🚀ความท้าทาย

เทคนิคแต่ละอย่างมีพารามิเตอร์จำนวนมากที่คุณสามารถปรับแต่งได้ ศึกษาพารามิเตอร์เริ่มต้นของแต่ละเทคนิค และคิดเกี่ยวกับผลกระทบของการปรับแต่งพารามิเตอร์เหล่านี้ต่อคุณภาพของโมเดล

แบบทดสอบหลังเรียน

ทบทวนและศึกษาด้วยตนเอง

มีคำศัพท์เฉพาะทางมากมายในบทเรียนเหล่านี้ ดังนั้นใช้เวลาสักครู่เพื่อทบทวน รายการนี้ ของคำศัพท์ที่มีประโยชน์!

งานที่ได้รับมอบหมาย

Parameter play


ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้