python3 - Predecir cuánto tiempo tardará en ejecutarse una clasificación scikit-learn
scikit learn español (2)
Si está usando IPython, puede considerar usar los comandos mágicos incorporados, como % tiempo y % tiempo,
% time : ejecución en tiempo de una expresión o expresión de Python. La CPU y los tiempos del reloj de pared se imprimen y se devuelve el valor de la expresión (si corresponde). Tenga en cuenta que en Win32, la hora del sistema siempre se informa como 0, ya que no se puede medir.
% timeit: ejecución en tiempo de una declaración o expresión de Python mediante el módulo timeit
Ejemplo:
In [4]: %timeit NMF(n_components=16, tol=1e-2).fit(X)
1 loops, best of 3: 1.7 s per loop
Referencias:
https://ipython.readthedocs.io/en/stable/interactive/magics.html
¿Hay alguna forma de predecir cuánto tiempo tomará ejecutar un clasificador desde sci-kit learn según los parámetros y el conjunto de datos? Lo sé, bastante meta, ¿verdad?
Algunas clasificaciones / combinaciones de parámetros son bastante rápidas, y otras toman tanto tiempo que eventualmente acabo con el proceso. Me gustaría una manera de estimar por adelantado cuánto tiempo tomará.
Alternativamente, aceptaría algunos consejos sobre cómo establecer parámetros comunes para reducir el tiempo de ejecución.
Existen clases muy específicas de clasificadores o regresores que informan directamente el tiempo restante o el progreso de su algoritmo (número de iteraciones, etc.). La mayoría de esto se puede activar pasando la opción verbose=2
(cualquier número alto> 1) al constructor de modelos individuales. Nota: este comportamiento es según sklearn-0.14. Las versiones anteriores tienen un resultado detallado un poco diferente (aunque sigue siendo útil).
El mejor ejemplo de esto es ensemble.RandomForestClassifier
o ensemble.GradientBoostingClassifier` que imprime el número de árboles construidos hasta el momento y el tiempo restante.
clf = ensemble.GradientBoostingClassifier(verbose=3)
clf.fit(X, y)
Out:
Iter Train Loss Remaining Time
1 0.0769 0.10s
...
O
clf = ensemble.RandomForestClassifier(verbose=3)
clf.fit(X, y)
Out:
building tree 1 of 100
...
Esta información de progreso es bastante útil para estimar el tiempo total.
Luego hay otros modelos como SVM que imprimen el número de iteraciones de optimización completadas, pero no informan directamente el tiempo restante.
clf = svm.SVC(verbose=2)
clf.fit(X, y)
Out:
*
optimization finished, #iter = 1
obj = -1.802585, rho = 0.000000
nSV = 2, nBSV = 2
...
Modelos como los modelos lineales no proporcionan tal información de diagnóstico por lo que sé.
Consulte este hilo para saber más acerca de lo que significan los niveles de verbosidad: scikit-learn encaja en el tiempo restante