ML con Python - Selezione delle caratteristiche dei dati

Nel capitolo precedente abbiamo visto in dettaglio come preelaborare e preparare i dati per l'apprendimento automatico. In questo capitolo, comprendiamo in dettaglio la selezione delle caratteristiche dei dati e vari aspetti coinvolti in essa.

Importanza della selezione delle caratteristiche dei dati

Le prestazioni del modello di apprendimento automatico sono direttamente proporzionali alle funzionalità dei dati utilizzate per addestrarlo. Le prestazioni del modello ML saranno influenzate negativamente se le caratteristiche dei dati fornite sono irrilevanti. D'altra parte, l'uso di funzionalità dei dati rilevanti può aumentare la precisione del modello ML, in particolare la regressione lineare e logistica.

Ora sorge la domanda che cos'è la selezione automatica delle funzionalità? Può essere definito come il processo con l'aiuto del quale selezioniamo quelle caratteristiche nei nostri dati che sono più rilevanti per l'output o la variabile di previsione a cui siamo interessati. Viene anche chiamata selezione degli attributi.

Di seguito sono riportati alcuni dei vantaggi della selezione automatica delle caratteristiche prima di modellare i dati:

  • L'esecuzione della selezione delle caratteristiche prima della modellazione dei dati ridurrà l'overfitting.

  • L'esecuzione della selezione delle caratteristiche prima della modellazione dei dati aumenterà la precisione del modello ML.

  • L'esecuzione della selezione delle funzionalità prima della modellazione dei dati ridurrà il tempo di addestramento

Tecniche di selezione delle caratteristiche

Le seguenti sono tecniche di selezione automatica delle funzionalità che possiamo utilizzare per modellare i dati ML in Python:

Selezione univariata

Questa tecnica di selezione delle caratteristiche è molto utile per selezionare quelle caratteristiche, con l'aiuto di test statistici, che hanno una relazione più forte con le variabili di previsione. Possiamo implementare una tecnica di selezione delle caratteristiche univariata con l'aiuto di SelectKBest0class della libreria Python scikit-learn.

Example

In questo esempio, utilizzeremo il set di dati Pima Indians Diabetes per selezionare 4 degli attributi con le migliori caratteristiche con l'aiuto del test statistico chi-quadrato.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Successivamente, separeremo l'array in componenti di input e output -

X = array[:,0:8]
Y = array[:,8]

Le seguenti righe di codice selezioneranno le migliori funzionalità dal set di dati:

test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)

Possiamo anche riassumere i dati per l'output secondo la nostra scelta. Qui, stiamo impostando la precisione su 2 e mostriamo i 4 attributi dei dati con le migliori caratteristiche insieme al miglior punteggio di ogni attributo -

set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])

Output

[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
   [148. 0.  33.6 50. ]
   [ 85. 0.  26.6 31. ]
   [183. 0.  23.3 32. ]
   [ 89. 94. 28.1 21. ]
]

Eliminazione ricorsiva delle caratteristiche

Come suggerisce il nome, la tecnica di selezione delle feature RFE (Recursive feature elimination) rimuove gli attributi in modo ricorsivo e costruisce il modello con gli attributi rimanenti. Possiamo implementare la tecnica di selezione delle caratteristiche RFE con l'aiuto della classe RFE della libreria Python scikit-learn.

Esempio

In questo esempio, utilizzeremo RFE con algoritmo di regressione logistica per selezionare i 3 migliori attributi con le migliori caratteristiche dal set di dati del diabete degli indiani Pima a.

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Successivamente, separeremo l'array nei suoi componenti di input e output -

X = array[:,0:8]
Y = array[:,8]

Le seguenti righe di codice selezioneranno le migliori funzionalità da un set di dati:

model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")

Produzione

Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

Possiamo vedere nell'output sopra, RFE sceglie preg, mass e pedi come le prime 3 migliori caratteristiche. Sono contrassegnati come 1 nell'output.

Analisi dei componenti principali (PCA)

La PCA, generalmente chiamata tecnica di riduzione dei dati, è una tecnica di selezione delle caratteristiche molto utile poiché utilizza l'algebra lineare per trasformare il set di dati in una forma compressa. Possiamo implementare la tecnica di selezione delle caratteristiche PCA con l'aiuto della classe PCA della libreria Python scikit-learn. Possiamo selezionare il numero di componenti principali nell'output.

Esempio

In questo esempio, utilizzeremo la PCA per selezionare i 3 migliori componenti principali dal set di dati del diabete degli indiani Pima.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Successivamente, separeremo l'array in componenti di input e output -

X = array[:,0:8]
Y = array[:,8]

Le seguenti righe di codice estrarranno le funzionalità dal set di dati:

pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)

Produzione

Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
   [ 
      -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02 
      9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
   ]
   [ 
      2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02 
      -9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
   ]
   [ 
      -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01 
      2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
   ]
]

Possiamo osservare dall'output di cui sopra che 3 componenti principali hanno poca somiglianza con i dati di origine.

Importanza delle caratteristiche

Come suggerisce il nome, la tecnica di importanza delle caratteristiche viene utilizzata per scegliere le caratteristiche di importanza. Fondamentalmente utilizza un classificatore supervisionato addestrato per selezionare le funzionalità. Possiamo implementare questa tecnica di selezione delle funzionalità con l'aiuto della classe ExtraTreeClassifier della libreria Python scikit-learn.

Esempio

In questo esempio, useremo ExtraTreeClassifier per selezionare le caratteristiche dal dataset di Pima Indians Diabetes.

from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values

Successivamente, separeremo l'array in componenti di input e output -

X = array[:,0:8]
Y = array[:,8]

Le seguenti righe di codice estrarranno le funzionalità dal set di dati:

model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)

Produzione

[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]

Dall'output, possiamo osservare che ci sono punteggi per ogni attributo. Più alto è il punteggio, maggiore è l'importanza di quell'attributo.