AI con Python - Preparazione dei dati

Abbiamo già studiato algoritmi di apprendimento automatico supervisionati e non supervisionati. Questi algoritmi richiedono dati formattati per avviare il processo di addestramento. Dobbiamo preparare o formattare i dati in un certo modo in modo che possano essere forniti come input agli algoritmi ML.

Questo capitolo si concentra sulla preparazione dei dati per gli algoritmi di apprendimento automatico.

Pre-elaborazione dei dati

Nella nostra vita quotidiana, trattiamo molti dati ma questi dati sono in forma grezza. Per fornire i dati come input di algoritmi di apprendimento automatico, dobbiamo convertirli in dati significativi. È qui che entra in gioco la preelaborazione dei dati. In altre parole semplici, possiamo dire che prima di fornire i dati agli algoritmi di apprendimento automatico dobbiamo preelaborare i dati.

Fasi di pre-elaborazione dei dati

Segui questi passaggi per preelaborare i dati in Python:

Step 1 − Importing the useful packages - Se stiamo usando Python, questo sarebbe il primo passo per convertire i dati in un certo formato, cioè la pre-elaborazione. Può essere fatto come segue:

import numpy as np
import sklearn.preprocessing

Qui abbiamo usato i seguenti due pacchetti:

  • NumPy - Fondamentalmente NumPy è un pacchetto di elaborazione di array per uso generico progettato per manipolare in modo efficiente grandi array multidimensionali di record arbitrari senza sacrificare troppa velocità per piccoli array multidimensionali.

  • Sklearn.preprocessing - Questo pacchetto fornisce molte funzioni di utilità comuni e classi di trasformatori per modificare i vettori di elementi grezzi in una rappresentazione più adatta per gli algoritmi di apprendimento automatico.

Step 2 − Defining sample data - Dopo aver importato i pacchetti, è necessario definire alcuni dati di esempio in modo da poter applicare tecniche di preelaborazione su quei dati. Definiremo ora i seguenti dati di esempio:

input_data = np.array([2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8])

Step3 − Applying preprocessing technique - In questo passaggio, dobbiamo applicare una qualsiasi delle tecniche di preelaborazione.

La sezione seguente descrive le tecniche di pre-elaborazione dei dati.

Tecniche per la pre-elaborazione dei dati

Le tecniche per la preelaborazione dei dati sono descritte di seguito:

Binarizzazione

Questa è la tecnica di pre-elaborazione che viene utilizzata quando dobbiamo convertire i nostri valori numerici in valori booleani. Possiamo utilizzare un metodo integrato per binarizzare i dati di input, ad esempio utilizzando 0,5 come valore di soglia nel modo seguente:

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

Ora, dopo aver eseguito il codice sopra, otterremo il seguente output, tutti i valori superiori a 0,5 (valore di soglia) verranno convertiti in 1 e tutti i valori inferiori a 0,5 verranno convertiti in 0.

Binarized data

[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]

Rimozione media

È un'altra tecnica di pre-elaborazione molto comune utilizzata nell'apprendimento automatico. Fondamentalmente viene utilizzato per eliminare la media dal vettore delle caratteristiche in modo che ogni caratteristica sia centrata sullo zero. Possiamo anche rimuovere il bias dalle caratteristiche nel vettore delle caratteristiche. Per applicare la tecnica di pre-elaborazione della rimozione media sui dati di esempio, possiamo scrivere il codice Python mostrato di seguito. Il codice visualizzerà la media e la deviazione standard dei dati di input -

print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))

Otterremo il seguente output dopo aver eseguito le righe di codice precedenti:

Mean = [ 1.75       -1.275       2.2]
Std deviation = [ 2.71431391  4.20022321  4.69414529]

Ora, il codice seguente rimuoverà la media e la deviazione standard dei dati di input -

data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))

Otterremo il seguente output dopo aver eseguito le righe di codice precedenti:

Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1.             1.             1.]

Ridimensionamento

È un'altra tecnica di pre-elaborazione dei dati utilizzata per scalare i vettori delle caratteristiche. Il ridimensionamento dei vettori delle caratteristiche è necessario perché i valori di ogni caratteristica possono variare tra molti valori casuali. In altre parole, possiamo dire che il ridimensionamento è importante perché non vogliamo che nessuna caratteristica sia sinteticamente grande o piccola. Con l'aiuto del seguente codice Python, possiamo ridimensionare i nostri dati di input, cioè il vettore di caratteristiche -

# Min max scaling

data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)

Otterremo il seguente output dopo aver eseguito le righe di codice precedenti:

Min max scaled data

[ [ 0.48648649  0.58252427   0.99122807]
[   0.          1.           0.81578947]
[   0.27027027  0.           1.        ]
[   1.          0. 99029126  0.        ]]

Normalizzazione

