¡Hola! ¡Actualmente estamos investigando los olores del código en proyectos de aprendizaje automático en el contexto de la industria y buscando comentarios para
dslinter! Sería una ayuda masiva si pudiera ejecutardslinteren su proyecto de aprendizaje automático en un entorno de la industria y enviar el archivo TXT generado a [email protected]. Los pasos y los comandos se pueden encontrar aquí y no debe tomar más de 10 minutos. No dude en enviarme un correo electrónico si desea pasar por el proceso juntos. El proceso es anónimo y eliminaremos cualquier información confidencial antes de que se publiquen los resultados. ¡Muchas gracias!
dslinter es un complemento de pylint para la ciencia de datos y el código de aprendizaje automático. Su objetivo es ayudar a los desarrolladores a garantizar la calidad del código de aprendizaje automático y admite las siguientes bibliotecas de Python: TensorFlow, Pytorch, Scikit-Learn, Pandas, Numpy y SciPy.
dslinter implementa las reglas de detección para los olores identificados por nuestro trabajo anterior. Los olores se recolectan de documentos, literatura gris, comodidades de Github y postes de desbordamiento de pila. Los olores también se elaboran en un sitio web :)
El proyecto de ejemplo en el video de demostración se puede encontrar aquí.
Para instalar desde el índice de paquetes de Python:
pip install dslinter
pylint --load-plugins=dslinter <other_options> <path_to_sources>
O coloque un archivo de configuración .pylintrc que contenga la configuración anterior en la carpeta donde ejecuta su comando y ejecuta:
pylint <path_to_sources>
[Para usuarios de Linux/Mac OS]:
pylint
--load-plugins=dslinter
--disable=all
--enable=import,unnecessary-iteration-pandas,unnecessary-iteration-tensorflow,
nan-numpy,chain-indexing-pandas,
merge-parameter-pandas,
dataframe-conversion-pandas,scaler-missing-scikitlearn,hyperparameters-scikitlearn,
hyperparameters-tensorflow,hyperparameters-pytorch,memory-release-tensorflow,
deterministic-pytorch,randomness-control-numpy,randomness-control-scikitlearn,
randomness-control-tensorflow,randomness-control-pytorch,randomness-control-dataloader-pytorch,
missing-mask-tensorflow,missing-mask-pytorch,tensor-array-tensorflow,
forward-pytorch,pipeline-not-used-scikitlearn,
dependent-threshold-scikitlearn,dependent-threshold-tensorflow,dependent-threshold-pytorch
--output-format=text:report.txt,colorized
--reports=y
<path_to_sources>
[Para usuarios de Windows]:
pylint --load-plugins=dslinter --disable=all --enable=import,unnecessary-iteration-pandas,unnecessary-iteration-tensorflow,nan-numpy,chain-indexing-pandas,merge-parameter-pandas,dataframe-conversion-pandas,scaler-missing-scikitlearn,hyperparameters-scikitlearn,hyperparameters-tensorflow,hyperparameters-pytorch,memory-release-tensorflow,deterministic-pytorch,randomness-control-numpy,randomness-control-scikitlearn,randomness-control-tensorflow,randomness-control-pytorch,randomness-control-dataloader-pytorch,missing-mask-tensorflow,missing-mask-pytorch,tensor-array-tensorflow,forward-pytorch,pipeline-not-used-scikitlearn,dependent-threshold-scikitlearn,dependent-threshold-tensorflow,dependent-threshold-pytorch --output-format=text:report.txt,colorized --reports=y <path_to_sources>
O coloque un archivo de configuración .pylintrc que contenga la configuración anterior en la carpeta donde ejecuta su comando y ejecuta:
pylint <path_to_sources>
¡Las contribuciones son bienvenidas! Si desea contribuir, consulte los siguientes pasos:
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter utiliza poetry para administrar dependencias, por lo que primero deberá instalar poetry e instalar las dependencias. pip install poetry
poetry install
dslinter desde la fuente para fines de desarrollo, instálelo con: poetry build
pip install ./dist/dslinter-version.tar.gz
poetry run pytest .
C5501 - C5506 | importación | Verificador de importación : verifique si los módulos de ciencia de datos se importan utilizando las convenciones de nombres correctas.
R5501 | innecesario-iteración-pandas | Verificador de iteración innecesario (PANDAS) : se prefieren las soluciones vectorizadas sobre los iteradores para los marcos de datos. Si se usan iteraciones mientras se pueden usar API vectorizadas, se viola la regla.
W5501 | DataFrame-iteration-modificación-pandas | Verificador de iteración innecesario (PANDAS) : no debe modificarse un marco de datos donde se itera. Si el marco de datos se modifica durante la iteración, se viola la regla.
R5502 | innecesario-iteration-tensorflow | Verificador de iteración innecesario (TensorFlow) : si hay alguna operación de asignación de aumento en el bucle, se viola la regla. La asignación de aumento en el bucle se puede reemplazar con una solución vectorizada en las API TensorFlow.
E5501 | Nan-Numpy | NAN Igualdad Checker (Numpy) : los valores no se pueden comparar con np.nan, como np.nan != np.nan .
W5502 | PANDAS INDEXING DE CADENA | Vérmico de indexación de cadena (PANDAS) : la indexación de cadena se considera mala práctica en el código PANDAS y debe evitarse. Si se usa la indexación de cadena en un marcador de datos PANDAS, se viola la regla.
R5503 | DataType-Pandas | DataType Checker (PANDAS) : el tipo de datos se debe establecer cuando un marco de datos se importe de los datos para garantizar que los formatos de datos se importen como se esperaba. Si el tipo de datos no se establece al importar, se viola la regla.
R5504 | columna-selección-pandas | Comprobador de selección de columna (PANDAS) : la columna debe seleccionarse después de importar el marco de datos para elaborar mejor qué se espera en el flujo posterior.
R5505 | Fusion-Parameter-Pandas | Fusionar el verificador de parámetros (pandas) : los parámetros 'cómo', 'en' y 'validar' deben establecerse para las operaciones de fusión para garantizar el uso correcto de la fusión.
W5503 | inplace-pandas | Inside Checker (PANDAS) : las operaciones en Dataframes devuelven nuevos marcos de datos, y deben asignarse a una variable. De lo contrario, se perderá el resultado y se violará la regla. Se excluyen las operaciones de la lista blanca y con el conjunto de parámetros in_place .
W5504 | DataFrame-Conversion-Pandas | DataFrame Conversion Checker (PANDAS) : para la conversión de DataFrame en el código PANDAS, use .to_numpy () en lugar de .values. Si.
W5505 | escalador-señor-scikitlearn | CHECKER FALTO DESCUBRE (Scikitlearn) : verifique si el escalador se usa antes de cada operación sensible a la escala en los códigos Scikit-Learn. Las operaciones sensibles a la escala incluyen el análisis de componentes principales (PCA), la máquina de vectores de soporte (SVM), el descenso de gradiente estocástico (SGD), el clasificador de perceptrones de múltiples capas y la regularización L1 y L2.
R5506 | Hyperparameters-Scikitlearn | CHECKER DE HIPERPARAMETRO (Scikitlearn) : para algoritmos de aprendizaje de Scikit-Learn, se deben establecer algunos hiperparámetros importantes.
R5507 | Hyperparameter-tensorflow | CHECKER DE HIPERPARAMETRO (TensorFlow) : para el algoritmo de aprendizaje de redes neuronales, se deben establecer algunos hiperparámetros importantes, como la velocidad de aprendizaje, el tamaño del lote, el momento y la descomposición de peso.
R5508 | Hyperparameter-Pytorch | CHECKER DE HIPERPARAMETRO (Pytorch) : para el algoritmo de aprendizaje de redes neuronales, se deben establecer algunos hiperparámetros importantes, como la velocidad de aprendizaje, el tamaño del lote, el impulso y la descomposición de peso.
W5506 | Memoria-Release-TensorFlow | Verificador de liberación de memoria (TensorFlow) : si se crea una red neuronal en el bucle y no se usa una operación de memoria clara, se viola la regla.
W5507 | determinista-Pytorch | Verificador de uso del algoritmo determinista (Pytorch) : si el algoritmo Determinista Use_Determinista no se usa en un programa Pytorch, se viola la regla.
W5508 | aleatoriedad-control-numpy | Verificador de control de aleatoriedad (Numpy) : el np.seed () debe usarse para preservar la reproducibilidad en un programa de aprendizaje automático.
W5509 | aleatorness-control-scikitlearn | Verificador de control de aleatoriedad (Scikitlearn) : para resultados reproducibles en las ejecuciones, elimine cualquier uso de Random_State = None en los estimadores de Scikit-Learn.
W5510 | aleatorness-control-tensorflow | Valor de control de aleatoriedad (TensorFlow) : el tf.random.set_seed () debe usarse para preservar la reproducibilidad en un programa TensorFlow.
W5511 | aleatorness-control-pytorch | Valor de control de aleatoriedad (Pytorch) : el Torch.Manual_seed () debe usarse para preservar la reproducibilidad en un programa TensorFlow.
W5512 | aleatorness-control-dataloader-pytorch | Valor de control de aleatoriedad (Pytorch-Dataloader) : el trabajador_init_fn () y el generador deben establecerse en dataLoader para preservar la reproducibilidad. Si no están establecidos, se viola la regla.
W5513 | Faltar-Mask-TensorFlow | Valor de verificación faltante de la máscara (TensorFlow) : si se usa la función de registro en el código, verifique si el valor del argumento es válido.
W5514 | Faltar-Mask-Pytorch | Mask Falting Checker (Pytorch) : si la función de registro se usa en el código, verifique si el valor del argumento es válido.
W5515 | Tensor-array-tensorflow | Tensor Array Checker (TensorFlow) : use tf.tensorArray () para cultivar una matriz en el bucle.
W5516 | Forward-Pytorch | Net Reward Checker (Pytorch) : se recomienda usar self.net () en lugar de self.net.forward () en el código Pytorch. Si Self.net.forward () se usa en el código, se viola la regla.
W5517 | Gradiente-clara-pytorch | CHECKER CLEAR DE PRINCIPAL (PYTORCH) : el Loss_fn.Backward () y Optimizer.step () deben usarse junto con Optimizer.Zero_Grad (). Si falta el .zero_grad() en el código, se viola la regla.
W5518 | Pipeline-no usado-scikitlearn | CHEPINELY CHEPKER (Scikitlearn) : todos los estimadores de Scikit-Learn deben usarse dentro de las tuberías, para evitar la fuga de datos entre el entrenamiento y los datos de prueba.
W5519 | dependiente-umbral-scikitlearn | Verificador de umbral dependiente (flujo de tensor) : si la evaluación dependiente del umbral (p. Ej., F-score) se usa en el código, verifique si las métricas de evaluación de umbral inenpendiente (p. Ej., AUC) también se usan en el código.
W5520 | flujo de tensor de umbral dependiente | Verificador de umbral dependiente (Pytorch) : si la evaluación dependiente del umbral (p. Ej., F-puntore) se usa en el código, verifique si las métricas de evaluación de umbral-inenpendiente (p. Ej., AUC) también se usan en el código.
W5521 | Pytorch de umbral dependiente | Vérmico de umbral dependiente (Scikitlearn) : si la evaluación dependiente del umbral (p. Ej., F-Score) se usa en el código, verifique si las métricas de evaluación de umbral-inenpendiente (p. Ej., AUC) también se usan en el código.
El DSLinter es desarrollado por Mark Haakman y Haiyin Zhang durante nuestras Tesis maestras en el Grupo de Investigación de Ingeniería de Software (SERG) en TU Delft y la IA de IA de FinTech Lab, supervisado por Luís Cruz y Arie Van Deursen.
Mantenedor: Haiyin Zhang [[email protected]].