こんにちは!現在、業界のコンテキストで機械学習プロジェクトのコードの匂いを調査し、
dslinterのフィードバックを探しています。業界の設定で機械学習プロジェクトでdslinterを実行し、生成されたTXTファイルを[email protected]に送信できる場合、大幅に支援されます。手順とコマンドはここで見つけることができ、10分以内にかかるはずです。一緒にプロセスを通過したい場合は、お気軽にメールを送ってください。このプロセスは匿名であり、結果が公開される前に機密情報を削除します。どうもありがとう!
dslinterは、データサイエンスと機械学習コードを並べるためのPylintプラグインです。開発者が機械学習コードの品質を確保し、次の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) :データフレームのイテレーターよりもベクトル化されたソリューションが推奨されます。ベクトル化されたAPIが使用されている間に反復が使用される場合、ルールに違反します。
W5501 | DataFrame-Iteration-Modification-Pandas |不必要なイテレーションチェッカー(PANDAS) :繰り返されるデータフレームは変更しないでください。反復中にデータフレームが変更された場合、ルールに違反します。
R5502 |不必要な文字 - テンソルフロー|不必要なイテレーションチェッカー(Tensorflow) :ループに割り当て操作が増加している場合、ルールは違反されます。ループでの拡張割り当ては、Tensorflow APIのベクトル化溶液に置き換えることができます。
E5501 | nan-umpy | Nan Equality Checker(numpy) : np.nan != np.nanとして、値をnp.nanと比較することはできません。
W5502 |チェーンインデックスパンダ|チェーンインデックスチェッカー(PANDAS) :チェーンインデックスは、Pandasコードでは悪い練習と見なされているため、避ける必要があります。パンダのデータフレームでチェーンインデックスが使用されている場合、ルールは違反されます。
R5503 |データタイプパンダ| DataType Checker(PANDAS) :データフレームがデータからインポートされている場合、データフレームが予想どおりにインポートされるようにデータフレームをインポートするときに設定する必要があります。インポート時にデータ型が設定されていない場合、ルールに違反します。
R5504 |列選択パンダ|列選択チェッカー(PANDAS) :データフレームがインポートされた後、列を選択する必要があります。
R5505 |マージパラメーターパンダ|マージパラメーターチェッカー(PANDAS) :パラメーター「How」、「ON」、および「VALIDATE」をマージ操作に設定して、マージの正しい使用法を確保する必要があります。
W5503 | InPlace-Pandas | Inplace Checker(Pandas) :データフレームの操作は、新しいデータフレームを返し、変数に割り当てる必要があります。それ以外の場合は、結果が失われ、規則に違反されます。ホワイトリストとin_placeパラメーターセットからの操作は除外されます。
W5504 | DataFrame-Conversion-Pandas | DataFrame Conversion Checker(Pandas) :Pandasコードでのデータフレーム変換の場合、.valuesの代わりに.to_numpy()を使用します。 .valuesがPandasコードで使用されている場合、ルールは違反されます。
W5505 |スケーラーミッシング-scikitlearn |スケーラーの欠落チェッカー(SCIKITLEARN) :SCIKIT-LEARNコードでスケーリングに敏感な操作の前にスカラーが使用されているかどうかを確認します。スケーリングに敏感な操作には、主成分分析(PCA)、サポートベクターマシン(SVM)、確率勾配降下(SGD)、多層パーセプトロン分類器、L1およびL2の正規化が含まれます。
R5506 | HyperParameters-ScikitLearn | HyperParameter Checker(SCIKITLEARN) :SCIKIT-LEARN学習アルゴリズムの場合、いくつかの重要なハイパーパラメーターを設定する必要があります。
R5507 | HyperParameter-Tensorflow | HyperParameter Checker(Tensorflow) :ニューラルネットワーク学習アルゴリズムの場合、学習率、バッチサイズ、運動量、体重減衰など、一部のインポラットハイパーパラメーターを設定する必要があります。
R5508 | HyperParameter-Pytorch | HyperParameter Checker(Pytorch) :ニューラルネットワーク学習アルゴリズムの場合、学習率、バッチサイズ、運動量、体重減衰など、一部のインポラットハイパーパラメーターを設定する必要があります。
W5506 |メモリリリーステンソルフロー|メモリリリースチェッカー(Tensorflow) :ループでニューラルネットワークが作成され、メモリクリア操作が使用されない場合、ルールに違反します。
W5507 |決定論的-Pytorch |決定論的アルゴリズムの使用チェッカー(Pytorch) :pytorchプログラムで使用されている場合、sure_deterministicアルゴリズムが使用されていない場合、ルールは違反されます。
W5508 |ランダムコントロール - マンピー|ランダムコントロールチェッカー(numpy) :np.seed()は、機械学習プログラムの再現性を維持するために使用する必要があります。
W5509 |ランダムコントロールScikitLearn |ランダムコントロールチェッカー(SCIKITLEARN) :実行全体で再現可能な結果については、SCIKIT-LEARN推定器でRANDOM_STATE =なしの使用を削除します。
W5510 |ランダム制御 - テンソルフロー|ランダム制御チェッカー(Tensorflow) :TF.Random.set_Seed()は、Tensorflowプログラムで再現性を維持するために使用する必要があります。
W5511 |ランダム性コントロール-Pytorch |ランダムコントロールチェッカー(Pytorch) :Torch.Manual_Seed()は、Tensorflowプログラムの再現性を維持するために使用する必要があります。
W5512 |ランダム性コントロールダタロダー-Pytorch |ランダム制御チェッカー(Pytorch-Dataloader) :worker_init_fn()とジェネレーターは、再現性を維持するためにDataloaderに設定する必要があります。それらが設定されていない場合、ルールは違反されます。
W5513 | Missing-Mask-Tensorflow |マスクの欠落チェッカー(Tensorflow) :コードでログ関数が使用されている場合は、引数値が有効かどうかを確認してください。
W5514 | Missing-Mask-Pytorch |マスク欠落チェッカー(Pytorch) :コードでログ関数が使用されている場合は、引数値が有効かどうかを確認してください。
W5515 |テンソルアレイ - テンソルフロー|テンソルアレイチェッカー(Tensorflow) :ループで成長する配列にtf.tensorarray()を使用します。
W5516 |フォワードパイトーチ|ネットフォワードチェッカー(Pytorch) :Pytorchコードでself.net.forward()ではなくself.net()を使用することをお勧めします。 self.net.forward()がコードで使用されている場合、ルールに違反されます。
W5517 |グラデーションクリアピートルチ| Gradient Clear Checker(Pytorch) :loss_fn.backward()およびoptimizer.step()は、optimizer.zero_grad()と一緒に使用する必要があります。 .zero_grad()がコードに欠落している場合、ルールは違反されます。
W5518 | Pipeline-not-used-scikitlearn |パイプラインチェッカー(SCIKITLEARN) :トレーニングとテストデータの間のデータの漏れを防ぐために、すべてのSCIKIT-LEARN推定器をパイプライン内で使用する必要があります。
W5519 |依存性科目scikitlearn |従属しきい値チェッカー(Tensorflow) :しきい値依存の評価(例、Fスコア)がコードで使用されている場合、コードではしきい値とdenpendentの評価(AUC)メトリックもコードで使用されているかどうかを確認してください。
W5520 |依存性授業テンソルフロー|従属しきい値チェッカー(Pytorch) :しきい値依存の評価(例、Fスコア)がコードで使用されている場合、コードではしきい値とdenpendentの評価(auc)メトリックもコードで使用されているかどうかを確認してください。
W5521 |依存する閾値-Pytorch |依存しきい値チェッカー(SCIKITLEARN) :しきい値依存の評価(例、Fスコア)がコードで使用されている場合、コードではしきい値とdenpendentの評価(たとえば、AUC)メトリックもコードで使用されているかどうかを確認してください。
DSLINTERは、LuísCruzとArie Van Deursenが監督したTu Delftのソフトウェアエンジニアリング研究グループ(SERG)とFintech Research LabのAIのマスターテーゼの際に、Mark HaakmanとHaiyin Zhangによって開発されました。
メンテナー:Haiyin Zhang [[email protected]]。