Condividi tramite


SMOTE

Questo articolo descrive come usare il componente SMOTE nella finestra di progettazione di Azure Machine Learning per aumentare il numero di case sottorappresentate in un set di dati usato per l'apprendimento automatico. SMOTE è un modo migliore per aumentare il numero di casi rari rispetto alla semplice duplicazione dei casi esistenti.

Il componente SMOTE viene connesso a un set di dati sbilanciato. Esistono molti motivi per cui un set di dati potrebbe essere sbilanciato. Ad esempio, la categoria di destinazione potrebbe essere rara nella popolazione o i dati potrebbero essere difficili da raccogliere. In genere, si usa SMOTE quando la classe da analizzare è sottorappresentato.

Il componente restituisce un set di dati contenente gli esempi originali. Restituisce anche un numero di campioni di minoranza sintetica, a seconda della percentuale specificata.

Altre informazioni su SMOTE

La tecnica di overcampionamento delle minoranze sintetiche (SMOTE) è una tecnica statistica per aumentare il numero di casi nel set di dati in modo bilanciato. Il componente funziona generando nuove istanze da casi di minoranza esistenti forniti come input. Questa implementazione di SMOTE non modifica il numero di casi di maggioranza.

Le nuove istanze non sono solo copie dei casi di minoranza esistenti. L'algoritmo accetta invece campioni dello spazio delle funzionalità per ogni classe di destinazione e i relativi vicini più vicini. L'algoritmo genera quindi nuovi esempi che combinano le funzionalità del caso di destinazione con le caratteristiche dei relativi vicini. Questo approccio aumenta le caratteristiche disponibili per ciascuna classe e rende i campioni più generali.

SMOTE accetta l'intero set di dati come input, ma aumenta la percentuale solo dei casi di minoranza. Si supponga, ad esempio, di avere un set di dati sbilanciato in cui solo l'1% dei casi ha il valore A (la classe di minoranza) e il 99% dei case ha il valore B. Per aumentare la percentuale di casi di minoranza al doppio della percentuale precedente, immettere 200 per percentuale SMOTE nelle proprietà del componente.

Esempio

È consigliabile provare a usare SMOTE con un set di dati di dimensioni inferiori per verificarne il funzionamento. L'esempio seguente usa il set di dati Blood Donation disponibile nella finestra di progettazione di Azure Machine Learning.

Se si aggiunge il set di dati a una pipeline e si seleziona Visualizza nell'output del set di dati, è possibile osservare che le 748 righe o i case nel set di dati, 570 case (76%) sono di Classe 0 e 178 case (24%) sono della classe 1. Anche se questo risultato non è terribilmente sbilanciato, la classe 1 rappresenta le persone che hanno donato sangue, quindi queste righe contengono lo spazio delle funzionalità che si vuole modellare.

Per aumentare il numero di case, è possibile impostare il valore di percentuale SMOTE usando più di 100, come indicato di seguito:

Classe 0 Classe 1 total
Set di dati originale

(equivalente alla percentuale = SMOTE 0)
570

76%
178

24%
748
Percentuale SMOTE = 100 570

62%
356

38%
926
Percentuale SMOTE = 200 570

52%
534

48%
1.104
Percentuale SMOTE = 300 570

44%
712

56%
1,282

Avviso

L'aumento del numero di case tramite SMOTE non è garantito per produrre modelli più accurati. Provare a pipelining con percentuali diverse, set di funzionalità diversi e numeri diversi di vicini più vicini per vedere come l'aggiunta di case influisce sul modello.

