Cette fois, nous avons travaillé sur la "[Question pratique] Prédiction des utilisateurs de vélos de location" de SIGNATE. En ce qui concerne l'apprentissage automatique, je n'ai pas encore pu faire grand-chose, mais j'espère grandir petit à petit grâce aux compétitions.
J'ai travaillé sur les exercices suivants.
Créez ce modèle qui prédit le nombre d'utilisateurs de vélos de location par heure et par jour à partir des informations saisonnières et météo pendant 2 ans
#Importer la bibliothèque
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#Lecture / affichage de fichiers
train = pd.read_csv('train.tsv',sep='\t')
test = pd.read_csv('test.tsv',sep='\t')
train.head()
#Essayez de tracer l'utilisation
plt.figure(figsize=(12,5))
plt.plot(train['id'],train['cnt'])
#Tracez l'état d'utilisation pendant une semaine donnée à titre d'essai
# 1.Stocké dans une variable pour chaque date
_day0703 = train.query('dteday == "2011-07-03"')#journée
_day0704 = train.query('dteday == "2011-07-04"')#Mois
_day0705 = train.query('dteday == "2011-07-05"')#Feu
_day0706 = train.query('dteday == "2011-07-06"')#eau
_day0707 = train.query('dteday == "2011-07-07"')#bois
_day0708 = train.query('dteday == "2011-07-08"')#Argent
_day0709 = train.query('dteday == "2011-07-09"')#sol
# 2.Affichage graphique de chaque date
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()
・ Il semble que l'état d'utilisation diffère entre les jours fériés et les jours de la semaine. ・ En semaine, il est souvent utilisé de 6 h à 10 h et de 16 h à 21 h, il semble donc être utilisé pour se rendre au travail ou à l'école.
Étant donné que l'état d'utilisation change en fonction du jour férié et de l'heure de la journée, j'ai pensé que la régression linéaire n'était pas appropriée et j'ai choisi XGBoost.
#Importation de bibliothèques XGBoost
import xgboost as xgb
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_squared_error
#Créer un modèle xgboost
reg = xgb.XGBRegressor()
#Avant id2500, la tendance est différente, donc coupez(Début de l'opération, etc.?)
train = train[train['id'] > 2500]
#Stocker les variables explicatives et les variables objectives
X_train = train.drop(['id','dteday','cnt'], axis=1)
y_train = train['cnt']
X_test = test.drop(['id','dteday'], axis=1)
#Recherche d'hyper paramètres
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_)
#Apprenez à nouveau avec des paramètres optimaux
reg = xgb.XGBRegressor(**reg_cv.best_params_)
reg.fit(X_train, y_train)
#Prédire à l'aide des données d'entraînement
pred_train = reg.predict(X_train)
#Vérifiez si la valeur prédite est valide
train_value = y_train.values
_df = pd.DataFrame({'actual':train_value,'pred':pred_train})
_df.plot(figsize=(12,5))
En général, il semble que vous puissiez prédire correctement.
#Tracé de l'importance des caractéristiques
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()
#Calcul de la valeur prévue pour les données de test
pred_test = reg.predict(X_test)
#Collez le résultat et sortez le fichier
sample = pd.read_csv("sample_submit.csv",header=None)
sample[1] = pred_test
sample.to_csv("submit01.csv",index=None,header=None)
Il était 29e sur 209 personnes. Cette fois, je l'ai simplement mis dans XGBoost, il semble donc y avoir de la place pour d'autres idées telles que la création de fonctionnalités, un autre modèle d'apprentissage et l'apprentissage d'ensemble. J'aimerais réessayer, donc j'aimerais à nouveau écrire un article à ce moment-là.
Recommended Posts