Ich wollte maschinelles Lernen machen, also entschied ich mich für "Pokemon". Ich dachte, dass Pokemon eine Juwelenkiste mit Daten ist, weil der Rennwert für jedes Pokemon festgelegt wurde.
Diesmal handelt es sich jedoch um einen vollständig abwärtskompatiblen </ b> Artikel, der auf dem Artikel basiert, der oben bei der Suche nach "Pokemon Machine Learning" bei Google veröffentlicht wurde. Wenn Sie ihn also imitieren möchten, lesen Sie bitte den Originalartikel. Bitte gib mir. Maschinelles Lernen mit Pokemon
OS:Win10 home IDE:VScode Sprache: Python 3.7.3 64bit
Basierend auf Pokemon-Datenbank bis zu 7 Generationen werden Pokemon von "Hiko" und "Esper" durch logistische Regression extrahiert und binarisiert. Ich versuchte es. Übrigens ist die Anzahl jedes Typs in Pokemon wie folgt (bis zu 7 Generationen)
Art | Anzahl der Tiere |
---|---|
normal | 116 Tiere |
Schließlich | 63 Tiere |
Doku | 69 Tiere |
Jimen | 75 Tiere |
Flug | 113 Tiere |
Insekt | 89 Tiere |
Iwa | 67 Tiere |
Geist | 55 Tiere |
Hagane | 58 Tiere |
Hono | 72 Tiere |
Mizu | 141 Tiere |
Denki | 60 Tiere |
Kusa | 103 Tiere |
Koori | 43 Tiere |
Esper | 100 Tiere |
Drachen | 59 Tiere |
Böse | 59 Tiere |
Fee | 54 Tiere |
Mizu war der größte und Koori der kleinste. Es ist gefriergetrocknet und verdoppelt.
Code ist unten.
lr_pokemon.py
import pandas as pd
import codecs
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# read data by pandas
with codecs.open("data/pokemon_status.csv", "r", "Shift-JIS", "ignore") as file:
df = pd.read_table(file, delimiter=",")
# print(df.head(15))
p_type = ["normal","Schließlich","Doku","Jimen","Flug","Insekt","Iwa","Geist","Hagane","Hono","Mizu","Denki","Kusa","Koori","Esper","Drachen","Böse","Fee"]
print(len(p_type))
# make functions
def count_type(p_type):
list1 = df[df['Typ 1'] == p_type]
list2 = df[df['Typ 2'] == p_type]
lists = pd.concat([list1, list2])
print(p_type + "Pokémon: %d Tiere" % len(lists))
def type_to_num(p_type):
if p_type == "Flug":
return 1
else:
return 0
# count number of type in pokemons
for i in p_type:
count_type(i)
# make sky_df
sky1 = df[df['Typ 1'] == "Flug"]
sky2 = df[df['Typ 2'] == "Flug"]
sky = pd.concat([sky1, sky2])
# make psycho_df
psycho1 = df[df['Typ 1'] == "Esper"]
psycho2 = df[df['Typ 2'] == "Esper"]
psycho = pd.concat([psycho1, psycho2])
df_s_p = pd.concat([sky, psycho], ignore_index=True)
type1 = df_s_p['Typ 1'].apply(type_to_num)
type2 = df_s_p['Typ 2'].apply(type_to_num)
df_s_p['type_num'] = type1 + type2
print(df_s_p)
X = df_s_p.iloc[:,7:13].values
y = df_s_p['type_num'].values
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)
lr = LogisticRegression(C = 1.0)
lr.fit(X_train, y_train)
# show scores
print("train_score: %.3f" % lr.score(X_train, y_train))
print("test_score: %.3f" % lr.score(X_test, y_test))
i = 0
error1 = 0
success1 = 0
error2 = 0
success2 = 0
print("[Liste der Pokémon vom Typ Hiko]")
print("----------------------------------------")
print("")
while i < len(df_s_p):
y_pred = lr.predict(X[i].reshape(1, -1))
if y_pred == 1:
print(df_s_p.loc[i, ["Pokemon Name"]])
if df_s_p.loc[i, ["type_num"]].values == 1:
success1 += 1
print("Es ist ein Hikou-Typ, nicht wahr?")
print("")
else:
error1 += 1
print("Ich dachte, es wäre ein Hikou-Typ")
print("")
else:
print(df_s_p.loc[i, ["Pokemon Name"]])
if df_s_p.loc[i, ["type_num"]].values == 0:
error2 += 1
print("Es ist ein Esper-Typ, nicht wahr?")
print("")
else:
success2 += 1
print("Ich dachte, es wäre ein Esper-Typ")
print("")
i += 1
print("----------------------------------------")
print("Anzahl der Pokémon, die als der richtige Typ eingestuft wurden: %d Tiere" % success1)
print("Anzahl der Pokémon, die korrekt als Esper-Typ beurteilt wurden: %d Tiere" % success2)
print("Anzahl der Pokémon, die fälschlicherweise als Wandertyp identifiziert wurden: %d Tiere" % error1)
print("Anzahl der Pokémon, die fälschlicherweise als Esper-Typ identifiziert wurden: %d Tiere" % error2)
print("")
Das Ergebnis war eine korrekte Rücklaufquote von 75%. Es ist tief. Es war eine Zahl, die beim maschinellen Lernen nicht verwendet werden konnte.
Ich dachte, ich könnte bessere Zahlen bekommen. Dies liegt daran, dass ich dachte, dass "Hiko" grob in physische Angreifer und "Esper" grob in spezielle Angreifer unterteilt werden könnte. Die Realität ist nicht so einfach. Als ich jedoch tatsächlich ein Pokemon sah, das fälschlicherweise erkannt wurde, bekam ich den Grund, dass es nicht fälschlicherweise erkannt wurde. Zum Beispiel gab es "Thunder" und "Freezer" als Kinder, die mit Esper verwechselt wurden, obwohl sie lustig waren, aber das ist richtig, weil sie teuer sind. Ich würde einen Fehler machen, wenn ich ihn zum ersten Mal sehen würde. Auf der anderen Seite gab es "Casey" und "Lartos" als Kinder, die fälschlicherweise als Esper bezeichnet wurden, aber ich dachte, es könnte nicht geholfen werden, da dies niedrige Rassenwerte sind. Weil es schwierig ist, den numerischen Wert im niedrigen Rennwertbereich zu unterscheiden. Die evolutionären "Hoodin", "Sarnite" und "El Reid" wurden Bakko Esper zugewiesen, daher bin ich erleichtert.
El Reid Han! Ich frage mich, ob Sie für einen Hikou-Typ gehalten werden könnten! !! !!
Schließlich ist es falsch, Pokemon nur nach dem Rassenwert zu beurteilen.
Recommended Posts