Vai al contenuto principale

Tutorial sulla selezione delle feature in Python: guida per principianti

Scopri le basi della selezione delle feature e come implementare e analizzare varie tecniche di selezione delle feature in Python.
Aggiornato 29 set 2026  · 14 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

banner

Esegui e modifica il codice da questo tutorial online

Esegui codice

Se vuoi imparare di più con Python, segui il corso gratuito di DataCamp Intro to Python for Data Science.

Avrai già visto dei dataset. A volte sono piccoli, ma spesso sono enormi. Diventa molto impegnativo elaborare i dataset molto grandi, almeno abbastanza da creare un collo di bottiglia nell'elaborazione.

Quindi, cosa rende questi dataset così grandi? Le feature. Più è alto il numero di feature, più grandi saranno i dataset. Be', non sempre. Troverai dataset con un numero molto elevato di feature, ma con poche istanze. Ma non è questo il punto della discussione. Quindi, potresti chiederti come elaborare questo tipo di dataset con un normale computer senza girarci troppo intorno.

Spesso, in un dataset ad alta dimensionalità, restano alcune feature totalmente irrilevanti, insignificanti e poco importanti. Si è visto che il contributo di queste feature è spesso inferiore rispetto a quello delle feature critiche ai fini del modeling predittivo. A volte possono contribuire zero. Queste feature causano diversi problemi che a loro volta impediscono un modeling predittivo efficiente:

  • Allocazione di risorse non necessaria per queste feature.
  • Queste feature agiscono come rumore e possono far performare molto male il modello di machine learning.
  • Il modello richiede più tempo per l'addestramento.

Quindi, qual è la soluzione? La soluzione più economica è la selezione delle feature.

La selezione delle feature è il processo di scelta delle feature più significative da un dataset. In molti casi, la selezione delle feature può anche migliorare le prestazioni di un modello di machine learning.

Sembra interessante, vero?

Hai avuto un'introduzione informale alla selezione delle feature e alla sua importanza nel mondo della Data Science e del Machine Learning. In questo post affronterai:

  • Introduzione alla selezione delle feature e comprensione della sua importanza
  • Differenza tra selezione delle feature e riduzione della dimensionalità
  • Diversi tipi di metodi di selezione delle feature
  • Implementazione di diversi metodi di selezione delle feature con scikit-learn

Introduzione alla selezione delle feature

La selezione delle feature è conosciuta anche come selezione delle variabili o selezione degli attributi.

In sostanza, è il processo di selezione delle feature più importanti/rilevanti di un dataset.

Capire l'importanza della selezione delle feature

L'importanza della selezione delle feature si coglie al meglio quando lavori con un dataset che contiene un numero enorme di feature. Questo tipo di dataset è spesso chiamato dataset ad alta dimensionalità. Ora, con questa alta dimensionalità arrivano diversi problemi, come: un aumento significativo del tempo di addestramento del modello di machine learning e una complessità elevata del modello che può portare a overfitting.

Spesso, in un insieme di feature ad alta dimensionalità, ci sono diverse feature ridondanti, cioè semplici estensioni di altre feature essenziali. Queste feature ridondanti non contribuiscono in modo efficace nemmeno all'addestramento del modello. È chiaro quindi che occorre estrarre le feature più importanti e rilevanti da un dataset per ottenere le migliori prestazioni predittive possibili.

"L'obiettivo della selezione delle variabili è triplice: migliorare le prestazioni predittive dei predittori, fornire predittori più veloci e convenienti, e offrire una migliore comprensione del processo sottostante che ha generato i dati."

-An Introduction to Variable and Feature Selection

Ora capiamo la differenza tra riduzione della dimensionalità e selezione delle feature.

A volte la selezione delle feature viene confusa con la riduzione della dimensionalità. Ma sono diverse. Entrambi i metodi tendono a ridurre il numero di attributi nel dataset, ma un metodo di riduzione della dimensionalità lo fa creando nuove combinazioni di attributi (talvolta nota come trasformazione delle feature), mentre i metodi di selezione delle feature includono o escludono gli attributi presenti nei dati senza modificarli.

Alcuni esempi di metodi di riduzione della dimensionalità sono Principal Component Analysis, Singular Value Decomposition, Linear Discriminant Analysis, ecc.

Riassumiamo l'importanza della selezione delle feature:

  • Permette all'algoritmo di machine learning di addestrarsi più velocemente.
  • Riduce la complessità di un modello e lo rende più facile da interpretare.
  • Migliora l'accuratezza di un modello se si sceglie il sottoinsieme giusto.
  • Riduce l'overfitting.

Nella prossima sezione studierai i diversi tipi di metodi generali di selezione delle feature: metodi filtro, metodi wrapper ed embedded.

Metodi filtro

La seguente immagine descrive al meglio i metodi di selezione delle feature basati su filtro:

filter-based feature selection methods

Fonte immagine: Analytics Vidhya

Il metodo filtro si basa sull'unicità generale dei dati da valutare e seleziona un sottoinsieme di feature senza includere alcun algoritmo di mining. Usa criteri di valutazione come distanza, informazione, dipendenza e consistenza. Il metodo filtro utilizza criteri di ranking e seleziona le variabili tramite ordinamento per punteggio. Il motivo per usare il ranking è la semplicità e la capacità di produrre feature pertinenti ed efficaci. Il ranking filtrerà le feature irrilevanti prima che inizi il processo di classificazione.

I metodi filtro sono generalmente usati come fase di pre-processing dei dati. La selezione delle feature è indipendente da qualsiasi algoritmo di machine learning. Le feature vengono classificate in base a punteggi statistici che mirano a determinare la correlazione delle feature con la variabile di output. La correlazione è un termine fortemente contestuale e varia da caso a caso. Puoi consultare la seguente tabella per definire i coefficienti di correlazione per diversi tipi di dati (in questo caso continui e categorici).

table for defining correlation coefficients for different types of data

Fonte immagine: Analytics Vidhya

Alcuni esempi di metodi filtro includono il test del chi-quadro, il guadagno di informazione e i punteggi del coefficiente di correlazione.

Passiamo ai metodi wrapper.

Metodi wrapper

Come per i metodi filtro, ecco un'infografica simile che ti aiuterà a capire meglio i metodi wrapper:

understand wrapper methods

Fonte immagine: Analytics Vidhya

Come puoi vedere nell'immagine sopra, un metodo wrapper necessita di un algoritmo di machine learning e usa le sue prestazioni come criterio di valutazione. Questo metodo cerca l'insieme di feature più adatto all'algoritmo e punta a migliorare le prestazioni di mining. Per valutare le feature, per i compiti di classificazione si usa l'accuratezza predittiva, mentre per il clustering si valuta la bontà del cluster.

Alcuni esempi tipici di metodi wrapper sono la forward feature selection, la backward feature elimination, la recursive feature elimination, ecc.

  • Forward Selection: la procedura inizia con un insieme vuoto di feature [insieme ridotto]. Si determina la migliore tra le feature originali e la si aggiunge all'insieme ridotto. A ogni iterazione successiva, si aggiunge la migliore tra le feature originali rimanenti.

  • Backward Elimination: la procedura inizia con l'insieme completo di attributi. A ogni passo, rimuove il peggiore attributo rimanente nell'insieme.

  • Combinazione di forward selection e backward elimination: i metodi stepwise di forward selection e backward elimination possono essere combinati in modo che, a ogni passo, la procedura selezioni il miglior attributo e rimuova il peggiore tra quelli rimanenti.

  • Recursive Feature Elimination: la selezione ricorsiva delle feature esegue una ricerca greedy per trovare il sottoinsieme di feature con le migliori prestazioni. Crea iterativamente modelli e determina la migliore o la peggiore feature a ogni iterazione. Costruisce i modelli successivi con le feature rimanenti finché tutte le feature non sono state esplorate. Quindi classifica le feature in base all'ordine della loro eliminazione. Nel peggiore dei casi, se un dataset contiene N feature, RFE effettuerà una ricerca greedy tra 2N combinazioni di feature.

Direi più che sufficiente!

Ora studiamo i metodi embedded.

Metodi embedded

