In einem früheren Beitrag habe ich die Kickstarter-Projekte von kaggle als Thema verwendet, um die Genauigkeit jedes Modells zu überprüfen. [Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen] (https://qiita.com/Hawaii/items/4f0dd4d9cfabc4f6bb38)
Dieses Mal, auch unter Bezugnahme darauf, ** besteht der Zweck darin, den Prozess der Verbesserung der Genauigkeit mithilfe des im März veröffentlichten Kaggle Start Book zu verbreiten **. Dieses Mal habe ich viele neue Dinge gelernt und beschlossen, sie in den ersten und den zweiten Teil zu unterteilen. Der heutige Beitrag ist der erste Teil.
Hauptsächlich möchte ich mich auf die Teile konzentrieren, die ich nicht kannte. Insbesondere gibt es drei Typen: ** "Pandas-Profiling, LightGBM, Ensemble Learning" **.
→ Dieses Mal werden wir an Pandas-Profiling und LightGBM arbeiten.
Außerdem werden die Probleme mit den einzelnen Themen, die aufgetretenen Probleme und der Lösungsprozess beschrieben. Wenn Sie also Probleme haben, lesen Sie diese bitte.
Pandas Profiling wurde im Kaggle-Startbuch eingeführt, und ich wusste es überhaupt nicht, also habe ich es versucht.
Ich habe auf die folgende Seite verwiesen. https://qiita.com/h_kobayashi1125/items/02039e57a656abe8c48f
Es scheint, dass Pandas-Profiling mit Pip usw. installiert werden muss, also habe ich es auch importiert.
pip install pandas-profiling
Grundsätzlich scheint dies in Ordnung zu sein, aber tatsächlich habe ich hier einen Fehler erhalten, also habe ich verschiedene Websites durchsucht und es versucht. Ich konnte diesen Fehler jedoch nicht beheben und es dauerte einen Tag, sodass ich über meine Erfahrungen schreiben werde. Für diejenigen, die genau den gleichen Weg wie ich gegangen sind, möchte ich erwähnen, dass ich ihn lösen konnte.
Hier ist die Referenz. https://gammasoft.jp/support/pip-install-error/
Ich habe Ursache 2 davon getroffen, also
pip install pandas-profiling --user
Ich habe das geschrieben und versucht, es zu installieren. Dann, obwohl es kein Fehler war, erschien eine Warnung in Rot, und als ich das Jupyter-Notizbuch schloss und es erneut startete, konnte es nicht gestartet werden ...
Der Fehler, den ich erhielt, war "Attributfehler: 'Modul'-Objekt hat keine Attribute'", daher habe ich dies ebenfalls überprüft und als ich Folgendes tat, konnte ich es sicher wieder starten!
pip uninstall attr
pip install attrs
pip intall pandas-profiling
Ich habe keine Kenntnisse darüber, daher tut mir das flauschige Schreiben leid ... Ich hoffe, es hilft Ihnen ein wenig.
Es gibt einige, die ich diesmal nicht direkt brauche, aber ich importiere sie alle auf einmal.
#numpy,Pandas importieren
import numpy as np
import pandas as pd
#Importieren, um Datumsdaten zu verarbeiten
import datetime
#Import für Trainingsdaten und Testdatenaufteilung
from sklearn.model_selection import train_test_split
#Import zur Standardisierung
from sklearn.preprocessing import StandardScaler
#Import zur Überprüfung der Genauigkeit
from sklearn.model_selection import cross_val_score
#pandas_profiling
import pandas_profiling as pdp
df = pd.read_csv(r"~\ks-projects-201801.csv")
Wie im Startbuch beschrieben, braucht die Erstellung von Pandas-Profilen Zeit, wenn es sich um eine große Datenmenge handelt. Daher werden wir die Daten abtasten.
#Probe 30% des Ganzen
df_sample=df.sample(frac=0.3,random_state=1234)
Ursprünglich scheint `df_sample.profile_report ()`
in Ordnung zu sein, aber aus irgendeinem Grund habe ich keinen Fehler erhalten, aber das Ergebnis wird nicht angezeigt und ich spucke es auf diese Weise im HTML-Format aus Ich habe es versucht (ich denke, dass die Datei im HTML-Format an der Stelle erstellt wird, an der ich arbeite).
report = pdp.ProfileReport(df_sample)
report.to_file('profile_report.html')
Ich konnte es sicher umsetzen! !! Dies scheint Ihnen sicherlich eine ungefähre Vorstellung davon zu geben, wie die Daten aussehen. Ich würde es gerne weiter verwenden.
Als nächstes erstellen wir ein Modell von LightGBM. Ich habe den Namen gehört, aber er wurde implementiert, weil es in Büchern usw. nicht viele Beschreibungen gab. Ich hatte es nicht, also werde ich es versuchen.
◆ Referenzseite Neben dem Kaggle Start Book habe ich auch auf die folgenden Websites verwiesen.
https://blog.amedama.jp/entry/2018/05/01/081842#scikit-learn-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9
#numpy,Pandas importieren
import numpy as np
import pandas as pd
#Importieren, um Datumsdaten zu verarbeiten
import datetime
#Import für Trainingsdaten und Testdatenaufteilung
from sklearn.model_selection import train_test_split
#Import zur Standardisierung
from sklearn.preprocessing import StandardScaler
#Import zur Überprüfung der Genauigkeit
from sklearn.model_selection import cross_val_score
#pandas_profiling
import pandas_profiling as pdp
#LightGBM-Import
import lightgbm as lgb
df = pd.read_csv(r"C:\\ks-projects-201801.csv")
Ich werde nicht auf Details eingehen, aber die Codekommentare beschreiben, was ich tue.
#Der Status der Zielvariablen wird nur für Erfolg oder Misserfolg auf Daten eingegrenzt (die Daten werden gelöscht, da in der Mitte eine Kategorie wie "Abbruch" vorhanden ist).
df = df[(df["state"] == "successful") | (df["state"] == "failed")]
#Darüber hinaus wird Erfolg auf 1 und Misserfolg auf 0 gesetzt.
df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)
#Verarbeitung von Datumsdaten. Anfangsdatum(launched)Und Enddatum(deadline)Weil es gibt, nehmen Sie den Unterschied und Rekrutierungszeitraum(days)Ich muss
df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days
#Obwohl diesmal aufgrund der Datenanalyse weggelassen, werden erklärende Variablen gelöscht, die unnötig erscheinen.
df = df.drop(["ID","name","deadline","launched","backers","pledged","usd pledged","usd_pledged_real","usd_goal_real"], axis=1)
#Verarbeitung von Kategorievariablen
df = pd.get_dummies(df,drop_first = True)
y = df["state"].values
X = df.drop("state", axis=1).values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)
lgb_train = lgb.Dataset(X_train,y_train)
lgb_eval = lgb.Dataset(X_test,y_test)
params = {"objective":"binary"}
model = lgb.train(params,lgb_train,valid_sets=[lgb_train,lgb_eval],verbose_eval=10,num_boost_round=1000,early_stopping_rounds=10)
#Mit Testdaten vorhersagen, y_Ergebnisse in pred speichern
y_pred = model.predict(X_test,num_iteration=model.best_iteration)
#y_pred ist 0.Wenn es größer als 5 ist, machen Sie es zu einer ganzen Zahl 1.
y_pred = (y_pred>0.5).astype(int)
y_pred_max = np.argmax(y_pred)
#Richtigkeit(Accuracy)Berechnen
accuracy = sum(y_test == y_pred_max) / len(y_test)
print(accuracy)
Dann war die Genauigkeit ** 0,597469 ** und LightGBM wurde erfolgreich implementiert!
Was mir diesmal aufgefallen ist, war, dass ich nicht `y_pred = (y_pred> 0.5) .astype (int)`
geschrieben habe, also war die Genauigkeit anfangs 0.
→ Es ist gut im Buch geschrieben, aber ich habe es übersprungen, weil ich den Code geschrieben habe, während ich auch auf andere Websites verwiesen habe.
Das LightGBM-Ergebnis wird als kontinuierlicher Wert von 0 bis 1 ausgegeben, während y_test 0 oder 1 ist, da ich anfänglich 0 für Fehler und 1 für Erfolg gesetzt habe. Die Genauigkeit war zuerst 0, weil ich die beiden rein verglichen habe, aber ich konnte die Genauigkeit sicher erhalten, indem ich den Wert größer als 0,5 durch 1 ersetzte.
Was haben Sie gedacht. Ich kannte Pandas-Profiling überhaupt nicht, daher denke ich, dass es für die Datenanalyse verwendet werden kann. Diesmal konnte ich LightGBM implementieren, an dem ich zum ersten Mal interessiert war Ich hoffe, es wird auch für Super-Anfänger hilfreich sein.
Nächstes Mal werde ich versuchen, Ensemble zu lernen.
Recommended Posts