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/1-Introduction
leestott e4050807fb
🌐 Update translations via Co-op Translator
2 weeks ago
..
solution 🌐 Update translations via Co-op Translator 2 weeks ago
README.md 🌐 Update translations via Co-op Translator 2 weeks ago
assignment.md 🌐 Update translations via Co-op Translator 2 weeks ago
notebook.ipynb 🌐 Update translations via Co-op Translator 3 weeks ago

README.md

Εισαγωγή στην ταξινόμηση

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

μια πρέζα!

Γιορτάστε τις παν-ασιατικές κουζίνες σε αυτά τα μαθήματα! Εικόνα από Jen Looper

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

Εισαγωγή στην ταξινόμηση

🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα βίντεο: Ο John Guttag του MIT παρουσιάζει την ταξινόμηση

Θυμηθείτε:

  • Γραμμική παλινδρόμηση σας βοήθησε να προβλέψετε σχέσεις μεταξύ μεταβλητών και να κάνετε ακριβείς προβλέψεις για το πού θα βρισκόταν ένα νέο σημείο δεδομένων σε σχέση με αυτή τη γραμμή. Για παράδειγμα, θα μπορούσατε να προβλέψετε ποια θα είναι η τιμή μιας κολοκύθας τον Σεπτέμβριο σε σχέση με τον Δεκέμβριο.
  • Λογιστική παλινδρόμηση σας βοήθησε να ανακαλύψετε "δυαδικές κατηγορίες": σε αυτό το σημείο τιμής, είναι αυτή η κολοκύθα πορτοκαλί ή μη πορτοκαλί;

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

Προ-μάθημα κουίζ

Αυτό το μάθημα είναι διαθέσιμο σε R!

Εισαγωγή

Η ταξινόμηση είναι μία από τις θεμελιώδεις δραστηριότητες του ερευνητή μηχανικής μάθησης και του επιστήμονα δεδομένων. Από τη βασική ταξινόμηση μιας δυαδικής τιμής ("είναι αυτό το email ανεπιθύμητο ή όχι;"), μέχρι την πολύπλοκη ταξινόμηση και τμηματοποίηση εικόνων χρησιμοποιώντας υπολογιστική όραση, είναι πάντα χρήσιμο να μπορούμε να ταξινομούμε δεδομένα σε κατηγορίες και να θέτουμε ερωτήματα.

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

δυαδική vs. πολυκατηγορική ταξινόμηση

Δυαδικά vs. πολυκατηγορικά προβλήματα για αλγόριθμους ταξινόμησης. Γραφικό από Jen Looper

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

Προερχόμενη από στατιστική, η ταξινόμηση χρησιμοποιώντας κλασική μηχανική μάθηση χρησιμοποιεί χαρακτηριστικά, όπως smoker, weight, και age για να καθορίσει πιθανότητα ανάπτυξης Χ ασθένειας. Ως τεχνική εποπτευόμενης μάθησης παρόμοια με τις ασκήσεις παλινδρόμησης που κάνατε νωρίτερα, τα δεδομένα σας είναι ετικετοποιημένα και οι αλγόριθμοι ML χρησιμοποιούν αυτές τις ετικέτες για να ταξινομήσουν και να προβλέψουν κατηγορίες (ή 'χαρακτηριστικά') ενός συνόλου δεδομένων και να τα αναθέσουν σε μια ομάδα ή αποτέλεσμα.

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

Τρελά μυστηριώδη καλάθια

🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα βίντεο. Η όλη ιδέα της εκπομπής 'Chopped' είναι το 'μυστηριώδες καλάθι', όπου οι σεφ πρέπει να φτιάξουν ένα πιάτο από μια τυχαία επιλογή συστατικών. Σίγουρα ένα μοντέλο ML θα είχε βοηθήσει!

Γεια σου 'ταξινομητή'

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

Το Scikit-learn προσφέρει διάφορους αλγόριθμους για να ταξινομήσετε δεδομένα, ανάλογα με το είδος του προβλήματος που θέλετε να λύσετε. Στα επόμενα δύο μαθήματα, θα μάθετε για αρκετούς από αυτούς τους αλγόριθμους.

Άσκηση - καθαρίστε και ισορροπήστε τα δεδομένα σας

