La vettorizzazione delle categorie del dataset su Sklearn

Nel machine learning la vettorizzazione delle categorie è la trasformazione dei dati non numerici ( es. stringhe ) in dati numerici.

Perché vettorizzare le categorie?

Può capitare di lavorare con dataset in cui alcune caratteristiche (features) contengono stringhe anziché valori numerici.

Molti algoritmi di ML non riescono a elaborare le stringhe. Pertanto, prima di avviare l'addestramento, devo preparare il dataset sostituendo le stringhe in valori numerici.

Come si vettorizzano le categorie?

Esistono diversi metodi per farlo. Uno dei metodi più semplici su Sklearn è la classe OneHotEncoder.

    Un esempio pratico

    Apro python e creo un semplice array composto da quattro record e tre caratteristiche (features).

    X=[
    [2001,11,'rosso'],
    [2002,7,'verde'],
    [2003,5,'rosso'],
    [2004,8,'blu']
    ]

    La terza caratteristica contiene i colori in formato stringa (rosso, verde, blu).

    Per vettorizzarla importo la classe ColumnTrasformer che mi permette di modificare le colonne del dataset.

    from sklearn.compose import ColumnTransformer

    Poi importo la classe OneHotEncoder per il preprocessing dei dati.

    from sklearn.preprocessing import OneHotEncoder

    Creo un transformatore dove specifico la classe di preprocessing da usare (OneHotEncoder) e la colonna del dataset su cui applicarla. In questi casi è la terza colonna, quella con indice [2]

    Il nome del transformer (nometrasf) è invece arbitrario.

    trasformatore = [
    ['nometrasf', OneHotEncoder(), [2]]
    ]

    Dopo aver preparato la struttura dati, preparo l'istanza in cui specifico con l'opzione remainder=passthrough di voler usare il trasformatore sulla terza colonna (caratteristica) senza modificare le altre colonne del dataset

    ct = ColumnTransformer(trasformatore, remainder='passthrough')

    A questo punto uso i metodi fit e transform passandogli l'array X in input.

    ct.fit(X)
    Y = ct.transform(X)

    L'output dell'elaborazione viene scritto nella variabile Y.

    Cos'è accaduto?

    Stampo il contenuto della variabile Y per vedere cos'è successo

    print(Y)

    Il contenuto è il seguente array

    [[0.0 1.0 0.0 2001 11]
    [0.0 0.0 1.0 2002 7]
    [0.0 1.0 0.0 2003 5]
    [1.0 0.0 0.0 2004 8]]

    Come si può subito vedere la vettorizzazione ha eliminato la colonna dei colori.

    Al suo posto sono state inserite tre colonne, una per ogni livello della feature eliminata ossia per ogni suo valore possibile (rosso, verde, blu).

    • La prima colonna è uguale a 1.0 se il colore è blu.
    • La seconda colonna è uguale a 1.0 se il colore è rosso.
    • La terza colonna è uguale a 1.0 se il colore è verde.

    Il dataset contiene le stesse informazioni ma è composto soltanto da valori numerici.

    Nota. La classe OneHotEncoder è utile se la caratteristica da vettorizzare ha pochi valori. Se ha molti valori, la dimensione del dataset potrebbe crescere in modo eccessivo.

    E così via

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Scikit-learn

    1. Cos'è sklearn
    2. Come installare sklearn
    3. Un esempio di machine learning
    4. Come usare i datasets didattici di scikit-learn
    5. Come creare un dataset con Excel
    6. Come rappresentare le regioni decisionali
    7. La vettorizzazione delle categorie
    8. StandardScaler ( riduzione di scala )
    9. L'analisi degli errori del classificatore
    10. L'analisi degli errori del regressore
    11. Perceptron
    12. La regressione lineare
    13. La regressione logistica
    14. Decision Tree Classifier
    15. k-NN (k Nearest Neighbors)
    16. MLPClassifier