Ho un set di dati per il quale sto cercando di prevedere le variabili target.
Col1 Col2 Col3 Col4 Col5
1 2 23 11 1
2 22 12 14 1
22 11 43 38 3
14 22 25 19 3
12 42 11 14 1
22 11 43 38 2
1 2 23 11 4
2 22 12 14 2
22 11 43 38 3
Ho fornito un campione di dati, ma il mio ha migliaia di record distribuiti in modo simile. Qui, Col1, Col2, Col3, Col4 sono le mie caratteristiche e Col5 è la variabile target. Quindi la previsione dovrebbe essere 1,2,3 o 4 in quanto questi sono i miei valori per la variabile target. Ho provato a utilizzare algoritmi come foresta casuale, albero decisionale ecc. Per le previsioni.
Qui, se vedi, i valori 1,2 e 3 si verificano più volte rispetto a 4. Quindi, mentre predico, il mio modello è più distorto verso 1 2 e 3 mentre sto ottenendo solo un numero inferiore di previsioni per 4 (ne ho solo 1 previsto per policy4 su migliaia di record quando ho visto la matrice di confusione).
Per generalizzare il mio modello, ho rimosso in modo casuale la percentuale uguale di dati che appartiene ai valori 1,2 e 3. Ho raggruppato per ciascun valore in Col5 e quindi rimosso una certa percentuale, in modo da ridurre il numero di record. Ora potrei vedere un certo aumento della percentuale di accuratezza e anche un ragionevole aumento delle previsioni per il valore 4 nella matrice di confusione.
È questo l'approccio giusto da affrontare (rimuovere i dati in modo casuale da quei gruppi su cui il modello è distorto)?
Ho provato per algoritmi Python integrati come Adaboost, tecniche GradientBoost usando sklearn. Ho letto che questi algoritmi sono per la gestione della classe di squilibrio. Ma non sono riuscito a migliorare la mia precisione, piuttosto rimuovendo casualmente i dati, dove ho potuto vedere alcuni miglioramenti.
Questa riduzione è la tecnica del sottocampionamento ed è questo l'approccio giusto per il sottocampionamento?
Esistono pacchetti predefiniti in sklearn o qualche logica che posso implementare in python per farlo, se la mia rimozione casuale è errata?
Inoltre, ho imparato a conoscere la tecnica SMOTE, che si occupa di sovracampionamento. Dovrei provare questo per il valore 4? E possiamo farlo usando dei pacchetti integrati in Python? Sarebbe bello se qualcuno mi aiutasse in questa situazione.