你好!我们目前正在研究行业环境中机器学习项目中的代码气味,并为
dslinter寻找反馈!如果您可以在行业环境中dslinter机器学习项目,并将生成的TXT文件发送到[email protected],那将是一个很大的帮助。步骤和命令可以在这里找到,并且不得超过10分钟。如果您想一起通过该过程,请随时给我发送电子邮件。该过程是匿名的,我们将在发布结果之前删除任何敏感信息。非常感谢!
dslinter是用于覆盖数据科学和机器学习代码的皮层插件。它旨在帮助开发人员确保机器学习代码质量并支持以下Python库:Tensorflow,Pytorch,Scikit-Learn,Pandas,Numpy和Scipy。
dslinter实现了我们以前的工作确定的气味的检测规则。这些气味是从论文,灰色文献,github提交和堆叠溢出柱中收集的。这些气味在网站上也被阐述了:)
演示视频中的示例项目可以在此处找到。
从Python软件包索引安装:
pip install dslinter
pylint --load-plugins=dslinter <other_options> <path_to_sources>
或放置一个.pylintrc配置文件,该文件包含以上设置在您运行命令的文件夹中,然后运行:
pylint <path_to_sources>
[对于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>
[适用于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>
或放置一个.pylintrc配置文件,该文件包含以上设置在您运行命令的文件夹中,然后运行:
pylint <path_to_sources>
欢迎捐款!如果您想贡献,请参阅以下步骤:
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter使用poetry来管理依赖关系,因此您需要先安装poetry ,然后安装依赖项。 pip install poetry
poetry install
dslinter ,请以以下方式安装它 poetry build
pip install ./dist/dslinter-version.tar.gz
poetry run pytest .
C5501 -C5506 |导入|进口检查器:检查数据科学模块是否使用正确的命名约定导入。
R5501 |不必要的术语 - pandas |不必要的迭代检查器(PANDAS) :矢量化解决方案比迭代器更优于用于数据范围的迭代器。如果可以使用矢量化API时使用迭代,则违反了该规则。
W5501 | dataFrame-tiretration-modification-pandas |不必要的迭代检查器(PANDAS) :不应修改迭代的数据框架。如果在迭代期间修改了数据框,则违反了规则。
R5502 |不必要的透度tensorflow |不必要的迭代检查器(TensorFlow) :如果循环中有任何增强作业操作,则违反了规则。循环中的增强分配可以用Tensorflow API中的矢量化解决方案代替。
E5501 | Nan-Numpy | NAN平等检查器(numpy) :无法将值与np.nan != np.nan进行比较。
W5502 |链索引pandas |链索引检查器(PANDAS) :链索引在Pandas代码中被认为是不良练习,应避免。如果在熊猫数据框架上使用链索引,则违反了该规则。
R5503 | datatype-pandas |数据类型检查器(PANDAS) :从数据导入数据框时,应设置数据类型,以确保按预期导入数据格式。如果导入时未设置数据类型,则违反了规则。
R5504 |列选择pandas |列选择检查器(PANDAS) :在导入数据框后应选择列,以更好地详细说明下游的预期。
R5505 |合并参数 - 潘达斯|合并参数检查器(PANDAS) :应为合并操作设置参数''',''和``validate''的参数,以确保正确使用合并。
W5503 | Inplace-Pandas | Inplace Checker(PANDAS) :数据范围内的操作返回新的DataFrames,应将其分配给变量。否则,结果将丢失,并违反规则。排除了白名单和in_place参数集的操作。
W5504 | dataFrame-conversion-pandas | DataFrame转换检查器(PANDAS) :对于PANDAS代码中的DataFrame转换,请使用.to_numpy()而不是.values。如果在熊猫代码中使用。值,则该规则将被违反。
W5505 | Scaleer-Missing-Scikitlearn | Scaleer缺少Checker(ScikitLearn) :检查在Scikit-Learn代码中的每个缩放敏感操作之前是否使用缩放器。比例敏感的操作包括主成分分析(PCA),支持向量机(SVM),随机梯度下降(SGD),多层感知器分类器以及L1和L2正则化。
R5506 | Hyperparameters-Scikitlearn |高参数检查器(Scikitlearn) :对于Scikit-Learn学习算法,应设置一些重要的超参数。
R5507 |高参数量表|高参数检查器(TensorFlow) :对于神经网络学习算法,应设置一些Imporatnt Hyperparameter,例如学习率,批处理大小,动量和重量衰减。
R5508 |超参数 - 托尔奇|高参数检查器(Pytorch) :对于神经网络学习算法,应设置一些Imporatnt Hyperparameter,例如学习率,批处理大小,动量和权重衰减。
W5506 |内存释放量 - 敏感性|内存释放检查器(TensorFlow) :如果在循环中创建神经网络,并且不使用内存清除操作,则该规则将被违反。
W5507 |确定性pytorch |确定性算法使用检查器(Pytorch) :如果在Pytorch程序中未使用USE_Deterministic算法,则该规则将被违反。
W5508 |随机性控制numpy |随机性控制检查器(NUMPY) :应使用NP.Seed()在机器学习程序中保留可重复性。
W5509 |随机性控制 - scikitlearn |随机性控制检查器(scikitlearn) :对于在执行过程中可复制的结果,请删除scikit-learn估计器中的随机= none的任何使用。
W5510 |随机度控制量|随机性控制检查器(TensorFlow) :应使用tf.random.set_seed()在张量集程序中保留可重复性。
W5511 |随机度控制 - pytorch |随机性控制检查器(PYTORCH) :应使用Torch.Manual_seed()在张紧程序中保留可重复性。
W5512 |随机度控制 - dataloader-pytorch |随机性控制检查器(Pytorch-dataloader) :应将Worker_init_fn()和生成器设置为数据载加载器,以保持可重复性。如果未设定,则违反了规则。
W5513 |缺少蒙版tensorflow |蒙版缺少检查器(TensorFlow) :如果代码中使用了日志函数,请检查参数值是否有效。
W5514 |缺少面罩 - pytorch |蒙版缺少检查器(Pytorch) :如果代码中使用了日志函数,请检查参数值是否有效。
W5515 | Tensor-array-TensorFlow |张量阵列检查器(TensorFlow) :使用tf.tensorarray()在循环中生长阵列。
W5516 |向前pytorch |净向前检查器(Pytorch) :建议在Pytorch代码中使用self.net()而不是self.net.forward()。如果代码中使用了self.net.forward(),则违反了规则。
W5517 |梯度清除pytorch |梯度清除检查器(pytorch) :loss_fn.backward()和Optimizer.step()应与imptionizer.zero_grad()一起使用。如果代码中缺少.zero_grad() ,则该规则将被违反。
W5518 |管道不使用的scikitlearn |管道检查器(ScikitLearn) :应在管道内使用所有Scikit-Learn估计器,以防止训练和测试数据之间的数据泄漏。
W5519 |依赖 - 阈值 - scikitlearn |依赖性阈值检查器(TensorFlow) :如果代码中使用阈值依赖性评估(例如,F-SCORE),请检查代码中是否还使用了阈值 - indenpentent评估(例如,AUC)指标。
W5520 |依赖 - 阈值tensorflow |依赖性阈值检查器(PYTORCH) :如果代码中使用了阈值依赖性评估(例如,f-Score),请检查代码中是否还使用了阈值 - indenpentent评估(例如,AUC)指标。
W5521 |依赖 - 阈值|依赖性阈值检查器(SCIKITLEARN) :如果在代码中使用阈值依赖性评估(例如,F-SCORE),请检查代码中是否还使用了阈值 - indenpentent评估(例如AUC)指标。
DSLINTER是由Mark Haakman和Haiyin Zhang在我们在Tu Delft的软件工程研究小组(SERG)和Fintech Research Lab的AI AI的硕士论文中开发的,该实验室由LuísCruz和Arie van Deursen监督。
维护者:haiyin Zhang [[email protected]]。