你好!我們目前正在研究行業環境中機器學習項目中的代碼氣味,並為
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]]。