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.
Ich habe an folgenden Übungen gearbeitet.
Erstellen Sie dieses Modell, das die Anzahl der Fahrradnutzer pro Stunde pro Tag anhand von saisonalen Informationen und Wetterinformationen für 2 Jahre vorhersagt
#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()
#Versuchen Sie, die Verwendung zu zeichnen
plt.figure(figsize=(12,5))
plt.plot(train['id'],train['cnt'])
#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()
・ 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.
#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)
#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))
Im Allgemeinen scheint es, dass Sie richtig vorhersagen können.
#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()
#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)
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