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/el/4-Classification/2-Classifiers-1
localizeflow[bot] 2b2e986966
chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)
3 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 5 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) 3 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 5 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 10 months ago

README.md

Ταξινομητές Κουζίνας 1

Σε αυτό το μάθημα, θα χρησιμοποιήσετε το σύνολο δεδομένων που αποθηκεύσατε από το προηγούμενο μάθημα, γεμάτο με ισορροπημένα, καθαρά δεδομένα σχετικά με τις κουζίνες.

Θα χρησιμοποιήσετε αυτό το σύνολο δεδομένων με διάφορους ταξινομητές για να προβλέψετε μια συγκεκριμένη εθνική κουζίνα βασισμένη σε μια ομάδα συστατικών. Καθώς το κάνετε, θα μάθετε περισσότερα για μερικούς από τους τρόπους με τους οποίους οι αλγόριθμοι μπορούν να αξιοποιηθούν για εργασίες ταξινόμησης.

Προ-διάλεξη quiz

Προετοιμασία

Υποθέτοντας ότι ολοκληρώσατε το Μάθημα 1, βεβαιωθείτε ότι υπάρχει ένα αρχείο cleaned_cuisines.csv στο ριζικό φάκελο /data για αυτά τα τέσσερα μαθήματα.

Άσκηση - πρόβλεψη εθνικής κουζίνας

  1. Εργαζόμενοι στον φάκελο notebook.ipynb αυτού του μαθήματος, εισάγετε αυτό το αρχείο μαζί με τη βιβλιοθήκη Pandas:

    import pandas as pd
    cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv")
    cuisines_df.head()
    

    Τα δεδομένα φαίνονται έτσι:

Unnamed: 0 cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac ... whiskey white_bread white_wine whole_grain_wheat_flour wine wood yam yeast yogurt zucchini
0 0 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 1 indian 1 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 2 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 3 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 4 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 1 0
  1. Τώρα, εισάγετε μερικές ακόμα βιβλιοθήκες:

    from sklearn.linear_model import LogisticRegression
    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
    from sklearn.svm import SVC
    import numpy as np
    
  2. Χωρίστε τις συντεταγμένες X και y σε δύο πλαίσια δεδομένων για εκπαίδευση. Το cuisine μπορεί να είναι το πλαίσιο δεδομένων των ετικετών:

    cuisines_label_df = cuisines_df['cuisine']
    cuisines_label_df.head()
    

    Θα μοιάζει έτσι:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. Αφαιρέστε τη στήλη Unnamed: 0 και τη στήλη cuisine, χρησιμοποιώντας το drop(). Αποθηκεύστε τα υπόλοιπα δεδομένα ως χαρακτηριστικά που μπορούν να εκπαιδευτούν:

    cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)
    cuisines_feature_df.head()
    

    Τα χαρακτηριστικά σας μοιάζουν έτσι:

almond angelica anise anise_seed apple apple_brandy apricot armagnac artemisia artichoke ... whiskey white_bread white_wine whole_grain_wheat_flour wine wood yam yeast yogurt zucchini
0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 1 0

Τώρα είστε έτοιμοι να εκπαιδεύσετε το μοντέλο σας!

Επιλογή του ταξινομητή σας

Τώρα που τα δεδομένα σας είναι καθαρά και έτοιμα για εκπαίδευση, πρέπει να αποφασίσετε ποιος αλγόριθμος να χρησιμοποιηθεί για την εργασία.

Το Scikit-learn ομαδοποιεί την ταξινόμηση κάτω από την Επιβλεπόμενη Μάθηση, και σε αυτή την κατηγορία θα βρείτε πολλούς τρόπους ταξινόμησης. Η ποικιλία είναι αρκετά μπερδεμένη με την πρώτη ματιά. Οι ακόλουθες μέθοδοι περιλαμβάνουν τεχνικές ταξινόμησης:

  • Γραμμικά Μοντέλα
  • Support Vector Machines
  • Στοχαστική Κατάβαση Κλίσης
  • Κοντινότεροι Γείτονες
  • Gaussian Processes
  • Δέντρα Απόφασης
  • Μέθοδοι συνόλου (voting Classifier)
  • Αλγόριθμοι πολυκατηγορίας και πολλαπλής εξόδου (ταξινόμηση πολυκατηγορίας και πολυετικετών, πολυκατηγορία-πολλαπλή έξοδος)

Μπορείτε επίσης να χρησιμοποιήσετε νευρωνικά δίκτυα για ταξινόμηση δεδομένων, αλλά αυτό είναι εκτός του πεδίου αυτού του μαθήματος.

Ποιον ταξινομητή να επιλέξετε;

Λοιπόν, ποιον ταξινομητή πρέπει να επιλέξετε; Συχνά, το να δοκιμάσετε αρκετούς και να ψάξετε για ένα καλό αποτέλεσμα είναι ένας τρόπος δοκιμής. Το Scikit-learn προσφέρει μια παράλληλη σύγκριση σε δημιουργημένο σύνολο δεδομένων, συγκρίνοντας τους KNeighbors, SVC με δύο τρόπους, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB και QuadraticDiscrinationAnalysis, δείχνοντας τα αποτελέσματα οπτικοποιημένα:

σύγκριση ταξινομητών

Διαγράμματα που δημιουργήθηκαν στην τεκμηρίωση του Scikit-learn

Το AutoML λύνει αυτό το πρόβλημα επιδέξια εκτελώντας αυτές τις συγκρίσεις στο cloud, επιτρέποντάς σας να επιλέξετε τον καλύτερο αλγόριθμο για τα δεδομένα σας. Δοκιμάστε το εδώ

Μια καλύτερη προσέγγιση

Μια καλύτερη μέθοδος από το άγριο μάντεμα είναι να ακολουθήσετε τις ιδέες αυτού του ληξιαρίου ML Cheat sheet που μπορείτε να κατεβάσετε. Εδώ, ανακαλύπτουμε ότι για το πρόβλημα πολυκατηγορίας που έχουμε, υπάρχουν μερικές επιλογές:

cheatsheet για προβλήματα πολυκατηγορίας

Μια ενότητα του Algorithm Cheat Sheet της Microsoft, που περιγράφει τις επιλογές πολυκατηγορικής ταξινόμησης

Κατεβάστε αυτό το cheat sheet, τυπώστε το και κρεμάστε το στον τοίχο σας!

Λογική σκέψη

Ας δούμε αν μπορούμε να σκεφτούμε διαφορετικές προσεγγίσεις με βάση τους περιορισμούς που έχουμε:

  • Τα νευρωνικά δίκτυα είναι πολύ βαριά. Δεδομένου του καθαρού, αλλά μικρού συνόλου δεδομένων, και του γεγονότος ότι εκτελούμε την εκπαίδευση τοπικά μέσω notebooks, τα νευρωνικά δίκτυα είναι πολύ βαριά για αυτή την εργασία.
  • Δεν χρησιμοποιούμε ταξινομητή δύο κατηγοριών. Δεν χρησιμοποιούμε ταξινομητή δύο κατηγοριών, οπότε αποκλείεται το one-vs-all.
  • Ένα δέντρο απόφασης ή λογιστική παλινδρόμηση μπορεί να δουλέψει. Ένα δέντρο απόφασης μπορεί να λειτουργήσει, ή λογιστική παλινδρόμηση για δεδομένα πολυκατηγορίας.
  • Τα πολυκατηγορικά ενισχυμένα δέντρα απόφασης επιλύουν διαφορετικό πρόβλημα. Το πολυκατηγορικό ενισχυμένο δέντρο απόφασης είναι πιο κατάλληλο για μη παραμετρικά καθήκοντα, π.χ. καθήκοντα που σχεδιάζονται για κατασκευή κατατάξεων, οπότε δεν είναι χρήσιμο για εμάς.

Χρήση Scikit-learn

Θα χρησιμοποιήσουμε το Scikit-learn για να αναλύσουμε τα δεδομένα μας. Ωστόσο, υπάρχουν πολλοί τρόποι να χρησιμοποιήσετε τη λογιστική παλινδρόμηση στο Scikit-learn. Ρίξτε μια ματιά στις παραμέτρους που πρέπει να περάσετε.

Ουσιαστικά υπάρχουν δύο σημαντικές παράμετροι - multi_class και solver - που πρέπει να καθορίσουμε όταν ζητάμε από το Scikit-learn να εκτελέσει λογιστική παλινδρόμηση. Η τιμή multi_class επιβάλλει μια συγκεκριμένη συμπεριφορά. Η τιμή του solver είναι ποιος αλγόριθμος θα χρησιμοποιηθεί. Δεν μπορούν όλοι οι solvers να συνδυαστούν με όλες τις τιμές multi_class.

Σύμφωνα με την τεκμηρίωση, στην περίπτωση πολυκατηγορίας, ο αλγόριθμος εκπαίδευσης:

  • Χρησιμοποιεί το σχήμα one-vs-rest (OvR), αν η επιλογή multi_class είναι ορισμένη σε ovr
  • Χρησιμοποιεί την απώλεια cross-entropy, αν η επιλογή multi_class είναι ορισμένη σε multinomial. (Προς το παρόν η επιλογή multinomial υποστηρίζεται μόνο από τους λύτες lbfgs, sag, saga και newton-cg)."

🎓 Το 'σχήμα' μπορεί να είναι είτε 'ovr' (one-vs-rest) είτε 'multinomial'. Επειδή η λογιστική παλινδρόμηση είναι σχεδιασμένη κυρίως για δυαδική ταξινόμηση, αυτά τα σχήματα της επιτρέπουν να χειριστεί καλύτερα τα καθήκοντα πολυκατηγορικής ταξινόμησης. πηγή

🎓 Ο 'λύτης' ορίζεται ως "ο αλγόριθμος που χρησιμοποιείται στο πρόβλημα βελτιστοποίησης". πηγή.

Το Scikit-learn προσφέρει αυτόν τον πίνακα για να εξηγήσει πώς οι λύτες χειρίζονται διαφορετικές προκλήσεις που παρουσιάζονται από διαφορετικούς τύπους δομών δεδομένων:

λύτες

Άσκηση - διαχωρισμός δεδομένων

Μπορούμε να εστιάσουμε στη λογιστική παλινδρόμηση για την πρώτη μας προσπάθεια εκπαίδευσης αφού μάθατε πρόσφατα σχετικά με αυτή σε προηγούμενο μάθημα.
Διαχωρίστε τα δεδομένα σας σε ομάδες εκπαίδευσης και δοκιμών καλώντας το train_test_split():

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

Άσκηση - εφαρμόστε λογιστική παλινδρόμηση

Επειδή χρησιμοποιείτε την περίπτωση πολυκατηγορίας, πρέπει να επιλέξετε ποιο σχήμα θα χρησιμοποιήσετε και ποιο λύτη θα ορίσετε. Χρησιμοποιήστε το LogisticRegression με ρύθμιση πολυκατηγορίας και τον liblinear λύτη για εκπαίδευση.

  1. Δημιουργήστε ένα logistic regression με multi_class ορισμένο σε ovr και τον λύτη σε liblinear:

    lr = LogisticRegression(multi_class='ovr',solver='liblinear')
    model = lr.fit(X_train, np.ravel(y_train))
    
    accuracy = model.score(X_test, y_test)
    print ("Accuracy is {}".format(accuracy))
    

    Δοκιμάστε έναν διαφορετικό λύτη όπως lbfgs, που συχνά ορίζεται ως προεπιλογή

    Σημείωση, χρησιμοποιήστε τη συνάρτηση ravel της Pandas για να ισιώσετε τα δεδομένα σας όταν χρειάζεται.

    Η ακρίβεια είναι καλή και πάνω από 80%!

  2. Μπορείτε να δείτε αυτό το μοντέλο σε δράση δοκιμάζοντας μια γραμμή δεδομένων (#50):

    print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')
    print(f'cuisine: {y_test.iloc[50]}')
    

    Το αποτέλεσμα τυπώνεται:

    ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')
    cuisine: indian
    

    Δοκιμάστε διαφορετικό αριθμό γραμμής και ελέγξτε τα αποτελέσματα

  3. Βαθύτερα, μπορείτε να ελέγξετε την ακρίβεια αυτής της πρόβλεψης:

    test= X_test.iloc[50].values.reshape(-1, 1).T
    proba = model.predict_proba(test)
    classes = model.classes_
    resultdf = pd.DataFrame(data=proba, columns=classes)
    
    topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
    topPrediction.head()
    

    Το αποτέλεσμα εκτυπώνεται - Η ινδική κουζίνα είναι η καλύτερη εικασία, με καλή πιθανότητα:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    Μπορείτε να εξηγήσετε γιατί το μοντέλο είναι αρκετά σίγουρο ότι αυτή είναι μια ινδική κουζίνα;

  4. Πάρτε περισσότερες λεπτομέρειες εκτυπώνοντας μια αναφορά ταξινόμησης, όπως κάνατε στα μαθήματα παλινδρόμησης:

    y_pred = model.predict(X_test)
    print(classification_report(y_test,y_pred))
    
    precision recall f1-score support
    chinese 0.73 0.71 0.72 229
    indian 0.91 0.93 0.92 254
    japanese 0.70 0.75 0.72 220
    korean 0.86 0.76 0.81 242
    thai 0.79 0.85 0.82 254
    accuracy 0.80 1199
    macro avg 0.80 0.80 0.80 1199
    weighted avg 0.80 0.80 0.80 1199

🚀Πρόκληση

Σε αυτό το μάθημα, χρησιμοποιήσατε τα καθαρισμένα σας δεδομένα για να δημιουργήσετε ένα μοντέλο μηχανικής μάθησης που μπορεί να προβλέψει μια εθνική κουζίνα βάσει μιας σειράς συστατικών. Αφιερώστε λίγο χρόνο για να διαβάσετε τις πολλές επιλογές που παρέχει το Scikit-learn για την ταξινόμηση δεδομένων. Εμβαθύνετε στην έννοια του 'solver' για να κατανοήσετε τι συμβαίνει πίσω από τις σκηνές.

Μετα-διάλεξη quiz

Ανασκόπηση & Αυτομελέτη

Εμβαθύνετε λίγο περισσότερο στα μαθηματικά πίσω από την λογιστική παλινδρόμηση σε αυτό το μάθημα

Ανάθεση

Μελετήστε τους λύτες


Αποποίηση Ευθυνών:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Ενώ επιδιώκουμε την ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το αρχικό έγγραφο στην μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρεξηγήσεις ή λανθασμένες ερμηνείες προκύψουν από τη χρήση αυτής της μετάφρασης.