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.
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.
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".
Land |
---|
Japan |
Land.Japan | Land.Amerika | Land.China |
---|---|---|
1 | 0 | 0 |
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)
import numpy as np
import pandas as pd
from sklearn import svm
df = pd.read_csv("AdultDataSet.csv", encoding='cp932', low_memory=False)
#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
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)
#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()
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.
df2.to_csv('AfterAdultDataSet.csv', index=False)
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