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

    Questo sito utilizza cookie tecnici. Sono presenti alcuni cookie di terzi ( Gooogle, Facebook ) per la personalizzazione degli annunci pubblicitari. Cliccando su OK, scorrendo la pagina o proseguendo la navigazione in altra maniera acconsenti all’uso dei cookie.

    Per ulteriori informazioni o per revocare il consenso fai riferimento alla Privacy del sito.
    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 rappresentare le regioni decisionali
    6. La vettorizzazione delle categorie
    7. StandardScaler ( riduzione di scala )
    8. L'analisi degli errori del classificatore
    9. L'analisi degli errori del regressore
    10. Perceptron
    11. La regressione lineare
    12. Decision Tree Classifier
    13. k-NN (k Nearest Neighbors)
    14. MLPClassifier