Preelaborazione dei dati: Machine Learning
Questo articolo continua dal precedente: Introduzione al Machine Learning .
La preelaborazione dei dati è un passaggio cruciale nell'apprendimento automatico ed è importante convertire tutti i valori di stringa nei dati in valori numerici in modo che il computer possa comprenderne e apprenderne lo schema, potendo così prevedere un risultato con un dato input.
In questo articolo, analizzeremo ogni fase della pre-elaborazione dei dati con un esempio utilizzando scikit-learn. In generale, la preelaborazione dei dati comprende le seguenti fasi:
1. Importazione dei dati
2. Gestione dei dati mancanti
3. Codifica dei dati categorici
4. Divisione dei dati
5. Ridimensionamento delle funzionalità
Prima di iniziare, le tre librerie più importanti che utilizziamo nell'apprendimento automatico sono: 1. NumPy, 2. Pandas, 3. Matplotlib.
Numpy è considerato la spina dorsale di Data Science, domina il calcolo numerico in Python. È la base per trasformare i dati in una serie di numeri.
Pandas è uno strumento di analisi dei dati e utilizza l'idea di DataFrame, aiuta a preparare i dati grezzi per l'apprendimento automatico.
Matplotlib è una libreria di plottaggio ampiamente utilizzata in Data Science, è una libreria di plottaggio che ci consente di trasformare i nostri dati in grafici o figure.
Queste tre librerie vengono importate tramite:
import numpy as py
import pandas as pd
import matplotlib.pyplot as plt
I dati vengono importati utilizzando Pandas, solitamente nel modo seguente:
df = pd.read_csv('data.csv')
Poiché Machine Learning separa le variabili delle caratteristiche e le variabili di previsione (colonna che vogliamo prevedere) rispettivamente come X e y, può essere suddivisa nei seguenti modi, dove X è le variabili delle caratteristiche e y è la colonna che vogliamo prevedere :
X = df.drop('Purchased', axis=1).values
y = df['Purchased'].values
X = df.iloc[:, :-1].values # -> [rows, columns]
y = df.iloc[:, -1].values
È importante gestire i dati mancanti nel set di dati, poiché possono influire notevolmente sul processo di addestramento del computer, influenzando così la previsione.
In generale, se un set di dati è di grandi dimensioni, è sempre meglio rimuovere l'intera riga di tutte le righe con eventuali dati mancanti. Ad esempio, l'eliminazione di 1.000 righe di dati all'interno di 100.000 righe di dati rappresenta solo l'1% del set di dati totale.
Tuttavia, se questo non è il caso, dobbiamo riempire i valori mancanti per evitare perdite di informazioni.
Esistono diversi modi per inserire i valori mancanti e i modi più comuni sono riempire i valori con 1. media 2. mediana 3. valori più frequenti (per i dati relativi alla frequenza).
Il riempimento dei valori con la mediana è molto utile in quanto impedisce l'interferenza di valori anomali estremi , in quanto i valori anomali estremi possono interferire con la media dell'intero set di dati.
Riempire i valori con la media è uno dei modi più classici e nell'esempio seguente dimostrerò di riempire i valori mancanti con la media.
Per riempire i valori mancanti, utilizziamo un framework di Machine Learning — Scikit-Learn . È il framework più utilizzato nel campo del Machine Learning, con molte funzioni integrate disponibili.
Prendendo come esempio il seguente set di dati, possiamo inserire i valori mancanti con la media :
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
> X[:, 1:3] significa selezionare TUTTE le righe di dati e le colonne 'Età' e 'Stipendio' -> [Righe, Colonne].
Codifica dei dati categorici
Per trasformare i dati categorici in dati numerici, dobbiamo codificarli. Tuttavia, la semplice assegnazione di un codice numerico come 0, 1, 2 non è l'ideale. Utilizzando il set di dati sopra con "Paese" come esempio, assegnando 0 alla Francia, 1 alla Spagna, 2 alla Germania, il computer penserà che esiste una "correlazione dell'ordine" a questo valore, quindi non è l'ideale, e noi vuole impedirlo.
Per codificare i dati categorici, possiamo utilizzare OneHotEncoding fornito da Scikit-Learn . Come mostrato nell'esempio sopra, la colonna del paese verrà trasformata in 3 colonne diverse (per un totale di 3 paesi). Ad esempio, Francia — vector(1,0,0) e Germany essendo (0,1,0), ecc.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
# For ColumnTransformer, the argument=[('name', EncoderClass, Column of X)], remainder='what to do for columns not encoded'
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(X)) # Does fit & transform columns at the same time & force to np array type
È fondamentale separare i dati in 1. addestramento 2. set di test e talvolta set di convalida. Questo perché vogliamo che il nostro computer apprenda i modelli dei nostri dati dal set di addestramento e valuti il set di test (il set che il computer non ha mai visto prima) per vedere se il computer sta imparando bene o correttamente.
Per farlo utilizziamo:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Ridimensionamento delle funzionalità
Nota: non tutti i modelli di Machine Learning richiedono il ridimensionamento delle funzionalità, ma alcuni .
Il ridimensionamento delle funzionalità consiste nel ridimensionare le nostre variabili di funzionalità dei dati nella stessa scala, questo impedirà ad alcune funzionalità di essere più dominate di altre funzionalità, o nemmeno considerate dai modelli ML.
I due modi più comuni sono: 1. Standardizzazione 2. Normalizzazione .
Standardizzazione : sottrazione di ogni valore della caratteristica per la media di tutti i valori della caratteristica e divisione per la deviazione standard.
Normalizzazione : sottraendo ogni valore della caratteristica per il minimo di tutti i valori, dividere per (differenza di massimo e minimo della caratteristica).
Quale applicare?
Normalizationè consigliato quando si dispone di unanormal distributionnella maggior parte delle funzionalità. (situazione specifica)Standardizationfunziona beneall the time. (vai per la standardizzazione, poiché funziona sempre bene nel processo di formazione)
Non dobbiamo richiedere:
- Valori binari
- Equazioni con coefficienti delle stesse scale
- Valori compresi tra 0 e 1
MA, adatta solo utilizzando il set di allenamento (scaler) , per trattare il set di test come set nuovo di zecca e does not contributeper presentare la formula di ridimensionamento.
# Fit will just get the mean & s.d. of each of the features.
# Transform will apply the formula, and actually manipulate the values.
from sklearn.preprocessing import StandardScaler # Standardization
sc = StandardScaler()
X_train[:, 3:] = sc.fit_transform(X_train[:, 3:])
# We need to apply the SAME scaler on training set onto test set
X_test[:, 3:] = sc.transform(X_test[:, 3:])

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