È un'altra tecnica di pre-elaborazione dei dati utilizzata per modificare i vettori delle caratteristiche. Questo tipo di modifica è necessaria per misurare i vettori delle caratteristiche su una scala comune. I seguenti sono due tipi di normalizzazione che possono essere utilizzati nell'apprendimento automatico:

L1 Normalization

È indicato anche come Least Absolute Deviations. Questo tipo di normalizzazione modifica i valori in modo che la somma dei valori assoluti sia sempre fino a 1 in ogni riga. Può essere implementato sui dati di input con l'aiuto del seguente codice Python -

# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)

La riga di codice sopra genera il seguente output & miuns;

L1 normalized data:
[[ 0.22105263  -0.2          0.57894737]
[ -0.2027027    0.32432432   0.47297297]
[  0.03571429  -0.56428571   0.4       ]
[  0.42142857   0.16428571  -0.41428571]]

L2 Normalization

È indicato anche come least squares. Questo tipo di normalizzazione modifica i valori in modo che la somma dei quadrati sia sempre fino a 1 in ogni riga. Può essere implementato sui dati di input con l'aiuto del seguente codice Python -

# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)

La riga di codice precedente genererà il seguente output:

L2 normalized data:
[[ 0.33946114  -0.30713151   0.88906489]
[ -0.33325106   0.53320169   0.7775858 ]
[  0.05156558  -0.81473612   0.57753446]
[  0.68706914   0.26784051  -0.6754239 ]]

Etichettatura dei dati

Sappiamo già che i dati in un certo formato sono necessari per gli algoritmi di apprendimento automatico. Un altro requisito importante è che i dati devono essere etichettati correttamente prima di inviarli come input di algoritmi di apprendimento automatico. Ad esempio, se parliamo di classificazione, ci sono molte etichette sui dati. Queste etichette sono sotto forma di parole, numeri, ecc. Funzioni correlate all'apprendimento automatico insklearnaspettarsi che i dati debbano avere etichette numeriche. Quindi, se i dati sono in un'altra forma, devono essere convertiti in numeri. Questo processo di trasformazione delle etichette delle parole in forma numerica è chiamato codifica delle etichette.

Procedura di codifica dell'etichetta

Segui questi passaggi per codificare le etichette dati in Python:

Step1 − Importing the useful packages

Se stiamo usando Python, questo sarebbe il primo passo per convertire i dati in un certo formato, cioè la pre-elaborazione. Può essere fatto come segue:

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Dopo aver importato i pacchetti, è necessario definire alcune etichette di esempio in modo da poter creare e addestrare il codificatore di etichette. Definiremo ora le seguenti etichette di esempio:

# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']

Step 3 − Creating & training of label encoder object

In questo passaggio, dobbiamo creare il codificatore dell'etichetta e addestrarlo. Il seguente codice Python aiuterà in questo:

# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

Di seguito sarebbe l'output dopo aver eseguito il codice Python sopra -

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Questo passaggio può essere utilizzato per controllare le prestazioni codificando l'elenco ordinato casuale. Il seguente codice Python può essere scritto per fare lo stesso -

# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)

Le etichette verrebbero stampate come segue:

Labels = ['green', 'red', 'black']

Ora, possiamo ottenere l'elenco dei valori codificati, ovvero le etichette delle parole convertite in numeri come segue:

print("Encoded values =", list(encoded_values))

I valori codificati verrebbero stampati come segue:

Encoded values = [1, 2, 0]

Step 5 − Checking the performance by decoding a random set of numbers −

Questo passaggio può essere utilizzato per controllare le prestazioni decodificando la serie casuale di numeri. Il seguente codice Python può essere scritto per fare lo stesso -

# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)

Ora, i valori codificati verrebbero stampati come segue:

Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))

Ora, i valori decodificati verrebbero stampati come segue:

Decoded labels = ['white', 'black', 'yellow', 'green']

Etichettato v / s Dati senza etichetta

I dati senza etichetta consistono principalmente nei campioni di oggetti naturali o creati dall'uomo che possono essere facilmente ottenuti dal mondo. Includono audio, video, foto, articoli di notizie, ecc.

D'altra parte, i dati etichettati prendono una serie di dati senza etichetta e aumentano ogni parte di quei dati senza etichetta con qualche tag o etichetta o classe che sia significativa. Ad esempio, se abbiamo una foto, l'etichetta può essere apposta in base al contenuto della foto, ovvero è la foto di un ragazzo o una ragazza o di un animale o qualsiasi altra cosa. L'etichettatura dei dati richiede esperienza umana o giudizio su un dato pezzo di dati senza etichetta.

Ci sono molti scenari in cui i dati senza etichetta sono abbondanti e facilmente ottenibili, ma i dati etichettati spesso richiedono un essere umano / esperto per annotare. L'apprendimento semi-supervisionato tenta di combinare dati etichettati e non etichettati per costruire modelli migliori.