[PYTHON] Ich habe SIGNATE "[Übungsfrage] Vorhersage der Anzahl der Leihfahrradnutzer" ausprobiert.

Einführung

Dieses Mal haben wir an SIGNATES "[Übungsfrage] Vermietung von Fahrradnutzern" gearbeitet. In Bezug auf maschinelles Lernen konnte ich noch nicht viel tun, aber ich hoffe, durch Wettbewerbe nach und nach wachsen zu können.

Inhalt des Wettbewerbs

Ich habe an folgenden Übungen gearbeitet.

** [Übungsfrage] Vorhersage der Anzahl der Fahrradnutzer **

Erstellen Sie dieses Modell, das die Anzahl der Fahrradnutzer pro Stunde pro Tag anhand von saisonalen Informationen und Wetterinformationen für 2 Jahre vorhersagt

Tatsächlicher Code

1. Daten lesen

#Bibliothek importieren
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#Dateien lesen / anzeigen
train = pd.read_csv('train.tsv',sep='\t')
test  = pd.read_csv('test.tsv',sep='\t')
train.head()

data1.png

2. Den Dateninhalt verstehen

#Versuchen Sie, die Verwendung zu zeichnen
plt.figure(figsize=(12,5))
plt.plot(train['id'],train['cnt'])

graph1.png

#Zeichnen Sie den Nutzungsstatus für eine bestimmte Woche als Testversion
# 1.In einer Variablen für jedes Datum gespeichert
_day0703 = train.query('dteday == "2011-07-03"')#Tag
_day0704 = train.query('dteday == "2011-07-04"')#Mond
_day0705 = train.query('dteday == "2011-07-05"')#Feuer
_day0706 = train.query('dteday == "2011-07-06"')#Wasser
_day0707 = train.query('dteday == "2011-07-07"')#Holz
_day0708 = train.query('dteday == "2011-07-08"')#Geld
_day0709 = train.query('dteday == "2011-07-09"')#Boden
# 2.Grafische Anzeige jedes Datums
plt.figure(figsize=(12,5))
plt.plot(_day0703['hr'],_day0703['cnt'],label='Sun')
plt.plot(_day0704['hr'],_day0704['cnt'],label='Mon')
plt.plot(_day0705['hr'],_day0705['cnt'],label='Tue')
plt.plot(_day0706['hr'],_day0706['cnt'],label='Wed')
plt.plot(_day0707['hr'],_day0707['cnt'],label='Thu')
plt.plot(_day0708['hr'],_day0708['cnt'],label='Fri')
plt.plot(_day0709['hr'],_day0709['cnt'],label='Sat')
plt.legend()
plt.grid()

graph2.png

・ Es scheint, dass der Nutzungsstatus zwischen Feiertagen und Wochentagen unterschiedlich ist. ・ An Wochentagen wird es häufig von 6 bis 10 Uhr und von 16 bis 21 Uhr verwendet, sodass es anscheinend für den Weg zur Arbeit oder zur Schule verwendet wird.

Da sich der Nutzungsstatus je nach Feiertag und Tageszeit ändert, hielt ich die lineare Regression für nicht geeignet und wählte XGBoost aus.

3. Lernen mit XGBoost

#XGBoost-Bibliotheken importieren
import xgboost as xgb
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_squared_error
#Erstellen eines xgboost-Modells
reg = xgb.XGBRegressor()
#Vor id2500 ist die Tendenz anders, also schneiden Sie(Betriebsstart etc.?)
train = train[train['id'] > 2500]
#Speichern Sie erklärende Variablen und objektive Variablen
X_train = train.drop(['id','dteday','cnt'], axis=1)
y_train = train['cnt']
X_test = test.drop(['id','dteday'], axis=1)
#Hyperparametersuche
reg_cv = GridSearchCV(reg, {'max_depth': [2,4,6], 'n_estimators': [50,100,200]}, verbose=1)
reg_cv.fit(X_train, y_train)
print(reg_cv.best_params_, reg_cv.best_score_)
#Lernen Sie erneut mit optimalen Parametern
reg = xgb.XGBRegressor(**reg_cv.best_params_)
reg.fit(X_train, y_train)

4. Überprüfen Sie das Modell

#Vorhersage anhand von Trainingsdaten
pred_train = reg.predict(X_train)
#Überprüfen Sie, ob der vorhergesagte Wert gültig ist
train_value = y_train.values
_df = pd.DataFrame({'actual':train_value,'pred':pred_train})
_df.plot(figsize=(12,5))

graph3.png

Im Allgemeinen scheint es, dass Sie richtig vorhersagen können.

5. Bestätigen Sie die Wichtigkeit der Anzahl der Bewertungsfunktionen

#Darstellung der Merkmalsbedeutung
importances = pd.Series(reg.feature_importances_, index = X_train.columns)
importances = importances.sort_values()
importances.plot(kind = "barh")
plt.title("imporance in the xgboost Model")
plt.show()

graph4.png

6. Erstellen Sie eine Übermittlungsdatei

#Berechnung des vorhergesagten Wertes für Testdaten
pred_test = reg.predict(X_test)
#Fügen Sie das Ergebnis ein und geben Sie die Datei aus
sample = pd.read_csv("sample_submit.csv",header=None)
sample[1] = pred_test
sample.to_csv("submit01.csv",index=None,header=None)

Ergebniszusammenfassung

Es war der 29. von 209 Personen. Dieses Mal habe ich es einfach in XGBoost eingefügt, sodass offenbar Platz für andere Ideen wie das Erstellen von Funktionen, ein anderes Lernmodell und das Lernen von Ensembles vorhanden ist. Ich würde es gerne noch einmal versuchen, also würde ich zu diesem Zeitpunkt gerne noch einmal einen Artikel schreiben.

Recommended Posts

Ich habe SIGNATE "[Übungsfrage] Vorhersage der Anzahl der Leihfahrradnutzer" ausprobiert.
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe die gängige Geschichte der Vorhersage des Nikkei-Durchschnitts mithilfe von Deep Learning (Backtest) ausprobiert.
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
Ich habe versucht, die Anzahl durch Programmieren zu erhöhen oder zu verringern
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
Ich habe versucht, den allgemeinen Kommentar des verdammten Spiels des Jahres morphologisch zu analysieren
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe ein wenig versucht, das Verhalten der Zip-Funktion
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe den Chat von YouTube Live angezeigt und versucht zu spielen
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, die erste Frage der Mathematik-Aufnahmeprüfung 2019 der Universität Tokio mit Python Sympy zu lösen
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ② Sortieren der Überlappungsnummern
Ich habe versucht, die Exponentialfunktion und die Logistikfunktion an die Anzahl der COVID-19-positiven Patienten in Tokio anzupassen
10. Zählen der Anzahl der Zeilen
Holen Sie sich die Anzahl der Ziffern
Ich habe die Changefinder-Bibliothek ausprobiert!
Berechnen Sie die Anzahl der Änderungen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich habe mir die Metainformationen von BigQuery angesehen und versucht, sie zu verwenden
Ich habe die X-Means-Methode untersucht, mit der die Anzahl der Cluster automatisch geschätzt wird
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern