Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 2477

 

Para los interesados, aquí hay un script para equilibrar las clases en un problema de clasificación.

El equilibrio se basa en el remuestreo de la muestra original mediante un modelo de mezcla gaussiano. Aconsejo su uso, porque en los conjuntos de datos locales las etiquetas de las clases rara vez están equilibradas.

Ahorra mucho tiempo y nervios.

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 #:

Si te interesa, aquí tienes un script para equilibrar las clases en un problema de clasificación.

El equilibrio se basa en el remuestreo de la muestra original mediante un modelo de mezcla gaussiano. Aconsejo su uso, ya que en los conjuntos de datos locales las etiquetas de clase rara vez están equilibradas.

Ahorra mucho tiempo y nervios.

¿No hay biblos estándar en python para esto?

 
mytarmailS #:

¿No hay ninguna biblioteca estándar en Python para esto?

Probablemente los haya, pero no me he encontrado con ninguno.

 
iwelimorn #:

Para los interesados, aquí hay un script para equilibrar las clases en un problema de clasificación.

El equilibrio se basa en el remuestreo de la muestra original mediante un modelo de mezcla gaussiano. Aconsejo su uso, ya que en los conjuntos de datos locales las etiquetas de clase rara vez están equilibradas.

Ahorra mucho tiempo y nervios.

Creo que hay que especificar eso, cuando se resuelven problemas de clasificación con redes neuronales.
Los bosques y los refuerzos no requieren un equilibrio.

 
iwelimorn #:

Probablemente haya bibliotecas así, pero no he encontrado ninguna.

Ya veo... Es que R-ka tiene toneladas de cosas para MO, y python se posiciona como un lenguaje para MO, y no tiene más que 2-3 librerías desbloqueadas.

Esto no es comprensible((

 
elibrarius #:

Creo que hay que aclararlo, cuando se resuelven problemas de clasificación con redes neuronales.
Los bosques y los refuerzos no requieren un equilibrio.

Tal vez.

 
mytarmailS #:

Ya veo... Es que R-ka tiene muchas cosas para MO, y python se posiciona como un lenguaje para MO, y no tiene más que 2-3 binarios desbloqueados.

No lo entiendo ((

No conozco R, estudio MO como optativa y apenas estoy en el inicio de mi desfiladero de desesperación con Daning-Krueger.

 
mytarmailS #:

¿No hay biblos estándar en python para esto?

Hay una biblia que se usa allí, sólo envuelta
 
iwelimorn #:

Para los interesados, aquí hay un script para equilibrar las clases en un problema de clasificación.

El equilibrio se basa en el remuestreo de la muestra original mediante un modelo de mezcla gaussiano. Aconsejo su uso, porque en los conjuntos de datos locales las etiquetas de las clases rara vez están equilibradas.

Ahorra mucho tiempo y nervios.

En mi opinión, hay más un efecto de normalización que de equilibrio. Además, el muestreo de las distribuciones ayuda a evitar el sobreentrenamiento
 
iwelimorn #:

El comienzo del viaje hacia el desfiladero de la desesperación

))) Todo irá bien.