[PYTHON] Feature-Vorverarbeitung für die Modellierung

Einführung

Notieren Sie sich die "Vorverarbeitung von Funktionen für die Modellierung", wenn Sie die Daten selbst analysieren. EDA usw. von Daten vor der Vorverarbeitung Tipps und Vorsichtsmaßnahmen beim Analysieren von Daten Bitte beziehen Sie sich darauf, wie es in beschrieben ist.

Was bei der Vorverarbeitung wichtig ist, ist *** ・ Verarbeitung fehlender Werte *** *** ・ Welche Art von Merkmalsmenge muss vorverarbeitet werden ***.

In diesem Artikel


Vorherige Informationen
Dieses Mal werde ich die Verwendung der im Kaggle-Wettbewerb verwendeten Daten erläutern. Kaggle House Prices DataSet

Kaggle House Prices Kernel Machen Sie sich eine Notiz mit.

Bitte beachten Sie, dass wir uns nicht um die Modellgenauigkeit usw. kümmern, da wir diese für Memo aufbewahren


Inhalt der Daten
Insgesamt gibt es 81 Funktionen, von denen SalePrices als Zielvariable (Ziel) für die Analyse verwendet wird. Die erklärenden Variablen sind andere als SalePrices.

Verarbeitung fehlender Werte

Überprüfen Sie zunächst den Inhalt der Daten. Wenn die Daten fehlende Werte enthalten, gibt es zwei Ansätze, um die fehlenden Werte zu beseitigen. "1. Löschen Sie die Spalte oder Zeile mit dem fehlenden Wert." "2. Ergänzen Sie die Lücken mit einem anderen numerischen Wert für den fehlenden Wert."

Wenn Sie dies tun, ist es wichtig zu beachten, *** warum die Daten analysiert werden und was Sie als Ausgabe ausgeben möchten ***. Es gibt zwei mögliche Gründe für die Datenanalyse: *** Der erste ist die Konstruktion eines Modells, das die Zielvariable (Ziel) genau vorhersagt, und der zweite ist das Verständnis der Daten ***. Wenn beim Erstellen des ersten Modells, das mit hoher Genauigkeit vorhersagt, Spalten und Zeilen mit fehlenden Werten unnötig gelöscht werden, kann die Anzahl der Daten erheblich reduziert werden. Man kann sagen, dass dies keine gute Idee ist. Daher ist es eine gute Idee, den fehlenden Wert durch einen anderen numerischen Wert zu ergänzen. Ein typisches Beispiel ist derzeit die Ergänzung mit dem Durchschnittswert. Wenn es jedoch um das Verständnis von Daten geht, kann eine Überänderung der Daten zu einem Missverständnis der Daten führen. *** Mit anderen Worten, wenn es um fehlende Werte geht, ist es wichtig, was bei der Analyse der Daten wichtig ist. *** ***

Unten finden Sie den Code für "1. Spalten und Zeilen mit fehlenden Werten löschen", "2. Ergänzen (Ausfüllen) mit unterschiedlichen Nummern für fehlende Werte".


import pandas as pd

## load Data
df = pd.read~~~~(csv , json etc...)  

## count nan
df.isnull().sum()

スクリーンショット 2020-08-23 17.56.44.png Aus der obigen Abbildung ist ersichtlich, dass die Daten dieses Mal fehlende Werte enthalten. Jetzt möchte ich fehlende Werte für * LotFrontage * verarbeiten.

Löschen Sie Spalten und Zeilen mit fehlenden Werten dropna ()

-. dropna (wie = "???", Achse = (0 oder 1)): wie = ??? ist eine oder alle, Achse = 0, falls vorhanden, Spalte, wenn 1

Falls vorhanden, wird die Spalte oder Zeile mit mindestens einem fehlenden Wert gelöscht. Andererseits werden bei allen Spalten oder Zeilen, in denen alle Werte fehlen, Werte gelöscht.

df.dropna(how="any", axis=0)

スクリーンショット 2020-08-23 18.10.55.png

df.dropna(how="all", axis=0)

スクリーンショット 2020-08-23 18.11.35.png

Wenn überhaupt ein fehlender Wert enthalten ist, wird der angegebene Achsenwert gelöscht. Infolgedessen beträgt die Form von df (0,81). In allen Fällen wird der angegebene Achsenwert gelöscht, wenn alle fehlenden Werte enthalten sind. Infolgedessen ist die Form von df (1460,81).

*** *** Wenn Sie eine Zeile / Spalte löschen möchten, deren Wert in einer bestimmten Zeile oder Spalte fehlt

-. dropna (subset = ["???"]): Wählen Sie eine bestimmte Spalte / Zeile mit subset aus

df.dropna(subset=["LotFrontage"])

スクリーンショット 2020-08-23 18.20.01.png

Wenn eine bestimmte Spalte / Zeile einen fehlenden Wert enthält und eine Untermenge als Argument verwendet, kann diese Spalte / Zeile gelöscht werden. Dieses Argument kann manchmal effektiv funktionieren.

Füllen Sie die fehlenden Werte mit einem anderen numerischen Wert aus (füllen Sie aus) fillna ()

-. fillna (???, inplace = bool (True of False)): Das ursprüngliche Objekt kann durch Angabe von fill (fill in) oder inplace mit einem beliebigen Wert in ??? geändert werden.

Wenn inplace = True, kann es aktualisiert werden, ohne den Speicher zu vergrößern. Da das Objekt jedoch aktualisiert wird, ist es schwierig, es wiederzuverwenden. .. .. .. .. .. Daher wird empfohlen, ein neues Objekt für nicht große Datenmengen zu erstellen. (Persönliche Meinung ...)

#Füllen Sie die Lücken mit 0 für NAN aus.
df.fillna(0)

#Beim Ausfüllen für mehrere Spalten
df.fillna({'LotFrontage': df["LotFrontage"].mean(),'PoolArea': df["PoolArea"].median(), 'MoSold': df["MoSold"].mode().iloc[0]})

Wie oben beschrieben, können der Durchschnittswert (Mittelwert) und der Medianwert (Median) der Spalte für den Argumentteil ausgefüllt werden. `Im Fall des häufigsten Werts (Modus) wird er im Datenrahmen zurückgegeben, sodass die erste Zeile von iloc [0] erfasst wird. ``

Es gibt verschiedene andere Ergänzungsmethoden für Fillna. Überprüfen Sie daher das offizielle Dokument. pandas.DataFrame.fillna

Numerisch (numerische Daten)

Das erste, was Sie tun müssen, wenn Sie mit numerischen Daten arbeiten, ist *** Skalierung ***. Skalieren bedeutet, in einen numerischen Wert mit einer bestimmten Breite zu konvertieren. Wenn Sie beispielsweise den Eisverkauf anhand von Variablen wie Temperatur, Niederschlag und Luftfeuchtigkeit vorhersagen möchten, hat jede Variable eine andere Einheit und einen anderen Wertebereich. Wenn Sie so weiter lernen, wie es ist, können Sie möglicherweise nicht gut lernen, und es ist erforderlich, die Werte auf einen bestimmten Bereich auszurichten. Das ist Skalierung.

Es gibt verschiedene Möglichkeiten, Features zu skalieren. In diesem Artikel möchte ich auf die "1.Min Max Scaler, 2.Standard Scaler, 3.log Transformation" eingehen, die ich relativ verwende.

  1. Min Max Scaler

Es geht darum, die Werte aller Features in den gleichen Maßstab umzuwandeln. `` Subtrahieren Sie den Minimalwert von allen Werten und dividieren Sie durch die Differenz zwischen Min und Max. Dadurch wird der Wert 0 zu 1. `` *** Dieses Verfahren hat jedoch einen Nachteil, und da der Wert im Bereich von 0 bis 1 liegt, wird die Standardabweichung klein und der Einfluss des Abweichungswerts wird unterdrückt. *** *** Wenn Sie sich über Ausreißer Gedanken machen müssen, kann es schwierig sein, diese Methode in Betracht zu ziehen.

sklearn.preprocessing.MinMaxScaler

from sklearn import preprocessing

#Zuerst von df nach dtype=Spalte Spalte Spalte der Nummer extrahieren
numb_columns = df.select_dtypes(include=['number']).columns

# dtype=Extrahieren Sie nur Zahlendaten
num_df = df[numb_columns]

# MinMaxScaler
mm_scaler = preprocessing.MinMaxScaler()

#Holen Sie sich mit Array
num_df_fit = mm_scaler.fit_transform(num_df)

#In Array in Dataframe konvertieren
num_df_fit = pd.DataFrame(num_df_fit, columns=numb_columns)

** Nach Abschluss des Konvertierungsvorgangs ist es besser zu überprüfen, ob die Skalierung korrekt ist. ** **. Zum Beispiel


#Bestätigung des Maximalwerts jeder Funktion
num_df_fit.max()

#Bestätigung des Mindestwerts jeder Funktion
num_df_fit.min()

Am besten überprüfen Sie nach der Konvertierung Folgendes: entspannt:

  1. Standard Scaler

Sie können in eine standardisierte Verteilung mit einem Mittelwert von 0 und einer Varianz von 1 konvertieren. ` Zuerst wird der Durchschnittswert subtrahiert, um einen Wert um 0 zu erhalten. Als nächstes besteht die Umrechnungsmethode darin, den Wert durch die Standardabweichung zu dividieren, so dass die resultierende Verteilung zum Standard mit einem Durchschnitt von 0 und einer Standardabweichung von 1 wird. StandardScaler hat die gleichen Nachteile (Ausreißerverarbeitung) wie MinMaxScaler. In StandardScaler wirken sich die Ausreißer bei der Berechnung des Mittelwerts und der Standardabweichung aus und schränken den Funktionsumfang ein. *** Insbesondere kann die Streuung der konvertierten Daten jeder Merkmalsmenge stark unterschiedlich sein, da die Größe des Abweichungswerts jeder Merkmalsmenge unterschiedlich ist. *** ***

