[PYTHON] Création d'une méthode pour sous-échantillonner les données non équilibrées (pour la classification binomiale)

J'ai modifié le code dans le chapitre sur le sous-échantillonnage de cette page pour le faire fonctionner.

python


#Méthode pour s'assurer que le nombre de données positives et négatives dans les données de train est le même
#Référence: https://qiita.com/ryouta0506/items/619d9ac0d80f8c0aed92
#Cluster avec kmeans et échantillonner à un taux constant pour chaque cluster

# X :DataFrame des pandas
# target_column_name :nom de la classe. "Indicateur de début" etc.
# minority_label :Valeur d'étiquette minoritaire. Par exemple, "1".

def under_sampling(X, target_column_name, minority_label):
    
    #Cachez-le car il apparaît à chaque fois
    import warnings
    warnings.simplefilter('ignore', pd.core.common.SettingWithCopyWarning)
    
    #Diviser en majorité et en minorité
    X_majority = X.query(f'{target_column_name} != {minority_label}')
    X_minority = X.query(f'{target_column_name} == {minority_label}')

    #Clustering avec KMeans
    from sklearn.cluster import KMeans
    km = KMeans(random_state=43)
    km.fit(X_majority)
    X_majority['Cluster'] = km.predict(X_majority)

    #Calculer le nombre d'échantillons à extraire pour chaque cluster
    ratio = X_majority['Cluster'].value_counts() / X_majority.shape[0] 
    n_sample_ary = (ratio * X_minority.shape[0]).astype('int64').sort_index()
    
    #Extraire des échantillons pour chaque cluster
    dfs = []
    for i, n_sample in enumerate(n_sample_ary):
        dfs.append(X_majority.query(f'Cluster == {i}').sample(n_sample))
    
    #Assurez-vous de combiner également les données relatives aux minorités
    dfs.append(X_minority)
    
    #Créer des données après le sous-échantillonnage
    X_new = pd.concat(dfs, sort=True)
    
    #Supprimé car inutile
    X_new = X_new.drop('Cluster', axis=1)
    
    return X_new

Recommended Posts

Création d'une méthode pour sous-échantillonner les données non équilibrées (pour la classification binomiale)
[Python] Création d'une méthode pour convertir la base en 1 seconde
Une méthode d'étude pour les débutants pour apprendre l'analyse des séries chronologiques
Création d'un service qui vous permet de rechercher des données J-League
Comment envoyer une image visualisée des données créées en Python à Typetalk
Essayez d'utiliser PHATE, une méthode de réduction et de visualisation des données biologiques
Vous voulez résoudre un problème de classification simple?
[MNIST] Convertir les données en PNG pour les keras
Comment utiliser "deque" pour les données Python
J'ai créé un outil pour corriger les données GPS avec l'API Map Matching de Mapbox (Mapbox Map Matching API)
Lien vers les points de données du graphe créé par jupyterlab & matplotlib
Un mémorandum de méthode souvent utilisé lors de l'analyse de données avec des pandas (pour les débutants)
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for