Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten

Umgang mit fehlenden Werten

Mechanismus fehlender Werte

Bei der Vorverarbeitung des maschinellen Lernens kann es erforderlich sein, Daten zu verarbeiten, die einige fehlende Werte enthalten, wie unten gezeigt.

image.png

Wenn Sie auf die fehlenden Werte in diesen Daten nicht angemessen reagieren, treten die folgenden Probleme auf.

1, Kann keine statistischen Informationen wie Durchschnittswert und Standardabweichung erhalten Es ist nicht möglich, den Durchschnitt oder die Standardabweichung der Bewertungswerte aller sechs Personen anhand der Daten zu berechnen, die die fehlenden Werte enthalten. Dies macht es schwierig, verschiedene Analysen durchzuführen.

  1. Wenn Sie einfach die Daten mit fehlenden Werten löschen, werden die Daten verzerrt. Wenn Sie die Daten löschen, die nur ein NaN aus den vorherigen Daten enthalten, beträgt die Anzahl der Daten zwei. In diesem Fall werden einige Daten verschwendet und die verbleibenden Daten können verzerrt sein. Infolgedessen können Sie möglicherweise nicht die Informationen erhalten, die Sie ursprünglich durch Datenanalyse wissen wollten.

Aus diesen Gründen ist es notwendig, mit fehlenden Werten angemessen umzugehen, aber um mit ihnen angemessen umzugehen, ist es notwendig, den Mechanismus zu bestätigen, durch den fehlende Werte auftreten.

Es gibt die folgenden drei Muster für den Mechanismus, durch den fehlende Werte auftreten.

MCAR Abkürzung für "Vollständig fehlend", wenn die Wahrscheinlichkeit, dass ein Datenwert fehlt, für alle Daten irrelevant ist.

Erklären Sie anhand des obigen Datenbeispiels beispielsweise, wann ein fehlender Artikel aufgrund eines Fehlers in der Datei auftritt, in der das Fragebogenergebnis unabhängig von Alter, Geschlecht oder Bewertung aufgezeichnet wird, oder ob ein handschriftliches Fragebogenergebnis vorliegt. Zum Beispiel, wenn das Papier aufgrund von Reibung während des Transports versehentlich verschwindet.

MAR Abkürzung für Missing Random: Wenn bestimmte Daten beobachtet werden, kann die Wahrscheinlichkeit, dass ein Element fehlt, nur anhand der beobachteten Datenelemente außer dem fehlenden Element geschätzt werden.

Diese abstrakte Definition ist schwer zu verstehen, aber wenn Sie anhand des obigen Datenbeispiels erklären, ob das Geschlecht weiblich ist, sinkt die Wahrscheinlichkeit, das Alter im Fragebogen zu beantworten, auf ein bestimmtes Niveau, und wenn es männlich ist, unterscheidet es sich von weiblich. Es ist eine Situation, in der Sie das Alter mit der Wahrscheinlichkeit von beantworten. Um ein MAR zu sein, muss man auch davon ausgehen, dass das Alter selbst in dieser Situation keinen Einfluss auf den Altersmangel hat. In diesem Fall besteht bei Geschlechtsdaten eine gewisse Wahrscheinlichkeit, dass das Alter unter dieser Bedingung zufällig verloren geht.

NMAR Abkürzung für Nicht zufällig fehlen, wenn die Wahrscheinlichkeit, dass ein Artikel fehlt, vom Artikel selbst abhängt und die fehlende Rate des fehlenden Artikels nicht aus anderen Datenelementen als diesem Artikel geschätzt werden kann.

Wenn Sie anhand des obigen Datenbeispiels erklären, je älter Sie werden, desto weniger antworten Sie über das Alter, und ob Sie ein Mann oder eine Frau sind, wirkt sich nicht auf Ihren Altersmangel aus, und Sie können anhand des Geschlechtswerts keine Vorhersage treffen. Wenn aufgrund von NMAR ein Defekt vorliegt, kann dieser möglicherweise nicht mit der später beschriebenen Substitutionsmethode behoben werden. Daher muss die Erfassung von Daten in Betracht gezogen werden.

Umgang mit fehlenden Werten

Wir haben festgestellt, dass es drei Mechanismen gibt, durch die fehlende Werte auftreten: MCAR, MAR und NMAR.

Jetzt werde ich erklären, wie man mit den Defekten umgeht, die in jedem Mechanismus auftreten.