I metodi embedded sono iterativi nel senso che tengono conto di ogni iterazione del processo di addestramento del modello ed estraggono con attenzione quelle feature che contribuiscono maggiormente all'addestramento in una data iterazione. I metodi di regolarizzazione sono i più usati tra gli embedded e penalizzano una feature dato un valore soglia per il coefficiente.

Per questo motivo i metodi di regolarizzazione sono anche chiamati metodi di penalizzazione: introducono vincoli aggiuntivi nell'ottimizzazione di un algoritmo predittivo (come un algoritmo di regressione) che spostano il modello verso una complessità minore (meno coefficienti).

Esempi di algoritmi di regolarizzazione sono LASSO, Elastic Net, Ridge Regression, ecc.

Differenza tra metodi filtro e wrapper

A volte può essere difficile distinguere tra metodi filtro e wrapper in termini di funzionalità. Vediamo in cosa differiscono.

  • I metodi filtro non incorporano un modello di machine learning per determinare se una feature sia buona o cattiva, mentre i metodi wrapper utilizzano un modello di machine learning e lo addestrano con la feature per decidere se è essenziale o meno.
  • I metodi filtro sono molto più veloci rispetto ai metodi wrapper poiché non prevedono l'addestramento dei modelli. D'altro canto, i metodi wrapper sono computazionalmente costosi e, nel caso di dataset enormi, non sono la scelta più efficace da considerare per la selezione delle feature.
  • I metodi filtro possono non riuscire a trovare il miglior sottoinsieme di feature quando non ci sono abbastanza dati per modellare la correlazione statistica delle feature, mentre i metodi wrapper possono fornire il miglior sottoinsieme di feature grazie alla loro natura esaustiva.
  • L'uso delle feature selezionate con metodi wrapper nel tuo modello finale può portare a overfitting, poiché i metodi wrapper addestrano già modelli di machine learning con quelle feature e ciò influisce sulla reale capacità di apprendimento. Le feature selezionate con metodi filtro, nella maggior parte dei casi, non porteranno a overfitting.

Finora hai studiato l'importanza della selezione delle feature e capito la differenza con la riduzione della dimensionalità. Hai anche visto vari tipi di metodi di selezione delle feature. Tutto bene fin qui!

Ora vediamo alcune trappole in cui potresti cadere durante la selezione delle feature:

Considerazione importante

Potresti aver già compreso il valore della selezione delle feature in una pipeline di machine learning e i benefici che offre se integrata. Ma è molto importante capire esattamente dove integrarla nella pipeline.

Semplicemente, dovresti includere il passaggio di selezione delle feature prima di fornire i dati al modello per l'addestramento, soprattutto quando utilizzi metodi di stima dell'accuratezza come la cross-validation. Questo assicura che la selezione delle feature sia eseguita sul fold di dati subito prima dell'addestramento del modello. Ma se prima esegui la selezione delle feature per preparare i dati e poi esegui la selezione e l'addestramento del modello sulle feature selezionate, sarebbe un errore grave.

Se esegui la selezione delle feature su tutti i dati e poi fai cross-validation, allora i dati di test in ogni fold della procedura di cross-validation sono stati usati anche per scegliere le feature, e questo tende a introdurre bias nelle prestazioni del tuo modello di machine learning.

Basta teoria! Passiamo subito al codice.

Un caso di studio in Python

Per questo caso di studio userai il dataset Pima Indians Diabetes. La descrizione del dataset è disponibile qui.

Il dataset riguarda compiti di classificazione in cui devi prevedere se una persona ha il diabete in base a 8 feature.

Ci sono in totale 768 osservazioni nel dataset. Il primo compito è caricare il dataset per poter procedere. Ma prima importiamo le dipendenze necessarie di cui avrai bisogno. Le altre potrai importarle man mano.

import pandas as pd
import numpy as np

Ora che le dipendenze sono state importate, carichiamo il dataset Pima Indians in un oggetto DataFrame con l'aiuto della libreria Pandas.

data = pd.read_csv("diabetes.csv")

Il dataset è stato caricato correttamente nell'oggetto DataFrame data. Ora, diamo un'occhiata ai dati.

