Salut! Nous recherchons actuellement les odeurs du code dans les projets d'apprentissage automatique dans le contexte de l'industrie et recherchons des commentaires pour
dslinter! Ce serait une aide massive si vous pouviez exécuterdslintersur votre projet d'apprentissage automatique dans un paramètre de l'industrie et envoyer le fichier TXT généré à [email protected]. Les étapes et les commandes peuvent être trouvées ici et cela ne devrait pas prendre plus de 10 minutes. N'hésitez pas à m'envoyer un e-mail si vous souhaitez passer par le processus ensemble. Le processus est anonyme et nous supprimerons toutes les informations sensibles avant la publication des résultats. Merci beaucoup!
dslinter est un plugin Pylint pour lier le code de science des données et d'apprentissage automatique. Il vise à aider les développeurs à assurer la qualité du code d'apprentissage automatique et prend en charge les bibliothèques Python suivantes: Tensorflow, Pytorch, Scikit-Learn, Pandas, Numpy et Scipy.
dslinter met en œuvre les règles de détection pour les odeurs identifiées par nos travaux précédents. Les odeurs sont collectées dans les papiers, la littérature grise, les commits de github et les poteaux de débordement de pile. Les odeurs sont également élaborées sur un site Web :)
L'exemple de projet dans la vidéo de démonstration peut être trouvé ici.
Pour installer à partir de l'index du package Python:
pip install dslinter
pylint --load-plugins=dslinter <other_options> <path_to_sources>
Ou placez un fichier de configuration .pylintrc qui contient des paramètres ci-dessus dans le dossier où vous exécutez votre commande et exécutez:
pylint <path_to_sources>
[Pour les utilisateurs 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>
[Pour les utilisateurs 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>
Ou placez un fichier de configuration .pylintrc qui contient des paramètres ci-dessus dans le dossier où vous exécutez votre commande et exécutez:
pylint <path_to_sources>
Les contributions sont les bienvenues! Si vous souhaitez contribuer, veuillez consulter les étapes suivantes:
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter utilise poetry pour gérer les dépendances, vous devrez donc d'abord installer poetry , puis installer les dépendances. pip install poetry
poetry install
dslinter à partir de la source à des fins de développement, installez-la avec: poetry build
pip install ./dist/dslinter-version.tar.gz
poetry run pytest .
C5501 - C5506 | Importer | Importer Checker : Vérifiez si les modules de science des données sont importés à l'aide des conventions de dénomination correctes.
R5501 | inutile-iteration-pandas | Contrôle d'itération inutile (PANDAS) : Les solutions vectorisées sont préférées aux itérateurs pour les dataframes. Si des itérations sont utilisées alors qu'il existe des API vectorisées, la règle est violée.
W5501 | dataframe-iteration-modification-pandas | Contrôle d'itération inutile (PANDAS) : Un DataFrame où est itéré ne doit pas être modifié. Si le dataframe est modifié lors de l'itération, la règle est violée.
R5502 | inutile-itération-tensorflow | Contrôle d'itération inutile (TensorFlow) : S'il y a une opération d'attribution d'augmentation dans la boucle, la règle est violée. L'attribution d'augmentation dans la boucle peut être remplacée par une solution vectorisée dans les API TensorFlow.
E5501 | Nan Numpy | Nan Equality Checker (Numpy) : Les valeurs ne peuvent pas être comparées à NP.NAN, comme np.nan != np.nan .
W5502 | pandas d'indexation de la chaîne | Contrôle d'indexation de la chaîne (PANDAS) : L'indexation de la chaîne est considérée comme une mauvaise pratique dans le code PANDAS et doit être évitée. Si l'indexation de la chaîne est utilisée sur un Pandas DataFrame, la règle est violée.
R5503 | DataType-pandas | DataType Checker (PANDAS) : Le type de données doit être défini lorsqu'une DataFrame est importée à partir de données pour s'assurer que les formats de données sont importés comme prévu. Si le type de données n'est pas défini lors de l'importation, la règle est violée.
R5504 | Colonne-Sélection-Pandas | Colonne Sélection de damier (PANDAS) : La colonne doit être sélectionnée après l'importation de Dataframe pour mieux expliquer ce qu'il faut s'attendre en aval.
R5505 | fusion-paramètre-pandas | Merger Paramètre Checker (PANDAS) : Paramètres «Comment», «On» et «Valider» devraient être définis pour la fusion des opérations afin d'assurer l'utilisation correcte de la fusion.
W5503 | INSPLACE-PANDAS | INPPLACE DE CHECKER (PANDAS) : Les opérations sur DataFrames renvoient de nouvelles dataframes, et elles doivent être affectées à une variable. Sinon, le résultat sera perdu et la règle est violée. Les opérations de la liste blanche et avec un ensemble de paramètres in_place sont exclues.
W5504 | DataFrame-Conversion-Pandas | DataFrame Conversion Checker (PANDAS) : Pour la conversion de DataFrame dans le code PANDAS, utilisez .to_numpy () au lieu de .Values. Si. Les valeurs sont utilisées dans le code Pandas, la règle est violée.
W5505 | Scaleur-Missing-ScikitLearn | SCALER Missing Checker (Scikitlearn) : Vérifiez si le scalmer est utilisé avant chaque opération sensible à l'échelle dans les codes Scikit-Learn. Les opérations sensibles à la mise à l'échelle comprennent l'analyse des composants principaux (PCA), la machine à vecteur de support (SVM), la descente de gradient stochastique (SGD), le classificateur Perceptron multi-couches et la régularisation L1 et L2.
R5506 | Hyperparamètres-ScikitLearn | Hyperparamètre Checker (Scikitlearn) : Pour les algorithmes d'apprentissage Scikit-Learn, certains hyperparamètres importants devraient être définis.
R5507 | Hyperparamètre-TensorFlow | Hyperparamètre Checker (TensorFlow) : Pour l'algorithme d'apprentissage du réseau neuronal, certains hyperparamètres Imporatnt doivent être définis, tels que le taux d'apprentissage, la taille du lot, l'élan et la décroissance du poids.
R5508 | Hyperparamètre-Pytorch | Hyperparamètre Checker (Pytorch) : Pour l'algorithme d'apprentissage du réseau neuronal, certains hyperparamètres importants devraient être définis, tels que le taux d'apprentissage, la taille du lot, l'élan et la décroissance du poids.
W5506 | Memory-Release-TensorFlow | Memorde Release Checker (TensorFlow) : Si un réseau neuronal est créé dans la boucle et qu'aucune opération claire de mémoire n'est utilisée, la règle est violée.
W5507 | déterministe-pytorch | Le vérificateur d'utilisation de l'algorithme déterministe (Pytorch) : Si l'algorithme USE_DETERMINISM n'est pas utilisé dans un programme Pytorch, la règle est violée.
W5508 | Randomness-Control Numpy | Randomness Control Checker (Numpy) : le np.seed () doit être utilisé pour préserver la reproductibilité dans un programme d'apprentissage automatique.
W5509 | Randomness-Control-ScikitLearn | Contrôle de contrôle aléatoire (Scikitlearn) : Pour les résultats reproductibles entre les exécutions, supprimez toute utilisation de Random_State = Aucun dans les estimateurs Scikit-Learn.
W5510 | Randomness-Control-TensorFlow | Randomness Control Checker (TensorFlow) : le tf.random.set_seed () doit être utilisé pour préserver la reproductibilité dans un programme TensorFlow.
W5511 | Randomness-Control-Pytorch | Contrôle de contrôle de l'aléatoire (pytorch) : le torch.manual_seed () doit être utilisé pour préserver la reproductibilité dans un programme TensorFlow.
W5512 | aléatoire-contrôle-dataloader-pytorch | Contrôle de contrôle aléatoire (pytorch-dataloader) : le worker_init_fn () et le générateur doivent être définis dans DatalOader pour préserver la reproductibilité. S'ils ne sont pas définis, la règle est violée.
W5513 | manquant-mask-tensorflow | Masque Checker manquant (TensorFlow) : Si la fonction de journal est utilisée dans le code, vérifiez si la valeur de l'argument est valide.
W5514 | masque manquant-pytorch | Masque Checker manquant (Pytorch) : Si la fonction de journal est utilisée dans le code, vérifiez si la valeur de l'argument est valide.
W5515 | Tensor-array-TensorFlow | Vérificateur du tableau du tenseur (TensorFlow) : Utilisez tf.TensorArray () pour la culture du tableau dans la boucle.
W5516 | Pytorch avant | Net Forward Checker (Pytorch) : Il est recommandé d'utiliser self.net () plutôt que self.net.forward () dans le code pytorch. Si self.net.forward () est utilisé dans le code, la règle est violée.
W5517 | Gradient-Clear-Pytorch | Gradient Clear Checker (Pytorch) : Le perte_fn.backward () et Optimizer.Step () doivent être utilisés avec Optimizer.zero_grad (). Si le .zero_grad() est manquant dans le code, la règle est violée.
W5518 | pipeline-non utilisé-Scikitlearn | Pipeline Checker (Scikitlearn) : Tous les estimateurs de Scikit-Learn doivent être utilisés à l'intérieur des pipelines, pour éviter la fuite de données entre les données de formation et de test.
W5519 | le-threshold-scikitlearn | Le vérificateur de seuil dépendant (TensorFlow) : Si l'évaluation dépendante du seuil (par exemple, F-Score) est utilisée dans le code, vérifiez si les métriques d'évaluation des seuils (par exemple, ASC) sont également utilisées dans le code.
W5520 | Bénéfice dépendant-TensorFlow | Le vérificateur de seuil dépendant (pytorch) : si l'évaluation dépendante du seuil (par exemple, F-score) est utilisée dans le code, vérifiez si les métriques d'évaluation des seuils (par exemple, ASC) sont également utilisées dans le code.
W5521 | pytorch de threshold dépendant | Le vérificateur de seuil dépendant (Scikitlearn) : Si l'évaluation dépendante du seuil (par exemple, F-Score) est utilisée dans le code, vérifiez si les métriques d'évaluation des seuils (par exemple, ASC) sont également utilisées dans le code.
Le DSLinter est développé par Mark Haakman et Haiyin Zhang lors de nos thèses de Master au Software Engineering Research Group (Serg) à Tu Delft et à l'IN pour le laboratoire de recherche fintech, supervisé par Luís Cruz et Arie Van Deursen.
RETENU: HAIYIN ZHANG [[email protected]].