MCAR Im Fall von MCAR werden fehlende Werte zufällig generiert. Selbst wenn Sie eine im Datenbereinigungskurs eingeführte listweise Löschung (eine Methode zum Löschen aller Datenzeilen mit fehlenden Werten) durchführen, werden die Daten gelöscht. Es gibt keine Voreingenommenheit in. Es ist jedoch auch möglich, fehlende Werte mithilfe der später beschriebenen Substitutionsmethode zu ergänzen, z. B. wenn die Anzahl der Datenelemente durch Löschen extrem klein wird.

MAR Wenn im Fall von MAR die Daten mit fehlenden Werten gelöscht werden, werden die Daten verzerrt. Wenn beispielsweise eine Person mit weiblichem Geschlecht dazu neigt, das Alter nicht zu beantworten, und die Daten, die den fehlenden Wert im Alter enthalten, gelöscht werden, spiegelt das Ergebnis der Datenanalyse den Inhalt der männlichen Antwort stark wider. Ich werde am Ende. In diesem Fall sollten Sie den fehlenden Wert durch eine Substitutionsmethode (später erläutert) ergänzen, die den wahren Wert vorhersagt, der aus den beobachteten Daten in den fehlenden Wert aufgenommen werden soll.

NMAR Im Fall von NMAR führt das Löschen von Daten, die fehlende Werte enthalten, zu einer Verzerrung der Daten, und die fehlenden Datenelemente selbst wirken sich auf die fehlenden Werte aus, sodass fehlende Werte aus anderen beobachteten Datenelementen vorliegen. Kann nicht vorhergesagt werden. Daher sollten Sie grundsätzlich in Betracht ziehen, die Daten zu sammeln.

Methode zur Substitution fehlender Werte

Es gibt zwei Hauptmethoden zum Zuweisen fehlender Werte.

Einzelne Substitutionsmethode

Dies ist eine Methode, die die Durchschnittswertsubstitutionsmethode (siehe Datenbereinigung), die probabilistische Regressionssubstitutionsmethode, die Hot-Deck-Methode usw. verwendet, um die fehlenden Werte zu ergänzen und nur einen vollständigen Datensatz zu erstellen.

Mehrfachzuweisungsmethode

Ein Satz ist ein Zustand, in dem fehlende Werte vorhergesagt und aus den beobachteten Daten ergänzt werden. Erstellen Sie mehrere (dh mehrere) Sätze davon und erstellen Sie ein analytisches Modell für jeden Satz Dies ist die letzte Methode zur Integration der individuell erstellten Modelle.

Visualisierung fehlender Werte

Wenn Sie überlegen, wie Sie mit fehlenden Werten umgehen sollen, müssen Sie zunächst herausfinden, ob Ihre Daten fehlende Werte enthalten.

Dafür,
Pandas isnull()So überprüfen Sie einfach mit
Es gibt eine Methode zum Visualisieren und Erfassen des fehlenden Werts wie das fehlende Paket.

Wenn Sie isnull () mit Daten verwenden, die fehlende Werte enthalten, wie z. B. die zuvor eingeführten,

Zum Beispiel

import pandas as pd
data = pd.read_csv('./8000_data_preprocessing_data/missing_data_3_1_3.csv')
data.isnull().sum()

Wenn Sie die isnull () -Methode von dataFrame und die sum () -Methode ausführen, die den Gesamtwert jeder Spalte in Kombination berechnet, erhalten Sie das folgende Ergebnis und können sehen, wie viele fehlende Werte in welcher Spalte vorhanden sind. Ich werde.

#Ausgabeergebnis
rate    1
age     2
sex     2
dtype: int64

Mit missingno können Sie den Gesamtstatus fehlender Werte einfach visualisieren. Wenn Sie den Pandas DataFrame für die fehlende Matrixfunktion wie unten angegeben angeben,

import missingno as msno
%matplotlib inline
data = pd.read_csv('./8000_data_preprocessing_data/missing_data_3_1_3.csv')
msno.matrix(data)

image.png

Wo der weiße Teil des Bildes einen fehlenden Wert hat Auf der rechten Seite des Bildes wird die Anzahl der nicht fehlenden Datenelemente in dieser Zeile in einem vertikalen Liniendiagramm angezeigt.

Von den Zahlen, die im Falzliniendiagramm angezeigt werden Die Zahl links ist die Zeile mit den meisten fehlenden Die Zahlen auf der rechten Seite entsprechen der Anzahl der nicht fehlenden Datenelemente in der Zeile mit den geringsten Verlusten. Bei den im Bild angezeigten Daten beträgt die Anzahl der nicht fehlenden Datenelemente in der Zeile mit den meisten fehlenden "3". Daher können Sie sehen, dass in einer Zeile höchstens eines der vier Datenelemente fehlt. Sie erhalten das folgende Bild.

Einzelsubstitutionsmethode (Hot-Deck-Methode)

