Con il nuovo giorno arrivano nuove forze e nuovi pensieri – Eleanor Roosevelt
Noi tutti possiamo aver affrontato questo problema di identificare le caratteristiche correlate da un insieme di dati e rimuovere le caratteristiche irrilevanti o meno importanti che non contribuiscono molto alla nostra variabile obiettivo al fine di ottenere una migliore precisione per il nostro modello.
La selezione delle caratteristiche è uno dei concetti fondamentali nell’apprendimento automatico che influisce enormemente sulle prestazioni del vostro modello. Le caratteristiche dei dati che usate per addestrare i vostri modelli di apprendimento automatico hanno un’enorme influenza sulle prestazioni che potete ottenere.
Le caratteristiche irrilevanti o parzialmente rilevanti possono avere un impatto negativo sulle prestazioni del modello.
La selezione delle caratteristiche e la pulizia dei dati dovrebbero essere il primo e più importante passo della progettazione del vostro modello.
In questo post, scoprirete le tecniche di selezione delle caratteristiche che potete usare nel Machine Learning.
La selezione delle caratteristiche è il processo in cui si selezionano automaticamente o manualmente quelle caratteristiche che contribuiscono maggiormente alla variabile di predizione o all’output a cui si è interessati.
Avere caratteristiche irrilevanti nei dati può diminuire l’accuratezza dei modelli e far sì che il modello impari sulla base di caratteristiche irrilevanti.
Come selezionare le caratteristiche e quali sono i vantaggi di eseguire la selezione delle caratteristiche prima di modellare i dati?
– Riduce l’overfitting: Meno dati ridondanti significa meno opportunità di prendere decisioni basate sul rumore.
– Migliora la precisione: Meno dati fuorvianti significa che la precisione della modellazione migliora.
– Riduce il tempo di addestramento: meno punti dati riducono la complessità dell’algoritmo e gli algoritmi si addestrano più velocemente.
Voglio condividere la mia esperienza personale con questo.
Ho preparato un modello selezionando tutte le caratteristiche e ho ottenuto un’accuratezza di circa il 65% che non è molto buona per un modello predittivo e dopo aver fatto un po’ di selezione e ingegneria delle caratteristiche senza fare alcun cambiamento logico nel mio codice del modello la mia accuratezza è balzata all’81% che è abbastanza impressionante
Ora sapete perché dico che la selezione delle caratteristiche dovrebbe essere il primo e più importante passo della progettazione del modello.
Metodi di selezione delle caratteristiche:
Condividerò 3 tecniche di selezione delle caratteristiche che sono facili da usare e danno anche buoni risultati.
1. Selezione univariata
2. Importanza delle caratteristiche
3.Matrice di correlazione con Heatmap
Diamo un’occhiata a queste tecniche una per una con un esempio
Puoi scaricare il dataset da qui https://www.kaggle.com/iabhishekofficial/mobile-price-classification#train.csv
Descrizione delle variabili nel file sopra
battery_power: Energia totale che una batteria può immagazzinare in una volta misurata in mAh
blu: Ha il Bluetooth o no
clock_speed: la velocità con cui il microprocessore esegue le istruzioni
dual_sim: Ha il supporto dual sim o no
fc: Megapixel della fotocamera anteriore
four_g: Ha 4G o no
int_memory: Memoria interna in Gigabyte
m_dep: Profondità del cellulare in cm
mobile_wt: Peso del cellulare
n_cores: Numero di core del processore
pc: Megapixel della fotocamera primaria
px_height
Altezza risoluzione pixel
px_width: Larghezza risoluzione pixel
ram: Memoria ad accesso casuale in MegaByte
sc_h: Altezza dello schermo del cellulare in cm
sc_w: Larghezza schermo del cellulare in cm
talk_time: il tempo più lungo che una singola carica della batteria durerà quando si è
three_g: Ha 3G o no
touch_screen: Ha il touch screen o no
wifi: Ha il wifi o no
price_range: Questa è la variabile di destinazione con un valore di 0 (costo basso), 1 (costo medio), 2 (costo alto) e 3 (costo molto alto).
1. Selezione univariata
I test statistici possono essere usati per selezionare quelle caratteristiche che hanno la relazione più forte con la variabile di uscita.
La libreria scikit-learn fornisce la classe SelectKBest che può essere usata con una serie di diversi test statistici per selezionare un numero specifico di caratteristiche.
L’esempio seguente usa il test statistico chi-quadrato (chi²) per caratteristiche non negative per selezionare 10 delle migliori caratteristiche dal Mobile Price Range Prediction Dataset.
import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range#apply SelectKBest class to extract top 10 best features
bestfeatures = SelectKBest(score_func=chi2, k=10)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
#concat two dataframes for better visualization
featureScores = pd.concat(,axis=1)
featureScores.columns = #naming the dataframe columns
print(featureScores.nlargest(10,'Score')) #print 10 best features
Feature Importance
Puoi ottenere l’importanza di ogni caratteristica del tuo dataset usando la proprietà feature importance del modello.
L’importanza delle caratteristiche vi dà un punteggio per ogni caratteristica dei vostri dati, più alto è il punteggio più importante o rilevante è la caratteristica verso la vostra variabile di uscita.
L’importanza delle caratteristiche è una classe incorporata che viene fornita con i classificatori ad albero, noi useremo il classificatore ad albero extra per estrarre le prime 10 caratteristiche per il set di dati.
import pandas as pd
import numpy as np
data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range
from sklearn.ensemble import ExtraTreesClassifier
import matplotlib.pyplot as plt
model = ExtraTreesClassifier()
model.fit(X,y)
print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers
#plot graph of feature importances for better visualization
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(10).plot(kind='barh')
plt.show()
3.Matrice di correlazione con Heatmap
La correlazione indica come le caratteristiche sono collegate tra loro o alla variabile target.
La correlazione può essere positiva (l’aumento di un valore della caratteristica aumenta il valore della variabile obiettivo) o negativa (l’aumento di un valore della caratteristica diminuisce il valore della variabile obiettivo)
La heatmap rende facile identificare quali caratteristiche sono più correlate alla variabile obiettivo, tracceremo heatmap delle caratteristiche correlate usando la libreria seaborn.
import pandas as pd
import numpy as np
import seaborn as snsdata = pd.read_csv("D://Blogs//train.csv")
X = data.iloc #independent columns
y = data.iloc #target column i.e price range
#get correlations of each features in dataset
corrmat = data.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(20,20))
#plot heat map
g=sns.heatmap(data.corr(),annot=True,cmap="RdYlGn")