Maschinelles Lernen mit Python ohne Verlust an kategoriale Variablen (Dummy-Variablenkonvertierung)

Ich schaue immer das Gleiche, also Ich nutzte dies als Gelegenheit, um mir eine Notiz zu machen.

Hier lesen wir tatsächlich CSV mit Python und Eine Vorverarbeitung wie eine Dummy-Variablenkonvertierung wurde durchgeführt und eine Vorhersage wurde mit SVM gemacht.

Motiviert

Beim Eintauchen von Daten in maschinelles Lernen können die Daten kategoriale Variablen enthalten (z. B. Geschlecht, Herkunftsland). Wenn Sie zu diesem Zeitpunkt nur einen numerischen Wert ändern (Beispiel: 1 in Japan, 2 in den USA), wird die unbeabsichtigte Bedeutung in Daten konvertiert. Weil es gibt, läuft das Lernen möglicherweise nicht gut.

Hier werden wir uns damit befassen, indem wir kategoriale Variablen mit einer Methode namens Dummy-Variablen in numerische Werte konvertieren.

Was ist eine Dummy-Variable?

Nehmen Sie beispielsweise die folgenden Daten an.

Bei der Dummy-Variablenkonvertierung wird die Spalte "Land" in drei Spalten "Land" geändert. Japan, Land. Amerika, Land. China. Konvertiert nur die zutreffenden Werte in "1" und die anderen in "0".

Beispiel für Daten vor der Dummy-Konvertierung

Land
Japan

Beispiel für Daten nach der Konvertierung in eine Dummy-Variable

Land.Japan Land.Amerika Land.China
1 0 0

Implementierung

Daten bekommen

Dieses Mal haben wir die Daten verwendet, die in Experimenten wie der Anonymisierungsverarbeitung verwendet wurden, die als "Adult Income Data Set" bezeichnet werden. Sie können es wahrscheinlich über Google bekommen, aber dieses Mal habe ich es mit R bekommen (keine Sorge, wenn Sie Python sagen, aber R sofort verwenden).

Dieser Datensatz enthält auch einen Eintrag namens "Einkommen", der drei Werte hat: "Groß", "Klein" und "NaN". In dieser Implementierung wollen wir "groß oder klein" für "NaN (fehlender Wert)" vorhersagen.

Daher wird die Zeile ohne "NaN" als Trainingsdaten verwendet, und die Daten mit "NaN" werden als Bewertungsdaten verwendet.

library('arules')
data("AdultUCI")
id <- 1:nrow(AdultUCI)
d <- data.frame(id, AdultUCI)
write.csv(d, "AdultDataSet.csv", quote = FALSE, fileEncoding = 'cp932', row.names = FALSE)

Laden von Bibliotheken und CSV-Dateien

import numpy as np
import pandas as pd
from sklearn import svm

df = pd.read_csv("AdultDataSet.csv", encoding='cp932', low_memory=False)

Vorverarbeitung (macht auch Dummy-Variablen)

#Trainingsetikett
Y_train = df.copy()
Y_train['income'] = Y_train['income'].map({"large":1, "small":0})
Y_train = Y_train[Y_train['income'].notnull()]
Y_train = Y_train.iloc[:, 15].values #nur Einkommen

#Erstellen von Dummy-Variablen für kategoriale Variablen
X = df.iloc[:, 0:15] #Andere als Einkommen
colnames_categorical = ['workclass', 'marital.status', 'occupation', 'relationship', 'race', 'sex', 'native.country']
X_dummy = pd.get_dummies(X[colnames_categorical], drop_first=True)

#Dummy-Variablen verbinden
X = pd.merge(X, X_dummy, left_index=True, right_index=True)

#Entfernen Sie doppelte Spalten, die Sie nicht verwenden
X = X.drop(colnames_categorical, axis=1)
X = X.drop(['id', 'education'], axis=1)

#Trennen Sie Zug und Test, je nachdem, ob das Einkommen NaN ist oder nicht
X_train = X[df['income'].notnull()].values
X_test  = X[df['income'].isnull()].values

Lernen und Vorhersage

#Lernen
clf = svm.LinearSVC() #Weil das Lernen schnell ist. Der andere ist svm.SVC(kernel='rbf')Etc.
print('start!')
clf.fit(X_train, Y_train)
print('end!')

#Prognose
Y_predict = clf.predict(X_test)

Prognostizierte Ergebnisse kombinieren

#Fügen Sie den vorhergesagten Wert hinzu
df2 = df.copy()
df2.loc[df2['income'].isnull(), 'income'] = Y_predict
df2['income'] = df2['income'].map({1.:"large", 0.:"small", "small":"small", "large":"large"})
df2.head()

Überprüfen Sie das Ergebnis

Ursprünglich denke ich, dass die Daten mit dem richtigen Antwortetikett im Voraus klassifiziert und die Leistung bewertet werden sollten. Dieses Mal habe ich für die fehlenden Daten und den Zweck vorausgesagt, eine Dummy-Variable anzuwenden. Lassen Sie uns vorerst überprüfen, ob keine Werte fehlen.

#Gesamtwert des Einkommens vor dem Lernen
count_before = df['income'].value_counts(dropna=False)
pd.DataFrame(count_before) #  print(count_before)Vielleicht
#Gesamtwert des Einkommens nach dem Lernen
count_after = df2['income'].value_counts(dropna=False)
pd.DataFrame(count_after)

Wenn "NaN" nach dem Lernen verschwindet, ist es vorerst in Ordnung.

Ergebnisausgabe

df2.to_csv('AfterAdultDataSet.csv', index=False)

schließlich

Es sollte nicht so schwierig sein, aber wie man Pandas benutzt und wie man Scikit lernt Es fiel mir schwer zu tippen ... traurig ...

Recommended Posts

Maschinelles Lernen mit Python ohne Verlust an kategoriale Variablen (Dummy-Variablenkonvertierung)
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Maschinelles Lernen mit Python! Vorbereitung
Beginnend mit maschinellem Python-Lernen
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Newton-Methode für maschinelles Lernen (von 1 Variablen zu mehreren Variablen)
Verstärken Sie Bilder für maschinelles Lernen mit Python
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Eine Einführung in Python für maschinelles Lernen
Aufbau einer KI / maschinellen Lernumgebung mit Python
Mayungos Python Learning Episode 2: Ich habe versucht, Zeichen mit Variablen zu löschen
Ich habe mit Python mit dem maschinellen Lernen begonnen (ich habe auch angefangen, in Qiita zu posten). Datenvorbereitung
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 11 und 12 Einführung in Pandas Matplotlib
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Python lernen mit ChemTHEATER 05-1
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Python lernen mit ChemTHEATER 02
Vorbereitung zum Starten von "Python Machine Learning Programming" (für macOS)
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Python lernen mit ChemTHEATER 01
Site-Zusammenfassung zum Erlernen des maschinellen Lernens mit englischen Videos
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Konvertieren Sie numerische Variablen mit Pandas in kategoriale Variablen, indem Sie einen Schwellenwert festlegen
Einführung in das maschinelle Lernen
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Einführung in das maschinelle Lernen mit scikit-learn-Von der Datenerfassung bis zur Parameteroptimierung
Herausforderung Problem 5 mit Python: Lambda ... Ich habe mich entschieden, ohne zu kopieren
Für diejenigen, die mit TensorFlow2 maschinelles Lernen beginnen möchten
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
Mayungos Python Learning Episode 3: Ich habe versucht, Zahlen zu drucken
[Maschinelles Lernen] Funktionsauswahl kategorialer Variablen mithilfe des Chi-Quadrat-Tests
Maschinelles Lernen mit Nogisaka 46 und Keyakizaka 46 Teil 1 Einführung
Einstellungen der Python3-basierten maschinellen Lernumgebung auf dem Mac (Koexistenz mit Python2)
Maschinelles Lernen mit Pokemon gelernt
Stellen Sie mit Python eine Verbindung zu BigQuery her
Eine Einführung in das maschinelle Lernen
Post to Slack mit Python 3
Verbessertes Lernen ab Python
Maschinelles Lernen Minesweeper mit PyTorch
Python Machine Learning Programming> Schlüsselwörter
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
Iterative Verarbeitung von Python durch Chemoinfomatik gelernt