Die Einzelsubstitutionsmethode wird gemäß dem folgenden Zweck ordnungsgemäß verwendet.

1, wenn nur der Durchschnittswert fehlender Datenelemente bekannt sein muss

In diesem Fall wird es in Data Cleansing eingeführt Verwenden Sie die Durchschnittswertsubstitutionsmethode. Aber in diesem Fall Je mehr Daten einen Durchschnittswert haben, desto geringer ist die Verteilung der Zieldatenelemente. Nicht verfügbar, wenn Sie Varianz oder Fehler für die Analyse berücksichtigen möchten.

2, wenn Sie die Varianz fehlender Datenelemente in Ihrer Datenanalyse berücksichtigen möchten Verwenden Sie in diesem Fall eine probabilistische Regressionssubstitutionsmethode oder dergleichen, um den Fehlerterm unter Berücksichtigung der Varianz im Substitutionswert einzuschließen.

3, wenn es viele qualitative Daten gibt und es schwierig ist, den Substitutionswert aufgrund von Regression usw. parametrisch zu berechnen. In diesem Fall wird eine nicht parametrische Methode verwendet, die als Hot-Deck-Methode bezeichnet wird (ohne Annahmen über Parameter). Verwenden. Bei der Hot-Deck-Methode wird der fehlende Wert der Datenzeile (Empfänger genannt) berechnet, die den fehlenden Wert enthält. Ergänzen Sie den Wert einer anderen Datenzeile (als Spender bezeichnet), die den Wert des fehlenden Datenelements enthält.

Bei der Suche nach Spendern als Ergänzung zu den Empfängern wird die Nähe der Daten von den nächsten Nachbarn bestimmt. Verwenden Sie den Wert eines engen Spenders.

Hier
knnimpute
knnimpute.knn_impute_few_observed(matrix, missing_mask, k)Funktion
Ich werde die Einzelzuweisungsmethode anhand der verwendeten Hot-Deck-Methode erläutern.

Die Hauptargumente der Funktion knn_impute_few_observed (Matrix, fehlende_Maske, k) sind Es gibt drei unten. Weitere Informationen finden Sie in der Dokumentation auf der offiziellen Seite.

Matrix: Dies ist Numpys Np.Geben Sie die Daten des Matrixtyps an.
missing_mask:Dies sind Matrixdaten, die zeigen, wo in der Matrix die fehlenden Werte im Booleschen Typ enthalten sind. Muss die gleiche Form wie das Matrixargument haben.
k           :Das ist KNN(Mit einem Lehrer lernen(Einstufung)Referenz)Stellt einen nahe gelegenen Punkt dar, der berücksichtigt werden muss.

Ablauf der Mehrfachzuweisungsmethode

In den meisten Fällen möchten Sie nach dem Ausfüllen der fehlenden Werte in den Daten mit der Substitutionsmethode am Ende Folgendes tun Ich denke, es ist eine Parameterschätzung des analytischen Modells unter Verwendung der gesamten Daten einschließlich der ergänzten Werte.

Beispielsweise wird im Fall eines Regressionsmodells der Regressionskoeffizient vorhergesagt. Auch bei anderen Modellen für maschinelles Lernen möchten Sie einige Parameter schätzen.

Bei Verwendung der Einzelzuweisungsmethode werden fehlende Werte buchstäblich mit einem einzelnen Wert eingebettet. Sie können dann die ergänzten Daten verwenden, um ein analytisches Modell zu erstellen. Von dort aus können Sie die Parameterwerte des analytischen Modells schätzen.

Der durch die Einzelsubstitutionsmethode ergänzte Wert ist jedoch der vorhergesagte Wert, und es sollte Unsicherheit bestehen (dh der Fehler des vorhergesagten Werts). Wenn Sie die Parameter des analytischen Modells vorhersagen, ohne dies zu berücksichtigen Das Ergebnis spiegelt nicht die ursprüngliche Unsicherheit dieses Parameters wider

image.png

Bei der Mehrfachzuweisungsmethode wird zur Lösung dieses Problems die Datenvervollständigung mehrmals durchgeführt, um mehrere Datensätze zu erstellen, die Parameter des Analysemodells werden für die mehreren Datensätze separat geschätzt und schließlich wird ein Ergebnis erhalten. Integrieren in. Der Analysefluss der Mehrfachzuweisungsmethode, wenn drei Datensätze durch Ausführen von drei Abschlüssen erstellt werden, ist unten dargestellt. Die Mehrfachzuweisungsmethode (MICE) ist ein Beispiel für das lineare Mehrfachregressionsmodell. Ich werde tatsächlich gehen.

Verwenden Sie als Daten einschließlich fehlender Werte die folgenden Daten, die unter "Visualisierung fehlender Werte" dargestellt sind.

image.png

Diese Daten liegen unter dem Preis des Hauses und den mit dem Preis verbundenen Gegenständen (Entfernung vom Bahnhof, Alter, Größe (㎡)). Es gibt vier Daten.

image.png

Verwendung der Mehrfachzuweisungsmethode

Von Statistikmodellen
MICE(Multiple imputation by Chained Equations)Ist bequem zu bedienen.

In dieser Übung werden wir den Preis durch lineare multiple Regression aus den Daten der Entfernung von der Station, des Alters und der Größe vorhersagen.

Verwenden Sie beim Schreiben dieses linearen multiplen Regressionsmodells in Statistikmodellen den Spaltennamen des DataFrame Schreiben Sie wie folgt in eine Zeichenfolge.

'price ~ distance + age + m2'

Um kurz zu erklären, wie dieses Modell geschrieben wird, ist hier die Zielvariable der Preis. Es gibt drei erklärende Variablen: Entfernung, Alter und m2.

Die erklärenden Variablen sind Modelle, die linear mit + verbunden sind. Sie müssen die Koeffizienten beim Schreiben des Modells nicht berücksichtigen. Zwischen der Zielvariablen und der erklärenden Variablen wird ~ beschrieben, und der Preis wird durch die drei Variablen rechts von ~ vorhergesagt. Ausführliche Informationen zum Schreiben eines Modells in Statistikmodellen finden Sie auf der offiziellen Website von statsmodels.

In MICE von Statistikmodellen werden die Funktionen in der folgenden Reihenfolge ausgeführt, um die Mehrfachzuweisungsmethode auszuführen.

Im Fall eines multiplen Regressionsmodells wie 'y ~ x1 + x2 + x3 + x4' lautet der Beispielcode, der die obige Reihenfolge ausführt, wie folgt.

imp_data = mice.MICEData(data)
formula = 'y ~ x1 + x2 + x3 + x4'
model = mice.MICE(formula, sm.OLS, imp_data)
results = model.fit(10, 10)
print(results.summary())

Die Details sind so.

imp_data = mice.MICEData(data)
# 1,Mäuse ein MICEData-Objekt, um komplementäre Daten zu verarbeiten.MICEData(data)Erstellt mit einer Funktion

formula = 'y ~ x1 + x2 + x3 + x4'
# 2,Formel für lineares Modell erstellen(Den Preis habe ich vorher erklärt~ distance + age +Ausdruck wie m2)

model = mice.MICE(formula, sm.OLS, imp_data)
# 3,mice.MICE(formula, optimizer, imp_data)Analytisches Modell mit Funktion(MICE-Objekt)Erstellen
# (Hier, da es sich um eine multiple Regression handelt, sm für Optimierer.Verwenden Sie OLS)

results = model.fit(10, 10) #Komplementäre Bearbeitung 10 mal,Anzahl der Datensätze 10
# 4,MICE Objekt passt(n_burnin, n_imputation)Mit der Methode,
#Ergebnisse durch Optimierung des Analysemodells für die Daten(MICEResults-Objekt)Erhalten
# (Das erste Argument der Anpassungsmethode ist, wie oft der Prozess für einen Abschluss wiederholt wird, und das zweite Argument ist die Anzahl der Datensätze, die durch Abschluss erstellt werden sollen.)

print(results.summary())
# 5,Zusammenfassung des optimierten Ergebnisinhalts des MICEResult-Objekts()Mit Methode bestätigen

Das resultierende Beispiel sieht folgendermaßen aus:

                   Results: MICE
=================================================================
Method:                    MICE       Sample size:           1000
Model:                     OLS        Scale                  1.00
Dependent variable:        y          Num. imputations       10
-----------------------------------------------------------------
           Coef.  Std.Err.    t     P>|t|   [0.025  0.975]  FMI
-----------------------------------------------------------------
Intercept -0.0234   0.0318  -0.7345 0.4626 -0.0858  0.0390 0.0128
x1         1.0305   0.0578  17.8342 0.0000  0.9172  1.1437 0.0309
x2        -0.0134   0.0162  -0.8282 0.4076 -0.0451  0.0183 0.0236
x3        -1.0260   0.0328 -31.2706 0.0000 -1.0903 -0.9617 0.0169
x4        -0.0253   0.0336  -0.7520 0.4521 -0.0911  0.0406 0.0269
=================================================================

Das Endergebnis ist ein Parameter, der durch Integration mehrerer komplementärer Datensätze geschätzt wird. Dieses Beispiel gibt die Ergebnisse an, welche Gewichte x1, x2, x3 und x4 mit y korrelieren.

Ausreißererkennung

Probleme durch Ausreißer

Ausreißer sind Daten, die erheblich von anderen Daten abweichen. Wenn die Ausreißer gemischt sind, treten die folgenden Probleme auf.

In diesem Abschnitt wird beschrieben, wie Sie Ausreißer erkennen und ausschließen.

Visualisierung von Ausreißern

Es ist leicht zu erkennen, ob Ausreißer vorhanden sind, indem zunächst eine einfache Visualisierung der Daten vorgenommen wird.

Für diese Visualisierung

Sie können Seaborn Box Plot verwenden.

Boxplot ist eine Funktion, die ein sogenanntes Box-Whisker-Diagramm zeichnet, wie in der folgenden Abbildung dargestellt. Der Ausreißer wird mit einer Diamantmarkierung angezeigt.

image.png

Die Hauptargumente der Boxplot-Funktion sind:

image.png

Im Fall der vorherigen Abbildung wird dies wie folgt angegeben.

import pandas as pd
import seaborn as sns

data = pd.read_csv('outlier_322.csv')
sns.boxplot(y=data['height'])

Wenn die Daten zweidimensional sind

Durch die Verwendung eines gemeinsamen Diagramms können Sie leicht feststellen, ob Ausreißer vorhanden sind.

Jointplot hat keine Funktion zum Anzeigen von Ausreißern mit einer Diamantmarkierung. Überprüfen Sie visuell, ob etwas nicht in Ordnung ist. Die Hauptargumente der Jointplot-Funktion sind:

image.png

Hier ist ein Skript, das ein gemeinsames Diagramm in einem bekannten Iris-Datensatz anzeigt:

import pandas as pd
import seaborn as sns

#Irisdaten lesen
iris = sns.load_dataset("iris")
sns.jointplot('sepal_width', 'petal_length', data=iris)

image.png

Ausreißererkennung durch LOF

Welche Daten sind die Ausreißer, um den Ausreißer auszuschließen? Es muss von einem bestimmten Standard erkannt werden. Es gibt verschiedene Methoden für diese Erkennung.

Zunächst werden wir LOF (Local Outlier Factor) einführen, der Ausreißer anhand der Datendichte erkennt.

LOF verfügt über die folgenden Funktionen.

Die Beurteilung von Ausreißern durch LOF ist ein Skikit-Sie können dies einfach mithilfe der Lernfunktion tun.

Verwenden Sie im LOF von scikit-learn zunächst die LocalOutlierFactor-Funktion. Erstellen Sie ein Klassifizierungsmodell mit Parametern.

Der Parameter gibt hauptsächlich an, wie viele Nachbarschaftspunkte verwendet werden sollen (n_neighbors). (Detaillierte Parameter finden Sie in der offiziellen Dokumentation.) Beschreiben Sie wie folgt.

clf = LocalOutlierFactor(n_neighbors=20)

Nächster

#Vom Modell
fit_predict(data)
#Die Methode trainiert die Daten, um Ausreißer zu erkennen.

Sie können einen Pandas DataFrame direkt an die Argumentdaten übergeben.

predictions = clf.fit_predict(data)
array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,
        1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1, -1,  1,  1,  1,
        1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,
       -1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1])

Der Wert ist -1 für die Datenzeile, die als Ausreißer betrachtet wird, und 1 für die Datenzeile, die als normaler Wert betrachtet wird.

Verwenden Sie dieses Ergebnis, wenn Sie die Daten wie folgt angeben Sie können die Zeilen abrufen, die in den Originaldaten als Ausreißer angesehen wurden.

data[predictions == -1]

Die folgende Abbildung zeigt die Irisdaten, die bei k = 20 als Ausreißer vorhergesagt wurden. Der Rückgabewert der Methode fit_predict () ist ein Array wie das folgende.

image.png

Klicken Sie hier für Anwendungsbeispiele

import numpy as np
import pandas as pd
from sklearn.neighbors import LocalOutlierFactor

np.random.seed(0)
data = pd.read_csv('./8000_data_preprocessing_data/outlier_ex.csv')

clf = LocalOutlierFactor(n_neighbors=20)
predictions = clf.fit_predict(data)
data[predictions == -1]

Erkennung von Ausreißern durch IsolationForest

LOF war eine Methode, bei der die Dichte der Datenpunkte zur Beurteilung herangezogen wurde. Hier als andere Methode

Isolation Forest ()Ich möchte _______ vorstellen

Isolation Forest weist die folgenden Funktionen auf.

Im Beispiel der Irisausreißererkennung kann der Algorithmus kurz wie folgt erklärt werden.

  1. Teilen Sie die Daten zufällig durch ein bestimmtes Datenelement (hier in der Nähe von 2.1 auf der y-Achse).