Η πρώτη εργασία που πρέπει να κάνετε, πριν ξεκινήσετε αυτό το έργο, είναι να καθαρίσετε και να ισορροπήσετε τα δεδομένα σας για να έχετε καλύτερα αποτελέσματα. Ξεκινήστε με το κενό αρχείο notebook.ipynb στον ριζικό φάκελο αυτού του φακέλου.

Το πρώτο πράγμα που πρέπει να εγκαταστήσετε είναι το imblearn. Αυτό είναι ένα πακέτο Scikit-learn που θα σας επιτρέψει να ισορροπήσετε καλύτερα τα δεδομένα (θα μάθετε περισσότερα για αυτή την εργασία σε λίγο).

  1. Για να εγκαταστήσετε το imblearn, εκτελέστε pip install, όπως παρακάτω:

    pip install imblearn
    
  2. Εισάγετε τα πακέτα που χρειάζεστε για να εισάγετε τα δεδομένα σας και να τα οπτικοποιήσετε, επίσης εισάγετε το SMOTE από το imblearn.

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    from imblearn.over_sampling import SMOTE
    

    Τώρα είστε έτοιμοι να εισάγετε τα δεδομένα στη συνέχεια.

  3. Η επόμενη εργασία θα είναι να εισάγετε τα δεδομένα:

    df  = pd.read_csv('../data/cuisines.csv')
    

    Χρησιμοποιώντας το read_csv() θα διαβάσετε το περιεχόμενο του αρχείου csv cusines.csv και θα το τοποθετήσετε στη μεταβλητή df.

  4. Ελέγξτε το σχήμα των δεδομένων:

    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   | 65         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 1   | 66         | indian  | 1      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 2   | 67         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 3   | 68         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 0      | 0        |
    | 4   | 69         | indian  | 0      | 0        | 0     | 0          | 0     | 0            | 0       | 0        | ... | 0       | 0           | 0          | 0                       | 0    | 0    | 0   | 0     | 1      | 0        |
    
  5. Πάρτε πληροφορίες για αυτά τα δεδομένα καλώντας το info():

    df.info()
    

    Η έξοδός σας μοιάζει με:

    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 2448 entries, 0 to 2447
    Columns: 385 entries, Unnamed: 0 to zucchini
    dtypes: int64(384), object(1)
    memory usage: 7.2+ MB
    

Άσκηση - μάθηση για τις κουζίνες

Τώρα η εργασία αρχίζει να γίνεται πιο ενδιαφέρουσα. Ας ανακαλύψουμε τη διανομή των δεδομένων, ανά κουζίνα.

  1. Οπτικοποιήστε τα δεδομένα ως μπάρες καλώντας το barh():

    df.cuisine.value_counts().plot.barh()
    

    διανομή δεδομένων κουζίνας

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

  2. Βρείτε πόσα δεδομένα είναι διαθέσιμα ανά κουζίνα και εκτυπώστε τα:

    thai_df = df[(df.cuisine == "thai")]
    japanese_df = df[(df.cuisine == "japanese")]
    chinese_df = df[(df.cuisine == "chinese")]
    indian_df = df[(df.cuisine == "indian")]
    korean_df = df[(df.cuisine == "korean")]
    
    print(f'thai df: {thai_df.shape}')
    print(f'japanese df: {japanese_df.shape}')
    print(f'chinese df: {chinese_df.shape}')
    print(f'indian df: {indian_df.shape}')
    print(f'korean df: {korean_df.shape}')
    

    η έξοδος μοιάζει με:

    thai df: (289, 385)
    japanese df: (320, 385)
    chinese df: (442, 385)
    indian df: (598, 385)
    korean df: (799, 385)
    

Ανακαλύπτοντας συστατικά

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

  1. Δημιουργήστε μια συνάρτηση create_ingredient() σε Python για να δημιουργήσετε ένα dataframe συστατικών. Αυτή η συνάρτηση θα ξεκινήσει με την αφαίρεση μιας μη χρήσιμης στήλης και θα ταξινομήσει τα συστατικά ανάλογα με την καταμέτρησή τους:

    def create_ingredient_df(df):
        ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')
        ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]
        ingredient_df = ingredient_df.sort_values(by='value', ascending=False,
        inplace=False)
        return ingredient_df
    

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

  2. Καλέστε το create_ingredient() και οπτικοποιήστε το καλώντας το barh():

    thai_ingredient_df = create_ingredient_df(thai_df)
    thai_ingredient_df.head(10).plot.barh()
    

    ταϊλανδέζικα

  3. Κάντε το ίδιο για τα δεδομένα της ιαπωνικής κουζίνας:

    japanese_ingredient_df = create_ingredient_df(japanese_df)
    japanese_ingredient_df.head(10).plot.barh()
    

    ιαπωνικά

  4. Τώρα για τα κινέζικα συστατικά:

    chinese_ingredient_df = create_ingredient_df(chinese_df)
    chinese_ingredient_df.head(10).plot.barh()
    

    κινέζικα

  5. Οπτικοποιήστε τα ινδικά συστατικά:

    indian_ingredient_df = create_ingredient_df(indian_df)
    indian_ingredient_df.head(10).plot.barh()
    

    ινδικά

  6. Τέλος, οπτικοποιήστε τα κορεάτικα συστατικά:

    korean_ingredient_df = create_ingredient_df(korean_df)
    korean_ingredient_df.head(10).plot.barh()
    

    κορεάτικα

  7. Τώρα, αφαιρέστε τα πιο κοινά συστατικά που δημιουργούν σύγχυση μεταξύ διαφορετικών κουζινών, καλώντας το drop():

    Όλοι αγαπούν το ρύζι, το σκόρδο και το τζίντζερ!

    feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)
    labels_df = df.cuisine #.unique()
    feature_df.head()
    

Ισορροπήστε το σύνολο δεδομένων

Τώρα που έχετε καθαρίσει τα δεδομένα, χρησιμοποιήστε το SMOTE - "Τεχνική Συνθετικής Υπερδειγματοληψίας Μειονοτήτων" - για να τα ισορροπήσετε.

  1. Καλέστε το fit_resample(), αυτή η στρατηγική δημιουργεί νέα δείγματα μέσω παρεμβολής.

    oversample = SMOTE()
    transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
    

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

  2. Τώρα μπορείτε να ελέγξετε τους αριθμούς των ετικετών ανά συστατικό:

    print(f'new label count: {transformed_label_df.value_counts()}')
    print(f'old label count: {df.cuisine.value_counts()}')
    

    Η έξοδός σας μοιάζει με:

    new label count: korean      799
    chinese     799
    indian      799
    japanese    799
    thai        799
    Name: cuisine, dtype: int64
    old label count: korean      799
    indian      598
    chinese     442
    japanese    320
    thai        289
    Name: cuisine, dtype: int64
    

    Τα δεδομένα είναι καθαρά, ισορροπημένα και πολύ νόστιμα!

  3. Το τελευταίο βήμα είναι να αποθηκεύσετε τα ισορροπημένα δεδομένα σας, συμπεριλαμβανομένων των ετικετών και των χαρακτηριστικών, σε ένα νέο dataframe που μπορεί να εξαχθεί σε ένα αρχείο:

    transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
    
  4. Μπορείτε να ρίξετε μια τελευταία ματιά στα δεδομένα χρησιμοποιώντας transformed_df.head() και transformed_df.info(). Αποθηκεύστε ένα αντίγραφο αυτών των δεδομένων για χρήση σε μελλοντικά μαθήματα:

    transformed_df.head()
    transformed_df.info()
    transformed_df.to_csv("../data/cleaned_cuisines.csv")
    

    Αυτό το νέο CSV μπορεί τώρα να βρεθεί στον ριζικό φάκελο δεδομένων.


🚀Πρόκληση

Αυτό το πρόγραμμα σπουδών περιέχει αρκετά ενδιαφέροντα σύνολα δεδομένων. Ψάξτε στους φακέλους data και δείτε αν κάποιο περιέχει σύνολα δεδομένων που θα ήταν κατάλληλα για δυαδική ή πολυκατηγορική ταξινόμηση. Τι ερωτήσεις θα θέτατε σε αυτό το σύνολο δεδομένων;

Μετά το μάθημα κουίζ

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

Εξερευνήστε το API του SMOTE. Για ποιες περιπτώσεις χρήσης είναι καλύτερα να χρησιμοποιηθεί; Ποια προβλήματα λύνει;

Εργασία

Εξερευνήστε μεθόδους ταξινόμησης


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