L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 2477

 

Per chi è interessato, ecco uno script per bilanciare le classi in un problema di classificazione.

Il bilanciamento si basa sul ricampionamento del campione originale utilizzando il modello di miscela gaussiana. Consiglio di usarlo, perché nei dataset locali le etichette di classe sono raramente bilanciate.

Risparmia un sacco di tempo e di nervi.

import pandas as pd
from sklearn import mixture
import numpy as np

class GMM(object):
    def __init__(self, n_components):
        self.gmm = mixture.GaussianMixture(
                                            n_components=n_components,
                                            covariance_type='full', verbose=0,
                                            max_iter=1000,
                                            tol=1 e-4,
                                            init_params='kmeans')
        self.name_col = []
        # print("GMM_model -- create")


    def fit_data(self, data):
        self.name_col =  data.columns
        self.gmm.fit(data)
        # print("GMM_model -- fit comlite")

    def get_samples(self, n_samp):
        generated = self.gmm.sample(n_samp)
        gen = pd.DataFrame(generated[0])
        for c in range(len(self.name_col)):
            gen.rename(columns={gen.columns[c]: self.name_col[c]}, inplace=True)

        return gen

def get_balance_dataset(X,Y, gmm=30,num_samples= 200, frac=1):
        '''
        X -             features
        Y -             targets [0,1]
        gmm -           number of mixture components
        num_samples -   number of samples for each class
        num_samples -   percentage of a random number of samples from the original sampling


        '''
    name_targ = Y.columns
    X_out = pd.DataFrame()
    Y_out = pd.DataFrame()
    for index,name in enumerate(name_targ):
        prt_data = pd.concat([X, Y[name]], axis=1)
        if frac!=1:
            prt_data = prt_data[prt_data[name] == 1].drop(columns=[name]).sample(frac=frac)
        else:
            prt_data = prt_data[prt_data[name] == 1].drop(columns=[name])

        gmm_1 = GMM(n_components=gmm)
        gmm_1.fit_data(prt_data)
        sig_X = gmm_1.get_samples(num_samples)
        sig_Y = np.zeros((num_samples, len(name_targ)))
        sig_Y[:, index] = 1
        sig_Y = pd.DataFrame(sig_Y, columns=name_targ)
        X_out = pd.concat([X_out, sig_X], axis=0)
        Y_out = pd.concat([Y_out, sig_Y], axis=0)

    return X_out.to_numpy(), Y_out.to_numpy()
 
iwelimorn #:

Se siete interessati, ecco uno script per bilanciare le classi in un problema di classificazione.

Il bilanciamento si basa sul ricampionamento del campione originale utilizzando il modello di miscela gaussiana. Consiglio di usarlo, perché nei dataset locali le etichette di classe sono raramente bilanciate.

Risparmia un sacco di tempo e di nervi.

Non ci sono bibbie standard in python per questo?

 
mytarmailS #:

Non ci sono librerie standard in Python per questo?

Probabilmente ce ne sono, ma non ne ho incontrato nessuno.

 
iwelimorn #:

Se siete interessati, ecco uno script per bilanciare le classi in un problema di classificazione.

Il bilanciamento si basa sul ricampionamento del campione originale utilizzando il modello di miscela gaussiana. Consiglio di usarlo, poiché nei dataset locali le etichette di classe sono raramente bilanciate.

Risparmia un sacco di tempo e di nervi.

Penso che sia necessario specificarlo, quando si risolvono problemi di classificazione con le reti neurali.
Le foreste e i potenziamenti non richiedono il bilanciamento.

 
iwelimorn #:

Probabilmente ci sono biblioteche come questa, ma non ne ho trovata nessuna.

Capisco... È solo che R-ka ha tonnellate di roba per MO, e python è posizionato come un linguaggio per MO, e non ha altro che 2-3 librerie sbloccate.

Questo non è comprensibile((

 
elibrario #:

Penso che dobbiamo chiarirlo, quando si risolvono problemi di classificazione con le reti neurali.
Le foreste e i potenziamenti non richiedono il bilanciamento.

Forse.

 
mytarmailS #:

Capisco... È solo che R-ka ha un sacco di roba per MO, e python è posizionato come un linguaggio per MO, e non ha altro che 2-3 binari sbloccati.

Non lo capisco ((

Non ho familiarità con R, studio MO come elettivo e sono solo all'inizio della mia gola di disperazione con Daning-Krueger.

 
mytarmailS #:

Non ci sono bibbie standard in python per questo?

C'è una bibbia usata lì, appena avvolta
 
iwelimorn #:

Per chi è interessato, ecco uno script per bilanciare le classi in un problema di classificazione.

Il bilanciamento si basa sul ricampionamento del campione originale utilizzando il modello di miscela gaussiana. Consiglio di usarlo, perché nei dataset locali le etichette di classe sono raramente bilanciate.

Risparmia un sacco di tempo e di nervi.

C'è più un effetto di standardizzazione che di bilanciamento qui, secondo me. Inoltre il campionamento dalle distribuzioni aiuta a evitare il sovrallenamento
 
iwelimorn #:

L'inizio del viaggio nella gola della disperazione

))) Tutto andrà bene!