image.png

  1. Teilen Sie die Daten zufällig (hier um 2,7 auf der x-Achse) durch ein anderes Datenelement als 1.

image.png

  1. Daten, die nicht mehr geteilt werden können (roter Punkt unten links in der Abbildung), können in zwei Abteilungen erstellt werden. Notieren Sie die Tiefe daher als 2.

  2. Wiederholen Sie 1-3, um die durchschnittliche Tiefe jedes Punkts zu berechnen

Je größer der Abweichungswert ist, desto kleiner ist die durchschnittliche Tiefe (es ist wahrscheinlich, dass er leicht von anderen Punkten getrennt werden kann). Datenpunkte mit geringer Tiefe können als Ausreißer beurteilt werden.

Isolation Forest kann auch Scikit-Learn verwenden, um Ausreißer vorherzusagen, ähnlich wie bei LOF.

Erstellen Sie zunächst ein Klassifizierungsmodell mit der Funktion IsolationForest ().

clf = IsolationForest()

Trainieren Sie anschließend die Daten mit der Methode fit () des Modells.

clf.fit(data)

Danach wird die Predict () -Methode verwendet, um die Ausreißer zu bestimmen und vorherzusagen.

predictions = clf.predict(data)

Als Rückgabewert der Predict () -Methode wird das folgende Array erhalten.

array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,  1,
        1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,
        1,  1,  1,  1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1, -1, -1,
       -1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1])

Der Wert ist -1 für die Datenzeile, die als Ausreißer betrachtet wird, und 1 für die Datenzeile, die als normaler Wert betrachtet wird.

Mit diesem Ergebnis können Sie die Daten wie folgt angeben, um die Zeilen zu erhalten, die in den Originaldaten als Ausreißer angesehen wurden.

data[predictions == -1]

Irisdaten, die von Isolation Forest als Ausreißer vorhergesagt wurden Die Darstellung sieht wie in der folgenden Abbildung aus.

image.png

import numpy as np
import pandas as pd
from sklearn.ensemble import IsolationForest

np.random.seed(0)
data = pd.read_csv('./8000_data_preprocessing_data/outlier_ex.csv')

#Anwendungsbeispiel.
clf = IsolationForest()
clf.fit(data)
predictions = clf.predict(data)
data[predictions == -1]

Anpassung von Ungleichgewichtsdaten

Probleme durch unausgeglichene Daten

Unausgeglichene Daten sind kategoriale oder binäre Datenelemente anstelle von numerischen Typen. Bestimmte Werte für dieses Element sind entweder zu hoch oder zu niedrig, was zu einem Ungleichgewicht in der Häufigkeit der Datenwerte führt.

Insbesondere wenn ein bestimmtes Datenelement Werte von 0 und 1 hat, sind 990 von 1000 Daten 1 Wenn 10 Fälle wie 0 sind.

Wenn Sie in einem solchen Fall den Wert des Datenelements vorhersagen und ihn immer als 1 vorhersagen, besteht eine 99% ige Wahrscheinlichkeit, dass die Vorhersage korrekt ist. Wenn jedoch die Vorhersage eines Nullfalls eine wichtige Voraussetzung war, macht dieses Vorhersagemodell überhaupt keinen Sinn.

Bevor Sie die unausgeglichenen Daten im maschinellen Lernmodell trainieren, Um falsche Vorhersagen durch unausgeglichene Daten zu vermeiden Die Daten können angepasst werden.

Bevor Sie sich auf unausgeglichene Daten einstellen, müssen Sie zunächst prüfen, ob unausgeglichene Daten vorhanden sind.

Dafür

Pandas Wert_counts()Es ist einfach, die Methode zu verwenden.

Wenn Sie die Häufigkeit der Überlebensdaten der berühmten Titanic überprüfen möchten, schreiben Sie wie folgt.

titanic['survived'].value_counts()

Dann können Sie die Häufigkeit jedes Wertes wie folgt kennen.

0    549
1    342
Name: survived, dtype: int64

Es gibt drei Einstellmethoden:

Überabtastung

Eine Methode zum Duplizieren und Erhöhen von Daten, die seltene Werte in den Fällen enthalten, die Sie vorhersagen möchten. Im vorherigen Beispiel werden die Daten mit 0, was nur 1% entspricht, dupliziert und erhöht.

Unterabtastung

So reduzieren Sie Daten, die häufige Werte enthalten, in den Fällen, die Sie vorhersagen möchten. Im vorherigen Beispiel reduzieren wir die Daten mit 1, was 99% entspricht.

Eine Methode, die Oversampling und Undersampling kombiniert

Im vorherigen Beispiel werden wir die Daten mit 1 reduzieren und die Daten mit 0 erhöhen.

Unterabtastung unausgeglichener Daten

In dem Fall, in dem Sie vorhersagen möchten, welche Art von Daten 1 sind, wenn Sie ein Auto kaufen, und 0, wenn Sie es nicht gekauft haben. Es wird wie folgt sein.

Positives Beispiel:Datenzeile mit Kauf 1 in den Trainingsdaten
Negatives Beispiel:Datenzeilen, die nicht gekauft wurden und 0 sind

In den Trainingsdaten sind diese positiven und negativen Beispiele unausgewogen. Wenn es nur wenige positive und überwiegend viele negative Fälle gibt (wenn viele nicht gekaufte Daten vorliegen) Durch zufälliges Löschen und Reduzieren dieses negativen Beispiels ist es möglich, das Datenungleichgewicht zu verringern.

Unterabtastung.

Für die Unterabtastung von unausgeglichenen Daten

imbalanced-Es ist einfach zu lernen.

Es gibt verschiedene Methoden, aber hier

Verwenden Sie RandomUnderSampler, um Daten zufällig zu löschen.

Wenn Sie das Verhältnis von RandomUnderSampler reduzieren möchten Geben Sie die Mehrheit (häufig) im Argumentverhältnis an, wie im folgenden Beispielcode gezeigt.

Für das Verhältnis können Sie auch andere Feinverhältnisse im Wörterbuchformat angeben. Die Werte, die für das Verhältnis angegeben werden können, entnehmen Sie bitte dem offiziellen Dokument.

rus = RandomUnderSampler(ratio = 'majority')

Nach dem Erstellen von RandomUnderSampler Übergeben Sie die Daten, die im Voraus in die Zielvariable und die erklärende Variable unterteilt sind, als Argument wie folgt Erhalten Sie die Daten nach der Unterabtastung.

X_resampled, y_resampled = rus.fit_sample(X, y)
import numpy as np
import pandas as pd
from imblearn.under_sampling import RandomUnderSampler

np.random.seed(0)

data = pd.read_csv('./8000_data_preprocessing_data/imbalanced_ex.csv')
y = data['purchased']
X = data.loc[:, ['income', 'age', 'num_of_children']]

#Klicken Sie hier für Anwendungsbeispiele
rus = RandomUnderSampler(ratio = 'majority')
X_resampled, y_resampled = rus.fit_sample(X, y)
(X_resampled, y_resampled)

Überabtastung ausgeglichener Daten

Bei der Unterabtastung wurde das Ungleichgewicht behoben, indem die große Anzahl negativer Fälle reduziert wurde. Umgekehrt wird das Beseitigen von Ungleichgewichten durch Erhöhen der Anzahl positiver Beispiele als Überabtastung bezeichnet.

Beim Untersampling wurden nur vorhandene Daten gelöscht Das Überabtasten erfordert einige Schritte, um die Daten zu erhöhen.

Es gibt verschiedene Möglichkeiten, dies zu erhöhen, aber die einfachste Möglichkeit, dies zu erhöhen Es gibt eine Möglichkeit, vorhandene Daten zufällig aufzublasen.

Daten zufällig aufblasen

imbalanced-Learn verwendet RandomOverSampler.

RandomOverSampler Es ist fast dasselbe wie bei der Verwendung von Random UnderSampler für das Downsampling. Verwenden Sie es wie folgt.

Der einzige Unterschied besteht darin, dass dadurch die Anzahl der seltenen Beispiele erhöht wird.

zu Verhältnis'minority'Ist anzugeben.

Wie bei RandomUnderSampler können Sie ein feines Verhältnis für das Verhältnis angeben. Das detaillierte Muster der Argumentspezifikation finden Sie im offiziellen Dokument.

ros = RandomOverSampler(ratio = 'minority')
X_resampled, y_resampled = ros.fit_sample(X, y)
import numpy as np
import pandas as pd
from imblearn.over_sampling import RandomOverSampler

np.random.seed(0)

data = pd.read_csv('./8000_data_preprocessing_data/imbalanced_ex.csv')
y = data['purchased']
X = data.loc[:, ['income', 'age', 'num_of_children']]

#Klicken Sie hier für Anwendungsbeispiele
ros = RandomOverSampler(ratio = 'minority')
X_resampled, y_resampled = ros.fit_sample(X, y)
(X_resampled, y_resampled)

Anpassung unausgeglichener Daten mit SMOTE-ENN

Über- und Unterabtastung beim Anpassen unausgeglichener Daten Es gibt auch eine Methode, um beide zu verwenden, nicht nur eine.

imbalanced-In lernen

