[PYTHON] Erstellt eine Methode zum Downsample für nicht ausgeglichene Daten (für die Binomialklassifizierung).

Ich habe den Code im Unterabtastungskapitel von dieser Seite geändert, damit er funktioniert.

python


#Methode, um sicherzustellen, dass die Anzahl der positiven und negativen Daten in den Zugdaten gleich ist
#Referenz: https://qiita.com/ryouta0506/items/619d9ac0d80f8c0aed92
#Cluster mit kmean und Stichprobe mit konstanter Rate für jeden Cluster

# X :DataFrame von Pandas
# target_column_name :Name der Klasse. "Onset Flag" etc.
# minority_label :Minority Label Wert. Zum Beispiel "1".

def under_sampling(X, target_column_name, minority_label):
    
    #Verstecke es, weil es jedes Mal erscheint
    import warnings
    warnings.simplefilter('ignore', pd.core.common.SettingWithCopyWarning)
    
    #Teilen Sie sich in Mehrheit und Minderheit
    X_majority = X.query(f'{target_column_name} != {minority_label}')
    X_minority = X.query(f'{target_column_name} == {minority_label}')

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

    #Berechnen Sie, wie viele Proben für jeden Cluster extrahiert werden sollen
    ratio = X_majority['Cluster'].value_counts() / X_majority.shape[0] 
    n_sample_ary = (ratio * X_minority.shape[0]).astype('int64').sort_index()
    
    #Extrahieren Sie Proben für jeden Cluster
    dfs = []
    for i, n_sample in enumerate(n_sample_ary):
        dfs.append(X_majority.query(f'Cluster == {i}').sample(n_sample))
    
    #Stellen Sie sicher, dass Sie auch Minderheitendaten kombinieren
    dfs.append(X_minority)
    
    #Erstellen Sie Daten nach der Unterabtastung
    X_new = pd.concat(dfs, sort=True)
    
    #Gelöscht, weil es nicht nötig ist
    X_new = X_new.drop('Cluster', axis=1)
    
    return X_new

Recommended Posts

Erstellt eine Methode zum Downsample für nicht ausgeglichene Daten (für die Binomialklassifizierung).
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Eine Lernmethode für Anfänger zum Erlernen der Zeitreihenanalyse
Erstellt einen Dienst, mit dem Sie J-League-Daten durchsuchen können
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Versuchen Sie es mit PHATE, einer Methode zur Reduzierung und Visualisierung biologischer Daten
Möchten Sie ein einfaches Klassifizierungsproblem lösen?
[MNIST] Konvertiert Daten für Keras in PNG
Verwendung von "deque" für Python-Daten
Ich habe ein Tool zum Korrigieren von GPS-Daten mit der Map Matching API von Mapbox (Mapbox Map Matching API) erstellt.
Link zu den Datenpunkten des von jupyterlab & matplotlib erstellten Diagramms
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung