OneHotEncoder σε πολλαπλές στήλες που ανήκουν στις ίδιες κατηγορίες

ψήφοι
2

Έχω πολλές στήλες που αποτελείται από τις μεταβλητές κατηγοριών τα οποία είναι υπό τη μορφή τιμών ακέραιος που κυμαίνεται από 0-4. Όμως, όλες οι στήλες ανήκουν στην ίδια κατηγορία. Προσπάθησα χρησιμοποιώντας OneHotEncoder από scikit να μάθουν, αλλά δεν αναλάβει τη φροντίδα του λείπει κατηγορίες στη στήλη, το οποίο θα μπορούσε να προκαλέσει προβλήματα όταν έχω δοκιμάσει αόρατο στοιχεία για νευρωνικό μοντέλο του δικτύου μου. Παρακάτω κώδικα δείχνει το είδος των δεδομένων που χρειάζονται για την κωδικοποίηση

>>> df = pd.DataFrame(np.random.randint(low=0, high=4, size=(5, 5)),
                       columns=['color1', 'color2', 'color3', 'color4', 'color5'])
>>> df

   color1  color2  color3  color4  color5
0       0       1       2       3       1
1       3       1       0       1       1
2       0       1       0       3       0
3       0       2       0       1       2
4       0       2       0       3       2

>>> df_onehotencoder = OneHotEncoder(sparse=False)
>>> df2 = df_onehotencoder.fit_transform(df)

>>> df2

array([[1., 0., 1., 0., 0., 1., 0., 1., 0., 1., 0.],
       [0., 1., 1., 0., 1., 0., 1., 0., 0., 1., 0.],
       [1., 0., 1., 0., 1., 0., 0., 1., 1., 0., 0.],
       [1., 0., 0., 1., 1., 0., 1., 0., 0., 0., 1.],
       [1., 0., 0., 1., 1., 0., 0., 1., 0., 0., 1.]])

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

Δημοσιεύθηκε 20/10/2018 στις 12:31
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Ξεκινώντας από sklearn==0.20OneHotEncoder έχει categoriesπαραμέτρων όπου μπορείτε να παρέχετε μια λίστα των καταλόγων με όλες τις πιθανές τιμές για μια δεδομένη στήλη.

import pandas as pd
df = pd.DataFrame([[0, 1, 2, 3, 1],
 [3, 1, 0, 1, 1],
 [0, 1, 0, 3, 0],
 [0, 2, 0, 1, 2],
 [0, 2, 0, 3, 2]], columns=['color1', 'color2', 'color3', 'color4', 'color5'])

from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder

# Get all the unique values if we don't have them
unique_values = pd.unique(df.values.ravel()) 

ohe = OneHotEncoder(categories=[unique_values]*len(df), sparse=False)
encoded = pd.DataFrame(ohe.fit_transform(
    df), columns=ohe.get_feature_names(df.columns))
>>> encoded

   color1_0  color1_1  color1_2  color1_3  color2_0  color2_1    0
0       1.0       0.0       0.0       0.0       0.0       1.0  ...
1       0.0       0.0       0.0       1.0       0.0       1.0  ...
2       1.0       0.0       0.0       0.0       0.0       1.0  ...
3       1.0       0.0       0.0       0.0       0.0       0.0  ...
4       1.0       0.0       0.0       0.0       0.0       0.0  ...

Για να πάρετε πίσω το αρχικό μαθήματα που μπορείτε να κάνετε inverse_transform:

>>> ohe.inverse_transform(encoded) 
array([[0, 1, 2, 3, 1],
       [3, 1, 0, 1, 1],
       [0, 1, 0, 3, 0],
       [0, 2, 0, 1, 2],
       [0, 2, 0, 3, 2]], dtype=int64)
Απαντήθηκε 20/10/2018 στις 21:58
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more