data.head()
Dataframe

Qui puoi vedere 8 feature diverse etichettate con gli esiti 1 e 0, dove 1 indica che l'osservazione ha il diabete e 0 che non lo ha. È noto che il dataset presenta valori mancanti. In particolare, mancano osservazioni per alcune colonne indicate con il valore zero. Lo si deduce dalla definizione di quelle colonne ed è poco realistico avere zero per misure in cui non è valido, ad esempio indice di massa corporea o pressione sanguigna pari a zero.

Ma per questo tutorial userai direttamente la versione preprocessata del dataset.

# load data
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pd.read_csv(url, names=names)

Hai caricato i dati in un oggetto DataFrame chiamato dataframe.

Convertiamo ora il DataFrame in un array NumPy per ottenere calcoli più veloci. Inoltre, separiamo i dati in variabili distinte in modo che feature ed etichette siano separate.

array = dataframe.values
X = array[:,0:8]
Y = array[:,8]

Ottimo! Hai preparato i tuoi dati.

Per prima cosa implementerai un test statistico chi-quadro per feature non negative per selezionare 4 delle migliori feature dal dataset. Hai già visto che il test del chi-quadro appartiene alla classe dei metodi filtro. Se qualcuno è curioso di conoscere i dettagli del chi-quadro, questo video lo spiega molto bene.

La libreria scikit-learn fornisce la classe SelectKBest che può essere usata con una serie di test statistici diversi per selezionare un numero specifico di feature, in questo caso il chi-quadro.

# Import the necessary libraries first
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

Hai importato le librerie per eseguire gli esperimenti. Ora vediamole in azione.

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

# Summarize scores
np.set_printoptions(precision=3)
print(fit.scores_)

features = fit.transform(X)
# Summarize selected features
print(features[0:5,:])
[ 111.52  1411.887   17.605   53.108 2175.565  127.669    5.393  181.304]
[[148.    0.   33.6  50. ]
 [ 85.    0.   26.6  31. ]
 [183.    0.   23.3  32. ]
 [ 89.   94.   28.1  21. ]
 [137.  168.   43.1  33. ]]

Interpretazione:

Puoi vedere i punteggi per ciascun attributo e le 4 feature scelte (quelle con i punteggi più alti): plas, test, mass e age. Questi punteggi ti aiuteranno ulteriormente a determinare le migliori feature per addestrare il tuo modello.

P.S.: La prima riga indica i nomi delle feature. Per il preprocessing del dataset, i nomi sono stati codificati numericamente.

Successivamente implementerai la Recursive Feature Elimination, che è un tipo di metodo wrapper per la selezione delle feature.

La Recursive Feature Elimination (RFE) funziona rimuovendo ricorsivamente gli attributi e costruendo un modello sugli attributi rimanenti.

Usa l'accuratezza del modello per identificare quali attributi (e combinazioni di attributi) contribuiscono maggiormente alla previsione dell'attributo target.

Puoi saperne di più sulla classe RFE nella documentazione di scikit-learn.

# Import your necessary dependencies
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

Userai RFE con il classificatore Logistic Regression per selezionare le 3 feature principali. La scelta dell'algoritmo non è troppo importante, purché sia abile e coerente.