sklearn.preprocessing.StandardScaler


# StandardScaler
s_scaler = preprocessing.StandardScaler()

#Holen Sie sich mit Array
num_df_s_fit = s_scaler.fit_transform(num_df)

#In Array in Dataframe konvertieren
num_df_s_fit = pd.DataFrame(num_df_s_fit, columns=numb_columns)

  1. log transformation

Ich habe die logarithmische Konvertierung im vorherigen Artikel besprochen, daher werde ich sie leicht erklären. Im Modell des maschinellen Lernens "Da häufig eine Normalverteilung angenommen wird, kann eine logarithmische Umwandlung usw. durchgeführt werden, wenn eine Variable nicht der Normalverteilung folgt, so dass sie der Normalverteilung folgt." Tipps und Vorsichtsmaßnahmen bei der Datenanalyse


num_df = np.log(num_df)

Kategorial

Catergorische Daten sind Zeichenkettendaten wie Geschlecht (männlich / weiblich) und Präfektur (Präfektur Hokkaido / Aomori / Präfektur Iwate ...). "Wenn solche Daten verarbeitet werden, werden sie häufig vor der Verarbeitung in numerische Daten umgewandelt." In diesem Artikel möchte ich auf "1.Label Encoding, 2.One Hot Encoding" eingehen, das ich relativ verwende.

  1. Label Encoding Ich denke, diese Methode ist die am häufigsten verwendete Methode. `Dies ist eine Methode, um eindeutige Werte ausgewählter Features zu extrahieren und sie verschiedenen numerischen Werten zuzuordnen. `` Auf diese Weise kann der von der Zeichenfolge erfasste Merkmalsbetrag in einen numerischen Wert geändert werden.

sklearn.preprocessing.LabelEncoder

from sklearn import preprocessing
le = preprocessing.LabelEncoder()

#Zuerst von df nach dtype=Spaltenspalte des Objekts extrahieren
obj_columns = df.select_dtypes(include=["object"]).columns

# dtype=Extrahieren Sie nur Objektdaten
obj_df = df[obj_columns]

#Extrahieren Sie eindeutige Werte für Straßenspalten
str_uniq = obj_df["Street"].unique()

# labelEncoder
le.fit(str_uniq)

list(le.classes_)

le.transform(str_uniq)

スクリーンショット 2020-08-25 17.10.56.png

Erstellen Sie eine Instanz mit ** le.fit ** wie oben Den eindeutigen Wert der Feature-Menge erhalten Sie mit ** list (le.classes_) **. Verwenden Sie ** le.transform () **, um eindeutige Werte Zahlen zuzuordnen.

Beim Umgang mit von LabelEncoder konvertierten Zahlen gilt das baumbasierte Modell (zufällige Gesamtstruktur usw.) als gut. `` Nicht baumbasiertes Modell (Regressionsanalyse usw.) ist nicht effektiv. `` *** Dies liegt daran, dass der eindeutige Wert in einen numerischen Wert umgewandelt wird, die Größe des numerischen Werts jedoch bei der Regressionsanalyse behandelt wird, obwohl die Größe des numerischen Werts keine Bedeutung hat. *** ***

  1. One Hot Encoding Da LabelEncoder nicht auf die Regressionsanalyse angewendet werden kann, wird One Hot Encoding verwendet, um es auf die Regressionsanalyse anzuwenden. (Auf diese Weise kann es zu Missverständnissen kommen ...) Weil `One Hot Encoding bereits auf maximal 1 und minimal 0 skaliert wurde. `` *** Im Gegenteil, Binärdaten für die Anzahl der Kategorien werden als Merkmalsgrößen generiert, sodass sie nicht für das baumbasierte Modell geeignet sind. *** ***

sklearn.preprocessing.OneHotEncoder

from sklearn import preprocessing

# One Hot Encoder
oh = preprocessing.OneHotEncoder()

str_oh = oh.fit_transform(obj_df.values)

Geben Sie den Array-Typ als Argument für die Transformation an.

Zusammenfassung

In diesem Artikel haben wir die Vorverarbeitung von Merkmalsgrößen für die Modellierung beschrieben. In Kaggle usw. sehen wir, dass ** Zielcodierung ** häufig für kategoriale Daten verwendet wird. Ich konnte es aufgrund meines Mangels an Studien nicht in dem Artikel veröffentlichen, möchte es jedoch aktualisieren, sobald ich studiere.

Artikel zur Datenanalyse

Tipps und Vorsichtsmaßnahmen beim Analysieren von Daten

Recommended Posts

Feature-Vorverarbeitung für die Modellierung
Japanische Vorverarbeitung für maschinelles Lernen
Pipeline-Vorlage für DataLiner vorverarbeiten
Extrahieren Sie nur Python für die Vorverarbeitung
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Predictive Power Score für die Funktionsauswahl
Einheit 5 Feature Engineering für die Auswahl maschineller Lernfunktionen