Τρόπος εκτέλεσης κωδικοποίησης One-Hot για μεταβλητές πολλαπλών κατηγοριών

Κόμβος πηγής: 841101

Σε αυτό το άρθρο, θα μάθουμε πώς μπορούμε να χειριζόμαστε μεταβλητές πολλαπλών κατηγοριών χρησιμοποιώντας την τεχνική Feature Engineering One Hot Encoding.

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

Μηχανική χαρακτηριστικών

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

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

  • Συνεχή δεδομένα
  • Κατηγοριακά χαρακτηριστικά
  • Λείπουν τιμές
  • Ομαλοποίηση
  • Ημερομηνίες και ώρα

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

Υπάρχουν πολλές τεχνικές για το χειρισμό των κατηγορηματικών μεταβλητών, μερικές είναι:

  • Κωδικοποίηση ετικέτας ή Τακτική κωδικοποίηση
  • Μια καυτή κωδικοποίηση
  • Εικονική κωδικοποίηση
  • Κωδικοποίηση εφέ
  • Δυαδική κωδικοποίηση
  • Κωδικοποίηση της Βασιλείας
  • Κωδικοποίηση κατακερματισμού
  • Κωδικοποίηση στόχου

Έτσι, εδώ χειριζόμαστε κατηγορηματικά χαρακτηριστικά από το One Hot Encoding, επομένως πρώτα από όλα θα συζητήσουμε το One Hot Encoding.

Μια καυτή κωδικοποίηση

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

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

για παράδειγμα τα δεδομένα για το φύλο είναι σε μορφή 'αρσενικός' και 'θηλυκός'.

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

Η κωδικοποίηση One-hot μπορεί να εφαρμοστεί στην αναπαράσταση ακέραιου αριθμού. Εδώ αφαιρείται η κωδικοποιημένη μεταβλητή ακέραιος και προστίθεται μια νέα δυαδική μεταβλητή για κάθε μοναδική ακέραια τιμή.

Για παράδειγμα, κωδικοποιούμε τη μεταβλητή χρωμάτων,

Κόκκινο χρώμα  Μπλε χρώμα
0 1
1 0
0 1

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

Σύνολο δεδομένων

Εδώ θα χρησιμοποιήσουμε το σύνολο δεδομένων του house_price που χρησιμοποιείται για την πρόβλεψη της τιμής του σπιτιού ανάλογα με το μέγεθος της περιοχής.

Εάν θέλετε να κατεβάσετε το σύνολο δεδομένων πρόβλεψης τιμών του σπιτιού, κάντε κλικ στο κουμπί εδώ.

Εισαγωγή Ενοτήτων

Τώρα, πρέπει να εισαγάγουμε σημαντικές ενότητες από την python που θα χρησιμοποιηθούν για την κωδικοποίηση one-hot

# εισαγωγή panda εισαγωγή panda ως pd # εισαγωγή numpy εισαγωγή numpy ως np # εισαγωγή OneHotEncoder από το sklearn.preprocessing import OneHotEncoder()

Εδώ, χρησιμοποιούμε panda που χρησιμοποιούνται για ανάλυση δεδομένων, NumPyused για πίνακες n-διαστάσεων, και από το sklearn, θα χρησιμοποιήσουμε έναν σημαντικό Κωδικοποιητή κατηγορίας One Hot για την κατηγορική κωδικοποίηση.

Τώρα πρέπει να διαβάσουμε αυτά τα δεδομένα χρησιμοποιώντας Python.

Ανάγνωση δεδομένων δεδομένων ανάγνωσης

Γενικά, το σύνολο δεδομένων έχει τη μορφή CSV και το σύνολο δεδομένων που χρησιμοποιούμε έχει επίσης τη μορφή CSV. Για την ανάγνωση του αρχείου CSV θα χρησιμοποιήσουμε τη συνάρτηση pandas read_csv(). Δες παρακάτω:

# Ανάγνωση DATASET DF = PD.READ_CSV ('house_price.csv') df.head ()

