Selbst wenn ich studiere, werde ich es bald vergessen, also werde ich einen Artikel an Qiita senden, um Memorandum und Ausgabepraxis zu erhalten. Ich wäre Ihnen dankbar, wenn Sie Fehler oder bessere Möglichkeiten kommentieren könnten.
Ich möchte One-Hot-Codierung mit maschinellem Lernen durchführen, weiß aber nicht, welche Art von Daten in den Testdaten enthalten sind.
Jede Site sagt, dass Sie, wenn Sie One-Hot-Codierung durchführen möchten, "get_dummies" verwenden sollten, aber zum Beispiel
** train_df ['sex']
hat männlich
und weiblich
, aber test_df ['sex']
hat nur männlich
**
In einem solchen Fall ändert sich die Anzahl der erstellten Spalten, wenn Sie normalerweise "get_dummies" verwenden. das ist nicht gut.
Nach vielen Recherchen kam ich zu folgendem Artikel.
[Python] Verwenden Sie pandas.get_dummies nicht zum maschinellen Lernen
Der Artikel selbst verwendet nicht get_dummies, sondern den OneHotEncoder von Sklearn. Ich wollte jedoch die Daten im Pandas-Format analysieren und sie schließlich in das Numpy-Format konvertieren, daher war ich besonders daran interessiert, etwas mit Pandas zu tun.
Das wird im Kommentar des Artikels ↑ erklärt, und in diesem Artikel werde ich es so weit fallen lassen, dass ich es auf meine eigene Weise kauen kann.
Die Implementierung endet mit get_dummies
.
# (i) df_Ein einzigartiger Zug ist"hoge"Wann"fuga".. B einzigartig"a"Wann"b"
df_train = pd.DataFrame({"A": ["hoge", "fuga"], "B": ["a", "b"]})
# (ii) df_Ein einzigartiger Zug ist"hoge"Wann"piyo".. B einzigartig"a"Wann"c"
df_test = pd.DataFrame({"A": ["hoge", "piyo"], "B": ["a", "c"]})
# (iii)In Kategorie A ist"hoge"Wann"fuga"B."a"Wann"b"だよWann決め打ちしてしまう
df_train["A"] = pd.Categorical(df_train["A"], categories=["hoge", "fuga"])
df_train["B"] = pd.Categorical(df_train["B"], categories=["a", "b"])
df_test["A"] = pd.Categorical(df_test["A"], categories=["hoge", "fuga"])
df_test["B"] = pd.Categorical(df_test["B"], categories=["a", "b"])
# (iv) get_einer mit Dummies-hot
df_train = pd.get_dummies(df_train)
df_test = pd.get_dummies(df_test)
Die endgültigen One-Hot-Daten lauten wie folgt.
df_train
A_hoge A_fuga B_a B_b
0 1 0 1 0
1 0 1 0 1
df_test
A_hoge A_fuga B_a B_b
0 1 0 1 0
1 0 0 0 0
Ich konnte nur den einzigartigen Zug sicher benutzen. Dieses Mal wurde es durch harte Codierung unterstützt, aber wenn Sie "einzigartig" separat verwenden, können Sie flexibler damit umgehen.
Der Grund, warum df_train auch die Kategorie korrigiert, ist, dass wenn dies nicht getan wird, die Reihenfolge von hoge und fuga umgekehrt wird.
Recommended Posts