Python: je souhaite mesurer proprement le temps de traitement d'une fonction

introduction

Je pense qu'il y a des moments où vous voulez mesurer le temps d'exécution d'une fonction, pas seulement scikit-learn, mais après la mesure, le calcul est foiré.

code

Si vous souhaitez mesurer le temps de traitement d'une fonction, je pense personnellement qu'il vaut mieux utiliser le décorateur, qui est l'une des fonctionnalités intéressantes de Python. Laissez les calculs sales au décorateur.

import time
def clock(func):
	def clocked(*args):
		t0 = time.perf_counter()
		result = func(*args)
		elapsed = time.perf_counter() - t0
		arg_str = ", ".join(repr(arg) for arg in args)
		print("[%0.8fs %s(%s) -> %r" % (elapsed,func.__name__,arg_str,result))
		return result
	return clocked

démo

Mesurons facilement le temps d'apprentissage de scikit-learn. Le code ci-dessus est enregistré dans clockdeco.py.

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from clockdeco import clock

# load iris datasets
iris = datasets.load_iris()
X = iris.data[:,[2,3]]
y = iris.target
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)

# preprocessing
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)


def modelDemo(model,x_train,y_train,test):
	model.fit(x_train,y_train)
	y_pred = model.predict(test)
	return round(accuracy_score(y_test,y_pred),2)


# Perceptron
from sklearn.linear_model import Perceptron
@clock
def PerceptronDemo():
	ppn = Perceptron(max_iter=40,eta0=0.1,random_state=0,shuffle=True)
	result = modelDemo(model=ppn,x_train=X_train_std,y_train=y_train,test=X_test_std)
	return result

# LogisticRegression
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
@clock
def LogisticRegressionDemo():
	#lr = LogisticRegression(C=1000.0,random_state=0)
	lr = SGDClassifier(loss="log")
	result = modelDemo(model=lr,x_train=X_train_std,y_train=y_train,test=X_test_std)
	return result

# SuportVectorMachine
from sklearn.svm import SVC
@clock
def SVMDemo():
	svm = SVC(kernel="linear", C=1.0, random_state=0)
	result = modelDemo(model=svm,x_train=X_train_std,y_train=y_train,test=X_test_std)
	return result


# DecisionTree
from sklearn.tree import DecisionTreeClassifier
@clock
def DecisionTreeDemo():
	tree = DecisionTreeClassifier(criterion="entropy",max_depth=3,random_state=0)
	result = modelDemo(model=tree,x_train=X_train,y_train=y_train,test=X_test)
	return result

# RandomForest
from sklearn.ensemble import RandomForestClassifier
@clock
def RandomForestDemo():
	forest = RandomForestClassifier(criterion="entropy",n_estimators=10,random_state=1,n_jobs=2)
	result = modelDemo(model=forest,x_train=X_train,y_train=y_train,test=X_test)
	return result

# KNN
from sklearn.neighbors import KNeighborsClassifier
@clock
def KNNDemo():
	knn = KNeighborsClassifier(n_neighbors=5,p=2,metric="minkowski")
	result = modelDemo(model=knn,x_train=X_train,y_train=y_train,test=X_test)
	return result

# wbdc dataset
# pipeline test
from skutils import load_wdbc_dataset
df = load_wdbc_dataset()
X = df.loc[:,2:].values
y = df.loc[:,1].values

#Classe 0,Définir sur 1
from skutils import label_encode
le,y = label_encode(y)
X_train_w,X_test_w,y_train_w,y_test_w = train_test_split(X,y,test_size=0.20,random_state=1)

from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
@clock
def wdbc_piplineDemo():
	procs = [("scl",StandardScaler()),
			("pca",PCA(n_components=2)),("clf",LogisticRegression(random_state=1,solver='lbfgs'))]
	pipe_lr = Pipeline(procs)
	pipe_lr.fit(X_train_w,y_train_w)
	return round(pipe_lr.score(X_test_w,y_test_w),2)



demos = [globals()[name] for name in globals()
			if name.endswith("Demo")
			and name != "modelDemo"]


if __name__ == "__main__":
	for demo in demos :
		demo()

Je pense que le décorateur a permis d'écrire assez proprement. À propos, le résultat de l'exécution est le suivant.

スクリーンショット 2020-07-29 22.35.19.png

Recommended Posts

Python: je souhaite mesurer proprement le temps de traitement d'une fonction
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Une fonction qui mesure le temps de traitement d'une méthode en python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Je veux démarrer beaucoup de processus à partir de python
J'ai fait une fonction pour vérifier le modèle de DCGAN
Je veux connaître la nature de Python et pip
Je veux créer un Dockerfile pour le moment.
Je veux créer un environnement Python
L'histoire du traitement A du blackjack (python)
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Je veux sortir le début du mois prochain avec Python
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
Je souhaite séparer le traitement entre le temps de test et l'environnement de production
Récupérer l'appelant d'une fonction en Python
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
Une manière intelligente de chronométrer le traitement avec Python
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Je souhaite trier une liste dans l'ordre des autres listes
Je veux colorer une partie de la chaîne Excel avec Python
Je souhaite personnaliser l'apparence de zabbix
Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.
Je souhaite utiliser la fonction d'activation Mish
Je veux afficher la progression en Python!
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je veux ajouter du silence pendant 1 seconde au début d'un fichier wav
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je veux recadrer l'image le long du contour au lieu du rectangle [python OpenCV]
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux grep le résultat de l'exécution de strace
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
Je veux hériter de l'arrière avec la classe de données python
Je veux bien comprendre les bases de Bokeh
Je veux travailler avec un robot en python.
Je souhaite installer un package de Php Redis
[Python] Je veux faire d'une liste imbriquée un taple
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux utiliser le jeu de données R avec python
Je veux faire fonctionner un ordinateur quantique avec Python
Note Python: Le mystère de l'attribution d'une variable à une variable
Je souhaite augmenter la sécurité de la connexion SSH