Zum Oversampling
SMOTE(Synthetic minority over-sampling technique)

Zur Unterabtastung
ENN(Edited Nearest Neighbours)verwenden
SMOTE-Sie können ENN verwenden.

SMOTE verfügt über die folgenden Funktionen.

ENN verfügt über die folgenden Funktionen.

Verwendung von SMOTE-ENN Ähnlich wie RandomUnderSampler und RandomOverSampler

Der Unterschied besteht darin, dass Sie die Werte von k_neighbors angeben, die in SMOTE verwendet werden, und n_neighbors, die in ENN verwendet werden. In der offiziellen Dokumentation finden Sie eine detaillierte Beschreibung anderer optionaler Parameter. Der Beispielcode lautet wie folgt.

sm_enn = SMOTEENN(smote=SMOTE(k_neighbors=3), enn=EditedNearestNeighbours(n_neighbors=3))
X_resampled, y_resampled = sm_enn.fit_sample(X, y)
import numpy as np
import pandas as pd
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import EditedNearestNeighbours
from imblearn.combine import SMOTEENN

np.random.seed(0)

data = pd.read_csv('./8000_data_preprocessing_data/imbalanced_ex.csv')
y = data['purchased']
X = data.loc[:, ['income', 'age', 'num_of_children']]

#Grundlegende Verwendung ist wie folgt
sm_enn = SMOTEENN(smote=SMOTE(k_neighbors=3), enn=EditedNearestNeighbours(n_neighbors=3))
X_resampled, y_resampled = sm_enn.fit_sample(X, y)
(X_resampled, y_resampled)

Recommended Posts

Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
Vorverarbeitung beim maschinellen Lernen 3 Fehlende Wert- / Ausreißer- / Ungleichgewichtsdaten
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
Vorverarbeitung beim maschinellen Lernen 4 Datenkonvertierung
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
[Python] Datenanalyse, maschinelles Lernen (Kaggle) -Datenvorverarbeitung-
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Liste der wichtigsten Wahrscheinlichkeitsverteilungen, die beim maschinellen Lernen und in der Statistik verwendet werden, sowie Code in Python
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Informationen zur Datenvorverarbeitung von Systemen, die maschinelles Lernen verwenden
[Maschinelles Lernen] "Erkennung von Abnormalitäten und Erkennung von Änderungen" Zeichnen wir die Abbildung von Kapitel 1 in Python.
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Vergleich der Datenrahmenbehandlung in Python (Pandas), R, Pig
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 1)
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Umgang mit JSON-Dateien in Python
Klassifikation und Regression beim maschinellen Lernen
Maschinelles Lernen in Delemas (Datenerfassung)
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex5 (Anpassung der Regularisierungsparameter)
Unausgeglichenes Datenlernen mit maschinellem Lernen k-NN
[Python] Techniken, die häufig beim maschinellen Lernen verwendet werden
Struktur und Betrieb der Python-Daten (Python-Lernnotiz ③)
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
Zeichnen Sie Daten einfach in Shell und Python
Trennung von Design und Daten in matplotlib
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Modulimport und Ausnahmebehandlung in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Beachten Sie, dass ich den Algorithmus des maschinell lernenden Naive Bayes-Klassifikators verstehe. Und ich habe es in Python geschrieben.
Datenversorgungstricks mit deque beim maschinellen Lernen
Python-Variablen und Datentypen, die mit Chemoinfomatik gelernt wurden
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Empfangen und Anzeigen von HTML-Formulardaten in Python
Numerai Turnier-Fusion von traditionellen Quants und maschinellem Lernen-
[Python] Vertauschen von Zeilen und Spalten mit Numpy-Daten
Python & Machine Learning Study Memo Introduction: Einführung in die Bibliothek
Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
Maschinelles Lernen Aufteilung der Trainingsdaten und Lernen / Vorhersage / Verifizierung
Zusammenfassung der beim maschinellen Lernen verwendeten Bewertungsfunktionen
Die Geschichte des Lesens von HSPICE-Daten in Python
Grundlegende Datenrahmenoperationen, die von Anfängern in einer Woche Python-Lernen geschrieben wurden
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Maschinelles Lernen mit Docker (40) mit Anaconda (40) "Hands-On Data Science und Python Machine Learning" von Frank Kane
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
Vorhersage der Zielzeit eines vollständigen Marathons mit maschinellem Lernen - Visual: Visualisierung von Daten mit Python-
Aufteilen von Trainingsdaten für maschinelles Lernen in objektive Variablen und andere in Pandas
[Python-Anfängermemo] Bedeutung und Methode zur Bestätigung des fehlenden NaN-Werts vor der Datenanalyse
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure