[PYTHON] Ich habe mit Kaggle Start Book basierend auf Kaggle studiert [Teil 1]

1. Zweck

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.

◆ Zu behandelnde Themen

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.

◆ Andere

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.

2. Datenanalyse-Pandas Profiling-

Pandas Profiling wurde im Kaggle-Startbuch eingeführt, und ich wusste es überhaupt nicht, also habe ich es versucht.

(1) Installation

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

<Ergänzung-Eine Geschichte, bei der ich Probleme bei der Installation hatte-> -Wenn Sie oben ohne Probleme installieren können, überspringen Sie sie bitte-

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.

(2) Importieren Sie, was Sie benötigen

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

(3) Daten lesen

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)

(4) Durchführung der Pandas-Profilerstellung

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.

キャプチャ1.PNG

3. Modellbau-LightGBM-

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

(1) Importieren Sie, was Sie brauchen

#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

(2) Daten lesen

df = pd.read_csv(r"C:\\ks-projects-201801.csv")

(3) Vorbehandlung

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)

(4) Datenaufteilung

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)

(5) Implementierung von LightGBM

(I) Datensatzerstellung

lgb_train = lgb.Dataset(X_train,y_train)
lgb_eval = lgb.Dataset(X_test,y_test)

params = {"objective":"binary"}

(Ii) Modellbau

model = lgb.train(params,lgb_train,valid_sets=[lgb_train,lgb_eval],verbose_eval=10,num_boost_round=1000,early_stopping_rounds=10)

(Iii) Überprüfung der Genauigkeit

#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!

(Iv) Vorsichtsmaßnahmen

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.

4. Fazit

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

Ich habe mit Kaggle Start Book basierend auf Kaggle studiert [Teil 1]
Bis zum Start des Django-Tutorials mit Pycharm unter Windows
Ich habe die Grundoperation von Pandas im Jupyter Lab geschrieben (Teil 1)
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe das Bild der Science University auf Twitter mit Word2Vec überprüft.
Ich habe die grundlegende Operation von Pandas im Jupyter Lab geschrieben (Teil 2).
Veröffentlichen Sie das Thema Google Mail auf Twitter
Ich habe versucht, mit tkinter mit dem Taschenrechner zu spielen
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
Ich habe versucht, Objekte mit YOLO v3 (TensorFlow 2.1) auf der GPU von Windows zu erkennen!
Ich möchte die Standortinformationen von GTFS Realtime auf Jupyter zeichnen! (Mit Ballon)
Vielleicht habe ich die Auswirkungen von Shell Shock auf CGI überschätzt
Ich habe die Leistung von 1 Million Dokumenten mit mongoDB gemessen
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Lassen Sie uns den Befehl pünktlich mit dem Bot der Zwietracht ausführen
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Ich habe versucht, den FloodFill-Algorithmus mit TRON BATTLE von CodinGame zu implementieren
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Ich habe die Grundoperation von matplotlib in Jupyter Lab geschrieben
Rufen Sie den Hostnamen des Host-PCs mit Docker unter Linux ab
Lesen Sie die Koordinaten des Diagramms in der Grafik mit Python-matplotlib (Super-Anfänger)
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Wenn ich die virtuelle Umgebung von conda starte, bricht die Eingabeaufforderung von bash zusammen
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part2 zu bedienen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben
Ich habe eine Kreuzvalidierung basierend auf dem Rastersuchergebnis mit scikit-learn versucht
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe die Tweets über den neuen Corona-Virus analysiert, die auf Twitter Teil 2 veröffentlicht wurden
Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
[Erforderliches Thema DI] Implementieren und verstehen Sie den Mechanismus von DI mit Go
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part1 zu bedienen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
[Kaggle] Ich habe mit dem Titanic-Tutorial eine Sammlung von Problemen erstellt
So führen Sie den Übungscode des Buches "Profitable KI mit Python erstellen" in Google Colaboratory aus
Starten Sie Data Science in der Cloud
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
"Python Startbook" Python3-kompatibles Memo
Ich mochte den Tweet mit Python. ..
Ermitteln Sie mit Selenium + PhantomJS + Python die Breite des Div auf der Serverseite
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Bearbeiten Sie die Datei des SSH-Verbindungszielservers auf dem Server mit VS-Code
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe den Akkord des Songs mit word2vec vektorisiert und mit t-SNE visualisiert
Ich habe versucht, die Wartezeit der Ausführungswarteschlange eines Prozesses unter Linux zu messen
Spielen Sie den Kommentar des Nico Nico-Videos auf dem Terminal in Verbindung mit dem Video ab