Classe sbilanciata: class_weight per algoritmi ML in Spark MLLib


8

In python sklearn, ci sono più algoritmi (ad es. Regressione, foresta casuale ... ecc.) Che hanno il parametro class_weight per gestire i dati sbilanciati.

Tuttavia, non trovo tale parametro per gli algoritmi MLLib. Esiste un piano per implementare class_weight per alcuni algoritmi MLLib? O esiste un approccio in MLLib per i dati non bilanciati? O dobbiamo effettivamente gestire tutto il up / downsampling in MLLib?

Grazie!


Sì, gli algoritmi di Spark di MLLib sono pronti a gestire problemi complessi. Inoltre, dalla mia comprensione, non esiste nemmeno un modo per eseguire una divisione stratificata. Pertanto, le metriche delle prestazioni acquisite non verranno rappresentate in modo appropriato.
Samuel Sherman,

Ecco un esempio di regressione logistica ponderata in MLlib dalla documentazione 2.2.
Emre,

Risposte:


1

Gli algoritmi in MLLib sono sempre usati come base nello scenario di produzione e in effetti non sono in grado di gestire alcuni problemi industriali, come lo squilibrio delle etichette. Quindi, se vuoi usarli, devi bilanciare le tue istanze.

Inoltre, il meccanismo di BSP in Spark, puoi semplicemente vedere come dati paralleli , potrebbe essere il motivo principale per cui Spark non copre questo problema. Spark potrebbe essere difficile inviare istanze a tutti i nodi del cluster, mentre le istanze parziali di ciascun nodo condividono la stessa distribuzione di etichette dell'intero.

Alla fine, devi solo ponderare il valore di perdita per ogni minore istanza etichettata durante il processo di iterazione se vuoi implementarlo.

Spero che questo ti possa aiutare, buona fortuna -)


1

Uno dei modi in cui ho gestito classi sbilanciate in passato è stato quello di creare un classificatore basato su campioni di un set di dati per avere una suddivisione del campione 50/50. Ciò significa utilizzare tutti i punti dati associati alla classe di minoranza e campionare casualmente lo stesso numero di punti dati dalla classe di maggioranza.

Se questo funzionerà dipende dalla quantità di dati effettivamente presenti nella tua classe di minoranza - se hai uno squilibrio di classe estremo (<5% di istanze di classe di minoranza), allora potresti prendere in considerazione un sovracampionamento sintetico.

Probabilmente potresti guardare pydf.rdd.takeSample()in scintilla o df.samplein panda.


0

Il modo in cui ho gestito gli squilibri di classe è seguendo i seguenti metodi: 1. Unione della classe che appare meno frequentemente ad altre classi. Ovviamente dovresti usare un qualche tipo di conoscenza del dominio invece di unirli casualmente 2. Usa tecniche di ricampionamento come sovracampionamento, sottocampionamento, SMOTE, ADASYN. Non consiglio di usare queste tecniche perché in realtà non rappresentano i dati effettivi. Ma in ogni caso puoi sicuramente dare un'occhiata a loro


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.