# Feature extraction
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Num Features: %s" % (fit.n_features_))
print("Selected Features: %s" % (fit.support_))
print("Feature Ranking: %s" % (fit.ranking_))
Num Features: 3
Selected Features: [ True False False False False  True  True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

Puoi vedere che RFE ha scelto le 3 feature principali: preg, mass e pedi.

Queste sono contrassegnate come True nell'array support e con la scelta “1” nell'array ranking. Ciò indica la forza di queste feature.

Ora userai la Ridge regression, che è una tecnica di regolarizzazione e anche un metodo embedded per la selezione delle feature.

Questo articolo fornisce un'ottima spiegazione della Ridge regression. Dagli un'occhiata.

# First things first
from sklearn.linear_model import Ridge

Ora userai la Ridge regression per determinare il coefficiente R2.

Inoltre, consulta la documentazione ufficiale di scikit-learn sulla Ridge regression.

ridge = Ridge(alpha=1.0)
ridge.fit(X,Y)
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

Per capire meglio i risultati della Ridge regression, implementerai una piccola funzione di supporto che ti aiuterà a stampare i risultati in modo più chiaro per interpretarli facilmente.

# A helper method for pretty-printing the coefficients
def pretty_print_coefs(coefs, names = None, sort = False):
    if names == None:
        names = ["X%s" % x for x in range(len(coefs))]
    lst = zip(coefs, names)
    if sort:
        lst = sorted(lst,  key = lambda x:-np.abs(x[0]))
    return " + ".join("%s * %s" % (round(coef, 3), name)
                                   for coef, name in lst)

Poi passerai i termini dei coefficienti del modello Ridge a questa piccola funzione e vedrai cosa succede.

print ("Ridge model:", pretty_print_coefs(ridge.coef_))
Ridge model: 0.021 * X0 + 0.006 * X1 + -0.002 * X2 + 0.0 * X3 + -0.0 * X4 + 0.013 * X5 + 0.145 * X6 + 0.003 * X7

Puoi vedere tutti i termini di coefficiente associati alle variabili di feature. Questo ti aiuterà ancora una volta a scegliere le feature più essenziali. Di seguito alcuni punti da tenere a mente quando applichi la Ridge regression:

  • È conosciuta anche come L2-regularization.
  • Per feature correlate, tende ad assegnare coefficienti simili.
  • Le feature con coefficienti negativi non contribuiscono molto. Ma in scenari più complessi con molte feature, questo punteggio ti aiuterà sicuramente nel processo decisionale finale di selezione delle feature.

Con questo si conclude la sezione del caso di studio. I metodi che hai implementato sopra ti aiuteranno a comprendere le feature di un particolare dataset in modo completo. Ecco alcuni punti critici su queste tecniche:

  • La selezione delle feature è essenzialmente parte del pre-processing dei dati, considerata la fase più dispendiosa in termini di tempo di qualsiasi pipeline di machine learning.
  • Queste tecniche ti aiuteranno ad affrontarla in modo più sistematico e compatibile con il machine learning. Sarai in grado di interpretare le feature con maggiore accuratezza.

Tiriamo le somme!

In questo post, hai affrontato uno degli argomenti statistici più studiati e ricercati, ovvero la selezione delle feature. Hai anche conosciuto le sue diverse varianti e le hai usate per vedere quali feature in un dataset sono importanti.

Puoi portare avanti questo tutorial integrando una misura di correlazione nel metodo wrapper e vedere come si comporta. Nel farlo, potresti finire per creare un tuo meccanismo di selezione delle feature. Così getti le basi per una tua piccola ricerca. I ricercatori stanno anche usando vari principi di soft computing per eseguire la selezione. Questo è a sua volta un intero campo di studio e ricerca. Inoltre, dovresti provare gli algoritmi esistenti di selezione delle feature su vari dataset e trarre le tue conclusioni.

Perché questi metodi tradizionali di selezione delle feature sono ancora validi?

Sì, è una domanda naturale. Perché esistono architetture di reti neurali (ad esempio le CNN) abbastanza capaci di estrarre le feature più significative dai dati, ma anche loro hanno dei limiti. Usare una CNN per un comune dataset tabellare che non presenta proprietà specifiche (quelle tipiche delle immagini, come proprietà di traslazione, bordi, proprietà posizionali, contorni, ecc.) non è la scelta più saggia. Inoltre, quando hai dati e risorse limitati, addestrare una CNN su dataset tabellari può rivelarsi un completo spreco. In situazioni del genere, i metodi che hai studiato torneranno sicuramente utili.

Di seguito trovi alcune risorse se vuoi approfondire l'argomento:

Qui sotto ci sono i riferimenti usati per scrivere questo tutorial.

Se hai dubbi, scrivili pure nei commenti!

Argomenti
Python

Corsi Python

Corso

Introduzione a Python

4 ore
7.1M
Impara le basi dell’analisi dei dati con Python in sole 4 ore. Questo corso online ti introduce all’interfaccia di Python e ai pacchetti più usati.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro