L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 2477

 

Si vous êtes intéressé, voici un script pour équilibrer les classes dans un problème de classification.

L'équilibrage est basé sur le rééchantillonnage de l'échantillon original en utilisant un modèle de mélange gaussien. Je conseille de l'utiliser, car dans les jeux de données locaux, les étiquettes de classe sont rarement équilibrées.

Cela permet d'économiser beaucoup de temps et de nerfs.

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 vous êtes intéressé, voici un script pour équilibrer les classes dans un problème de classification.

L'équilibrage est basé sur le rééchantillonnage de l'échantillon original en utilisant un modèle de mélange gaussien. Je conseille de l'utiliser, car dans les jeux de données locaux, les étiquettes de classe sont rarement équilibrées.

Cela permet d'économiser beaucoup de temps et de nerfs.

N'existe-t-il pas des bibelots standards en python pour cela ?

 
mytarmailS #:

N'y a-t-il pas de bibliothèque standard en Python pour cela ?

Il y en a probablement, mais je n'en ai pas rencontré.

 
iwelimorn #:

Pour ceux qui sont intéressés, voici un script pour équilibrer les classes dans un problème de classification.

L'équilibrage est basé sur le rééchantillonnage de l'échantillon original en utilisant un modèle de mélange gaussien. Je conseille de l'utiliser, car dans les jeux de données locaux, les étiquettes de classe sont rarement équilibrées.

Cela permet d'économiser beaucoup de temps et de nerfs.

Je pense que nous devons le préciser, lorsque nous résolvons des problèmes de classification avec des réseaux neuronaux.
Les forêts et les boostings n'ont pas besoin d'être équilibrés.

 
iwelimorn #:

Il existe probablement des bibliothèques de ce type, mais je n'en ai pas rencontré.

Je vois... C'est juste que R-ka a des tonnes de choses pour MO, et python est positionné comme un langage pour MO, et il n'a rien d'autre que 2-3 bibliothèques non verrouillées.

Ce n'est pas compréhensible((

 
elibrarius #:

Je pense que nous devons clarifier cela, lorsque nous résolvons des problèmes de classification avec des réseaux neuronaux.
Les forêts et les boostings ne nécessitent pas d'équilibrage.

Peut-être.

 
mytarmailS #:

Je vois... C'est juste que R-ka a beaucoup de choses pour MO, et python est positionné comme un langage pour MO, et il n'a rien d'autre que 2-3 binaires déverrouillés.

Je ne le comprends pas ((

Je ne suis pas familier avec R, j'étudie le MO en option et je ne suis qu'au début de ma gorge de désespoir avec Daning-Krueger.

 
mytarmailS #:

N'existe-t-il pas des bibelots standards en python pour cela ?

Il y a une bible utilisée là, juste enveloppée.
 
iwelimorn #:

Pour ceux qui sont intéressés, voici un script pour équilibrer les classes dans un problème de classification.

L'équilibrage est basé sur le rééchantillonnage de l'échantillon original en utilisant un modèle de mélange gaussien. Je conseille de l'utiliser, car dans les jeux de données locaux, les étiquettes de classe sont rarement équilibrées.

Cela permet d'économiser beaucoup de temps et de nerfs.

À mon avis, il s'agit davantage d'un effet de standardisation que d'équilibre. De plus, l'échantillonnage des distributions permet d'éviter le surentraînement
 
iwelimorn #:

Le début du voyage dans la gorge du désespoir

))) Tout ira bien !