παραγωγή:-

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

για την κατάτμηση κατηγορικών μεταβλητών από δεδομένα πρέπει να ελέγξουμε πόσα χαρακτηριστικά έχουν κατηγορικές τιμές.

Έλεγχος κατηγορικών τιμών

Για τον έλεγχο των τιμών χρησιμοποιούμε τη λειτουργία PANDAS SELECT_DTYPES που χρησιμοποιείται για την επιλογή των τύπων δεδομένων μεταβλητής.

# Έλεγχος Χαρακτηριστικά CAT = DF.Select_dtypes (περιλαμβάνει = 'O'). Keys () # Display Variabels Cat

παραγωγή:-

 

Τώρα πρέπει να αφήσουμε αυτές τις αριθμητικές στήλες από το σύνολο δεδομένων και θα χρησιμοποιήσουμε αυτήν την κατηγορική μεταβλητή για τη χρήση μας. Χρησιμοποιούμε μόνο 3-4 κατηγορικές στήλες από το σύνολο δεδομένων για την εφαρμογή μιας κωδικοποίησης ενός καυτό.

Δημιουργία νέου DataFrame

Τώρα, για τη χρήση κατηγορικών μεταβλητών θα δημιουργήσουμε ένα νέο πλαίσιο δεδομένων επιλεγμένων κατηγορικών στηλών.

# Δημιουργία νέων στηλών ρύθμισης DF # Χρησιμοποιούμε το new_df = pd.read_csv ('house_price.csv', usecols = ['Γειτονιά','Εξωτερικό 1ο, 'Εξωτερικό 2ο']) new_df.head()

παραγωγή:-

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

Εύρεση μοναδικών τιμών

Για την εύρεση μοναδικών τιμών θα χρησιμοποιήσουμε τη λειτουργία Pandas Unique ().

# Μοναδικές τιμές σε κάθε στήλη για το x στο new_df.columns: #prinfting μοναδικές τιμές εκτύπωση (x, ':', len (new_df [x] .unique ()))

παραγωγή:-

Γειτονιά: 25
Εξωτερικό 1ος: 15
Εξωτερικό 2ος: 16

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

Τεχνική για πολλαπλές κατηγορίες μεταβλητών

Η τεχνική είναι ότι θα περιορίσουμε μια καυτή κωδικοποίηση στις 10 πιο συχνές ετικέτες της μεταβλητής. Αυτό σημαίνει ότι θα κάναμε μία δυαδική μεταβλητή μόνο για καθεμία από τις 10 πιο συχνές ετικέτες, αυτό ισοδυναμεί με την ομαδοποίηση όλων των άλλων ετικετών σε μια νέα κατηγορία, η οποία σε αυτήν την περίπτωση θα απορριφθεί. Έτσι, οι 10 νέες εικονικές μεταβλητές δείχνουν εάν υπάρχει μία από τις 10 πιο συχνές ετικέτες 1 ή όχι τότε 0 για μια συγκεκριμένη παρατήρηση.

Οι πιο συχνές μεταβλητές

Εδώ θα επιλέξουμε τις 20 πιο συχνές μεταβλητές.

Ας υποθέσουμε ότι παίρνουμε μια κατηγορική μεταβλητή Γειτονιά.

# εύρεση των κορυφαίων 20 κατηγοριών new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

παραγωγή:

Όταν δείτε σε αυτήν την εικόνα εξόδου θα παρατηρήσετε ότι το ΟΝΟΜΑΤΑ Η ετικέτα επαναλαμβάνει 225 φορές στις στήλες της γειτονιάς και μειώνουμε αυτόν τον αριθμό.

Έτσι, πήραμε τα κορυφαία 10 αποτελέσματα από την κορυφή και μετατρέπουμε αυτό το αποτέλεσμα των κορυφαίων 10 σε κωδικοποίηση μίας κλήσης και οι αριστερές ετικέτες μετατρέπονται σε μηδέν.

παραγωγή:-

 

