Dans les concours d'analyse tels que Kaggle et Signate, la vitesse de l'action initiale est importante, donc Organisez les modèles de type Jupyter Notebook fréquemment utilisés pour accélérer l'action initiale. Mis à jour de temps en temps.
2020.5.25 Modifier le paramètre de nombre aléatoire (fonctionnalisation)
modèle d'importation
import pandas as pd
import numpy as np
import pandas_profiling as pdp
import lightgbm as lgb
import random
from numba import jit
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.dates import DateFormatter
%matplotlib inline
import seaborn as sns
def seed_everything(seed):
random.seed(seed)
np.random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
if "tr" in sys.modules:
tf.random.set_seed(seed)
seed_everything(28)
#Spécifiez le nombre maximum de lignes à afficher (50 lignes sont spécifiées ici)
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)
%load_ext autoreload
%autoreload 2
import os
# windows
if os.name == 'nt':
path = '../input/data/'
import japanize_matplotlib
sns.set(font="IPAexGothic")
elif os.name == 'posix':
# Kaggle
if 'KAGGLE_DATA_PROXY_TOKEN' in os.environ.keys():
path = '/kaggle/input/'
# Google Colab
else:
from google.colab import drive
drive.mount('/content/drive')
!ls drive/My\ Drive/'Colab Notebooks'/xxx #xxx réécriture
path = "./drive/My Drive/Colab Notebooks/xxx/input/data/" #xxx réécriture
#Vérifiez le temps restant de la session
!cat /proc/uptime | awk '{print $1 /60 /60 /24 "days (" $1 / 60 / 60 "h)"}'
print(os.name)
print(path)
Identification de la plate-forme exécutant Python
import os
# windows
if os.name == 'nt':
#xxx
elif os.name == 'posix':
# Kaggle
if 'KAGGLE_DATA_PROXY_TOKEN' in os.environ.keys():
#xxx
# Google Colab
else:
#xxx
print(os.name)
Même si vous modifiez la bibliothèque, elle sera automatiquement chargée lors de l'exécution.
%load_ext autoreload
%autoreload 2
référence https://qiita.com/Accent/items/f6bb4d4b7adf268662f4
Si vous voulez accélérer, il est important de trouver d'abord le goulot d'étranglement. Devrait être utilisé dans les ordinateurs portables tels que Jupyter. Facile: %% time est utile si vous souhaitez connaître le temps de traitement dans une cellule. Détails:% lprun est utile si vous souhaitez connaître le temps de traitement détaillé de chaque ligne.
4.1 %%time Mettez-le au début j de la cellule. Il affiche le temps d'exécution de la cellule entière.
%%time
def func(num):
sum = 0
for i in range(num):
sum += i
return sum
out = func(10000)
4.2 %lprun Il affiche le temps d'exécution pour chaque ligne. %% prun est une unité de module, il peut donc être difficile à comprendre. % lprun est plus facile à comprendre ligne par ligne.
Ci-dessous, 3 étapes. Étape 0. Installation Étape 1. Route Étape 2. Exécution
Ignorer si installé. Google Coab, Kaggle Cloud Command
!pip install line_profiler
%load_ext line_profiler
def func(num):
sum = 0
for i in range(num):
sum += i
return sum
%lprun -f func out = func(10000)
Si vous utilisez une plateforme cloud telle que Google Colab, il peut être difficile de changer de système. C'est relativement facile car il installe automatiquement les polices et les packages japonais.
Notez que seaborn définit également la police lors de l'importation, alors exécutez sns.set à la fin.
import seaborn as sns
import japanize_matplotlib
sns.set(font="IPAexGothic") ###Assurez-vous de courir en dernier
Lors de l'affichage du DataFrame des pandas, il est abrégé (...) après un certain nombre de lignes / colonnes. Définissez le nombre maximum d'affichages pour contrôler l'omission.
#Spécifiez le nombre maximum de lignes à afficher (50 lignes sont spécifiées ici)
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)
Le type est automatiquement défini à partir de la plage de valeurs numériques dans le bloc de données.
Référence par @gemartin https://www.kaggle.com/gemartin/load-data-reduce-memory-usage
# Original code from https://www.kaggle.com/gemartin/load-data-reduce-memory-usage by @gemartin
# Modified to support timestamp type, categorical type
# Modified to add option to use float16 or not. feather format does not support float16.
from pandas.api.types import is_datetime64_any_dtype as is_datetime
from pandas.api.types import is_categorical_dtype
def reduce_mem_usage(df, use_float16=False):
""" iterate through all the columns of a dataframe and modify the data type
to reduce memory usage.
"""
start_mem = df.memory_usage().sum() / 1024**2
print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))
for col in df.columns:
if is_datetime(df[col]) or is_categorical_dtype(df[col]):
# skip datetime type or categorical type
continue
col_type = df[col].dtype
if col_type != object:
c_min = df[col].min()
c_max = df[col].max()
if str(col_type)[:3] == 'int':
if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
df[col] = df[col].astype(np.int8)
elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
df[col] = df[col].astype(np.int16)
elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
df[col] = df[col].astype(np.int32)
elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
df[col] = df[col].astype(np.int64)
else:
if use_float16 and c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
df[col] = df[col].astype(np.float16)
elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
df[col] = df[col].astype(np.float32)
else:
df[col] = df[col].astype(np.float64)
else:
df[col] = df[col].astype('category')
end_mem = df.memory_usage().sum() / 1024**2
print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))
print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))
return df
Si vous ne corrigez pas la graine du nombre aléatoire, le résultat de la prédiction changera à chaque fois et l'effet sera difficile à comprendre, alors corrigez-le.
Paramétrage des modules liés aux nombres aléatoires
import numpy as np
import random
import os
def seed_everything(seed):
random.seed(seed)
np.random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
if "tr" in sys.modules:
tf.random.set_seed(seed)
Paramètres LightGBM liés aux nombres aléatoires
lgb_params = {
'random_state':28,
'bagging_fraction_seed':28,
'feature_fraction_seed':28,
'data_random_seed':28,
'seed':28
}
Recommended Posts