Come configurare SMOTE

  1. Aggiungere il componente SMOTE alla pipeline. È possibile trovare il componente in Componenti trasformazione dati nella categoria Manipolazione .

  2. Connettere il set di dati da aumentare. Se si vuole specificare lo spazio delle funzionalità per la compilazione dei nuovi case, usando solo colonne specifiche o escludendo alcune, usare il componente Seleziona colonne nel set di dati . È quindi possibile isolare le colonne da usare prima di usare SMOTE.

    In caso contrario, la creazione di nuovi case tramite SMOTE si basa su tutte le colonne fornite come input. Almeno una colonna delle colonne delle funzionalità è numerica.

  3. Assicurarsi che la colonna contenente l'etichetta o la classe di destinazione sia selezionata. SMOTE accetta solo etichette binarie.

  4. Il componente SMOTE identifica automaticamente la classe di minoranza nella colonna etichetta e quindi ottiene tutti gli esempi per la classe di minoranza. Tutte le colonne non possono avere valori NaN.

  5. Nell'opzione percentuale SMOTE immettere un numero intero che indica la percentuale di destinazione dei case di minoranza nel set di dati di output. Ad esempio:

    • Immettere 0. Il componente SMOTE restituisce esattamente lo stesso set di dati fornito come input. Non aggiunge nuovi casi di minoranza. In questo set di dati la proporzione della classe non è stata modificata.

    • Immettere 100. Il componente SMOTE genera nuovi casi di minoranza. Aggiunge lo stesso numero di casi di minoranza presenti nel set di dati originale. Poiché SMOTE non aumenta il numero di casi di maggioranza, la percentuale di casi di ogni classe è cambiata.

    • Immettere 200. Il componente raddoppia la percentuale di casi di minoranza rispetto al set di dati originale. Ciò non comporta la presenza di un numero di casi minoritari pari al doppio di quanto prima. Le dimensioni del set di dati sono invece aumentate in modo che il numero di case di maggioranza rimanga invariato. Il numero di casi di minoranza viene aumentato fino a quando non corrisponde al valore percentuale desiderato.

    Nota

    Usare solo più di 100 per la percentuale SMOTE.

  6. Usare l'opzione Numero di vicini più vicini per determinare le dimensioni dello spazio delle funzionalità utilizzato dall'algoritmo SMOTE nella creazione di nuovi casi. Un vicino più vicino è una riga di dati (un caso) simile a un caso di destinazione. La distanza tra i due casi viene misurata combinando i vettori di peso di tutte le funzioni.

    • Aumentando il numero di vicini più vicini, si ottengono funzionalità da più casi.
    • Mantenendo basso il numero di vicini più vicini più vicini, si usano funzionalità più simili a quelle dell'esempio originale.
  7. Immettere un valore nella casella Valore di inizializzazione casuale se si desidera assicurarsi che gli stessi risultati vengano eseguiti nella stessa pipeline, con gli stessi dati. In caso contrario, il componente genera un valore di inizializzazione casuale basato sui valori di clock del processore quando viene distribuita la pipeline. La generazione di un valore di inizializzazione casuale può causare risultati leggermente diversi durante le esecuzioni.

  8. Inviare la pipeline.

    L'output del componente è un set di dati contenente le righe originali e un numero di righe aggiunte con casi di minoranza.

Note tecniche

  • Quando si pubblica un modello che usa il componente SMOTE , rimuovere SMOTE dalla pipeline predittiva prima che venga pubblicato come servizio Web. Il motivo è che SMOTE è destinato a migliorare un modello durante il training, non per l'assegnazione dei punteggi. È possibile che venga visualizzato un errore se una pipeline predittiva pubblicata contiene il componente SMOTE.

  • È spesso possibile ottenere risultati migliori se si puliscono valori mancanti o si applicano altre trasformazioni per correggere i dati prima di applicare SMOTE.

  • Alcuni ricercatori hanno esaminato se SMOTE è efficace sui dati ad alta dimensione o sparse, ad esempio i dati usati nella classificazione del testo o nei set di dati di genomica. Questo documento contiene un buon riepilogo degli effetti e della validità teorica dell'applicazione di SMOTE in tali casi: Blagus e Lusa: SMOTE per dati di classe altamente sbilanciati.

  • Se SMOTE non è efficace nel set di dati, è possibile includere altri approcci che è possibile includere:

    • Metodi per sovracampionare i casi di minoranza o sottocampionare i casi di maggioranza.
    • Tecniche di ensemble che aiutano direttamente l'apprendimento usando clustering, bagging o aumento adattivo.

Passaggi successivi

Vedere il set di componenti disponibili per Azure Machine Learning.