Λίστα με τις πιο συχνές κατηγορικές μεταβλητές

# Κάντε λίστα με τις κορυφαίες 10 μεταβλητές top_10 = [x για x στο new_df.neighborhood.value_counts ().

παραγωγή:-

['Ονόματα',
«Collgcr»,
'Παλαιά πόλη',
«Έντουαρντς»,
«Somerst»,
'Μονάδα μαγνητοκινητικής δύναμης',
«NridgHt»,
«Σόγιερ»,
«NWAmes»,
«SawyerW»]

Υπάρχουν οι κορυφαίες 10 κατηγορηματικές ετικέτες στη στήλη της γειτονιάς.

Κάντε δυαδικό

Τώρα, πρέπει να φτιάξουμε τις 10 δυαδικές μεταβλητές των top_10 ετικετών:

# δημιουργία δυαδικών ετικετών

για ετικέτα στο top_10:

new_df = np.where (new_df ['γειτονιά'] == Ετικέτα, 1,0)

new_df[['Γειτονιά']+top_10]


παραγωγή:-

ΟΝΟΜΑΤΑ CollgCr Παλαιά πόλη Edwards Σόμερστ Μονάδα μαγνητοκινητικής δύναμης NridgHt Sawyer NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 Μίτσελ 0 0 0 0 0 0 0 0 0 0
6 Σόμερστ 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Παλαιά πόλη 0 0 1 0 0 0 0 0 0 0
9 Βραχίονα 0 0 0 0 0 0 0 0 0 0
10 Sawyer 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Μπορείτε να δείτε πώς οι ετικέτες top_10 μετατρέπονται τώρα σε δυαδική μορφή.

Ας πάρουμε ένα παράδειγμα, δείτε στον πίνακα πού 1 ευρετήριο Veenker που δεν ανήκε στην ετικέτα top_10 κατηγοριών μας, επομένως θα έχει ως αποτέλεσμα 0 όλες τις στήλες.

Τώρα θα το κάνουμε για όλες τις κατηγορικές μεταβλητές που έχουμε επιλέξει παραπάνω.

Όλες οι επιλεγμένες μεταβλητές στο OneHotEncoding

# για όλες τις κατηγορίες μεταβλητών επιλέξαμε def top_x(df2,variable,top_x_labels): για ετικέτα σε top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read the data again data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Γειτονιά','Exterior1st','Exterior2nd']) #encode Neighborhood στις 10 πιο συχνές κατηγορίες top_x(data, 'Γειτονιά', top_10) # Εμφάνιση δεδομένων δεδομένων.head ()

Παραγωγή:-

Τώρα, εδώ εφαρμόζουμε την κωδικοποίηση one-hot σε όλες τις μεταβλητές πολλαπλών κατηγοριών.

Τώρα θα δούμε τα πλεονεκτήματα και τα μειονεκτήματα μιας θερμής κωδικοποίησης για πολλαπλές μεταβλητές.

Πλεονεκτήματα

  • Εύκολη εφαρμογή
  • Δεν απαιτεί πολύ χρόνο για μεταβλητή εξερεύνηση
  • Δεν επεκτείνει μαζικά τον χώρο χαρακτηριστικών.

Μειονεκτήματα

  • Δεν προσθέτει πληροφορίες που μπορεί να κάνουν τη μεταβλητή πιο προγνωστική
  • Μην διατηρείτε τις πληροφορίες των αγνοούμενων μεταβλητών.

Τέλειες σημειώσεις

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

Συνδεθείτε μαζί μου στο Linkedin: Προφίλ ⬇️

Διαβάστε τα άλλα άρθρα μου: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Σας ευχαριστώ 😎

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του Συντάκτη.

Μπορείτε επίσης να διαβάσετε αυτό το άρθρο στην εφαρμογή μας για κινητά Αποκτήστε το στο Google Play

Σχετικά άρθρα

Πηγή: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Σφραγίδα ώρας:

Περισσότερα από Ανάλυση Vidhya