Oi! Atualmente, estamos pesquisando o código tem um cheiro de projetos de aprendizado de máquina no contexto da indústria e procurando feedback para
dslinter! Seria uma ajuda maciça se você pudesse executardslinterem seu projeto de aprendizado de máquina em um ambiente do setor e enviar o arquivo TXT gerado para [email protected]. As etapas e comandos podem ser encontrados aqui e não devem levar mais de 10 minutos. Sinta -se à vontade para me enviar um e -mail se quiser passar juntos pelo processo. O processo é anônimo e removeremos qualquer informação confidencial antes que os resultados sejam publicados. Muito obrigado!
dslinter é um plug -in Pylint para linha de dados de dados e aprendizado de máquina. O objetivo é ajudar os desenvolvedores a garantir a qualidade do código de aprendizado de máquina e suporta as seguintes bibliotecas Python: Tensorflow, Pytorch, Scikit-Learn, Pandas, Numpy e Scipy.
dslinter implementa as regras de detecção para cheiros identificados por nosso trabalho anterior. Os cheiros são coletados de papéis, literatura cinzenta, cometidos do GitHub e postes de transbordamento de pilha. Os cheiros também são elaborados em um site :)
O projeto de exemplo no vídeo de demonstração pode ser encontrado aqui.
Para instalar no Índice de Pacote Python:
pip install dslinter
pylint --load-plugins=dslinter <other_options> <path_to_sources>
Ou coloque um arquivo de configuração .pylintrc que contém configurações acima na pasta em que você executa seu comando e executa:
pylint <path_to_sources>
[Para usuários do 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 usuários do 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 coloque um arquivo de configuração .pylintrc que contém configurações acima na pasta em que você executa seu comando e executa:
pylint <path_to_sources>
As contribuições são bem -vindas! Se você deseja contribuir, consulte as seguintes etapas:
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter usa poetry para gerenciar dependências, portanto, você precisará instalar poetry primeiro e depois instalar as dependências. pip install poetry
poetry install
dslinter da fonte para fins de desenvolvimento, instale -o com: poetry build
pip install ./dist/dslinter-version.tar.gz
poetry run pytest .
C5501 - C5506 | importação | Importar verificador : verifique se os módulos de ciência de dados são importados usando as convenções de nomeação corretas.
R5501 | desnecessário-an-isolamento-pandas | Verificador de iteração desnecessária (PANDAS) : As soluções vetorizadas são preferidas sobre os iteradores para quadros de dados. Se as iterações forem usadas enquanto houver APIs vetorizadas podem ser usadas, a regra será violada.
W5501 | DataFrame-aladeração-modificação-pandas | Verificador de iteração desnecessária (PANDAS) : um DataFrame onde é iterado não deve ser modificado. Se o DataFrame for modificado durante a iteração, a regra será violada.
R5502 | fluxo desnecessário-de-alffeto | Verificador de iteração desnecessária (TensorFlow) : Se houver alguma operação de atribuição de aumento no loop, a regra será violada. A atribuição de aumento no loop pode ser substituída por solução vetorizada nas APIs Tensorflow.
E5501 | nan-numpy | Nan Equality Checker (Numpy) : Os valores não podem ser comparados com np.nan, como np.nan != np.nan .
W5502 | Indexação de cadeia-pandas | Verificador de indexação em cadeia (PANDAS) : A indexação da cadeia é considerada uma prática ruim no código do Pandas e deve ser evitada. Se a indexação da cadeia for usada em um quadro de dados de pandas, a regra será violada.
R5503 | Datatype-pandas | Datatype Checker (PANDAS) : o Datatype deve ser definido quando um DataFrame for importado dos dados para garantir que os formatos de dados sejam importados conforme o esperado. Se o tipo de dados não estiver definido ao importar, a regra será violada.
R5504 | coluna-seleção-pandas | Verificador de seleção de colunas (pandas) : a coluna deve ser selecionada após a importação do quadro de dados para elaborar melhor o que ser esperado no jusante.
R5505 | Merge-parâmetro-pandas | Mesclar o verificador de parâmetros (pandas) : parâmetros 'como', 'on' e 'validate' devem ser definidos para operações de mesclagem para garantir o uso correto da fusão.
W5503 | inplace-pandas | Na placa do verificador (pandas) : as operações nos quadros de dados retornam novos dados de dados e devem ser atribuídos a uma variável. Caso contrário, o resultado será perdido e a regra será violada. As operações da lista de permissões e com o conjunto de parâmetros in_place são excluídas.
W5504 | DataFrame conversion-pandas | DataFrame Conversão Verificador (PANDAS) : Para conversão de dataframe no código Pandas, use .to_numpy () em vez de .Values. Se. Valores forem usados no Código Pandas, a regra será violada.
W5505 | Scaler-Missing-Scikitlearn | Verificador ausente do Scaler (Scikitlearn) : Verifique se o Scaler é usado antes de cada operação sensível ao escala nos códigos Scikit-Learn. As operações sensíveis ao escala incluem análise de componentes principais (PCA), Máquina vetorial de suporte (SVM), descida de gradiente estocástico (SGD), classificador perceptron de várias camadas e regularização L1 e L2.
R5506 | Hyperparameters-scikitlearn | Verificador de hiperparâmetro (Scikitlearn) : Para algoritmos de aprendizado do Scikit-Learn, alguns hiperparâmetros importantes devem ser definidos.
R5507 | Hyperparameter-tensorflow | Verificador de hiperparâmetro (tensorflow) : Para o algoritmo de aprendizado de rede neural, alguns hiperparâmetros importantes devem ser definidos, como taxa de aprendizado, tamanho do lote, momento e decaimento do peso.
R5508 | Hyperparameter-Pytorch | Verificador de hiperparâmetro (Pytorch) : Para o algoritmo de aprendizado de rede neural, alguns hiperparâmetros importantes devem ser definidos, como taxa de aprendizado, tamanho do lote, momento e decaimento do peso.
W5506 | FLOWLEFFRONO DE RELENDO DE MEMÓRIA | Verificador de liberação de memória (tensorflow) : se uma rede neural for criada no loop e nenhuma operação clara de memória será usada, a regra será violada.
W5507 | Pytorch determinístico | Verificador de uso de algoritmo determinístico (pytorch) : Se o algoritmo de uso de uso_determinista não for usado em um programa pytorch, a regra é violada.
W5508 | aleatoriedade-controle-numpy | Verificador de controle de aleatoriedade (Numpy) : o np.seed () deve ser usado para preservar a reprodutibilidade em um programa de aprendizado de máquina.
W5509 | aleatoriedade-controle-scikitlearn | Verificador de controle de aleatoriedade (scikitlearn) : Para obter resultados reproduzíveis entre as execuções, remova qualquer uso de random_state = nenhum nos estimadores Scikit-Learn.
W5510 | Randomidade-controle-tensorflow | Verificador de controle de aleatoriedade (tensorflow) : o tf.random.set_seed () deve ser usado para preservar a reprodutibilidade em um programa de tensorflow.
W5511 | aleatoriedade-controle-pytorch | Verificador de controle de aleatoriedade (pytorch) : a tocha.Manual_seed () deve ser usada para preservar a reprodutibilidade em um programa de tensorflow.
W5512 | aleatoriedade-controle-Dataloader-Pytorch | Verificador de controle de aleatoriedade (Pytorch-Dataloader) : O trabalhador_init_fn () e o gerador devem ser definidos no Dataloader para preservar a reprodutibilidade. Se eles não estão definidos, a regra será violada.
W5513 | FLOW-TENSOR MAIS MASCA | Máscara Falcor de Máscara (TensorFlow) : Se a função de log for usada no código, verifique se o valor do argumento é válido.
W5514 | Malta-máscara-pytorch | Máscara Falcor de Máscara (Pytorch) : Se a função de log for usada no código, verifique se o valor do argumento é válido.
W5515 | Tensor-Array-TensorFlow | Verificador de Array Tensor (TensorFlow) : use tf.TensorArray () para cultivar matriz no loop.
W5516 | Forward-Pytorch | Verificador Net Forward (pytorch) : é recomendável usar self.net () em vez de self.net.forward () no código pytorch. Se self.net.forward () for usado no código, a regra será violada.
W5517 | gradiente-clear-pytorch | Verificador claro de gradiente (pytorch) : o presso_fn.backward () e otimizer.Step () devem ser usados em conjunto com otimizer.Zero_Grad (). Se o .zero_grad() estiver ausente no código, a regra será violada.
W5518 | Pipeline-não-Scikitlearn | Verificador de pipeline (scikitlearn) : Todos os estimadores de scikit-learn devem ser usados dentro de pipelines, para evitar o vazamento de dados entre o treinamento e os dados do teste.
W5519 | limiar-scikitlearn dependente | Verificador de limite dependente (tensorflow) : Se a avaliação dependente do limiar (por exemplo, f-score) for usada no código, verifique se as métricas de avaliação de limiar-indenpendedores (por exemplo, AUC) também são usadas no código.
W5520 | fluxo de tensor-tensor de dependente | Verificador de limite dependente (pytorch) : Se a avaliação dependente do limiar (por exemplo, f-score) for usada no código, verifique se as métricas de avaliação de limiar-indenpendedores (por exemplo, AUC) também são usadas no código.
W5521 | Limite dependente-pytorch | Verificador de limite dependente (scikitlearn) : Se a avaliação dependente do limiar (por exemplo, f-score) for usada no código, verifique se as métricas de avaliação de limiar-indenpendedores (por exemplo, AUC) também são usadas no código.
O DSliner é desenvolvido por Mark Haakman e Haiyin Zhang durante nossas teses mestras no Grupo de Pesquisa em Engenharia de Software (SERG) no Laboratório de Pesquisa de Tu Delft e ING para Fintech, supervisionado por Luís Cruz e Arie Van Deursen.
Manter: Haiyin Zhang [[email protected]].