Hai! Kami saat ini meneliti bau kode dalam proyek pembelajaran mesin dalam konteks industri dan mencari umpan balik untuk
dslinter! Ini akan menjadi bantuan besar -besaran jika Anda dapat menjalankandslinterpada proyek pembelajaran mesin Anda dalam pengaturan industri dan mengirim file txt yang dihasilkan ke [email protected]. Langkah dan perintah dapat ditemukan di sini dan seharusnya tidak lebih dari 10 menit. Jangan ragu untuk mengirimi saya email jika Anda ingin melalui proses bersama. Prosesnya anonim dan kami akan menghapus informasi sensitif apa pun sebelum hasilnya diterbitkan. Terima kasih banyak!
dslinter adalah plugin Pylint untuk linting data sains dan kode pembelajaran mesin. Ini bertujuan untuk membantu pengembang memastikan kualitas kode pembelajaran mesin dan mendukung perpustakaan Python berikut: TensorFlow, Pytorch, Scikit-Learn, Panda, Numpy dan Scipy.
dslinter mengimplementasikan aturan deteksi untuk aroma yang diidentifikasi oleh pekerjaan kami sebelumnya. Bau dikumpulkan dari kertas, literatur abu -abu, komitmen GitHub, dan menumpuk pos yang meluap. Baunya juga diuraikan di situs web :)
Contoh proyek dalam video demo dapat ditemukan di sini.
Untuk menginstal dari indeks paket python:
pip install dslinter
pylint --load-plugins=dslinter <other_options> <path_to_sources>
Atau tempatkan file konfigurasi .pylintrc yang berisi pengaturan di atas di folder tempat Anda menjalankan perintah Anda, dan menjalankan:
pylint <path_to_sources>
[Untuk pengguna 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>
[Untuk pengguna 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>
Atau tempatkan file konfigurasi .pylintrc yang berisi pengaturan di atas di folder tempat Anda menjalankan perintah Anda, dan menjalankan:
pylint <path_to_sources>
Kontribusi dipersilakan! Jika Anda ingin berkontribusi, silakan lihat langkah -langkah berikut:
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter menggunakan poetry untuk mengelola dependensi, sehingga Anda harus menginstal poetry terlebih dahulu dan kemudian menginstal dependensi. pip install poetry
poetry install
dslinter dari sumber untuk tujuan pengembangan, instal dengan: poetry build
pip install ./dist/dslinter-version.tar.gz
poetry run pytest .
C5501 - C5506 | Impor | Pemeriksa Impor : Periksa apakah modul ilmu data diimpor menggunakan konvensi penamaan yang benar.
R5501 | Panda-panda yang tidak perlu | Pemeriksa Iterasi yang Tidak Perlu (PANDAS) : Solusi vektor lebih disukai daripada iterator untuk DataFrames. Jika iterasi digunakan saat ada API yang diveksiisasi dapat digunakan, aturan tersebut dilanggar.
W5501 | DataFrame-Neration-Modifikasi-Pandas | Pemeriksa Iterasi yang Tidak Perlu (PANDAS) : DataFrame di mana Iterasi Over tidak boleh dimodifikasi. Jika DataFrame dimodifikasi selama iterasi, aturan tersebut dilanggar.
R5502 | tidak perlu-tata-tensorflow | Pemeriksa iterasi yang tidak perlu (TensorFlow) : Jika ada operasi penugasan augment di loop, aturan tersebut dilanggar. Penugasan augment di loop dapat diganti dengan solusi vektor di API TensorFlow.
E5501 | nan-numpy | Nan Equality Checker (NUMPY) : Nilai tidak dapat dibandingkan dengan NP.nan, sebagai np.nan != np.nan .
W5502 | rantai-indeks-panda | Rantai Pengindeksan Checker (PANDAS) : Pengindeksan rantai dianggap sebagai praktik buruk dalam kode panda dan harus dihindari. Jika pengindeksan rantai digunakan pada dataframe PANDAS, aturan tersebut dilanggar.
R5503 | DataType-panda | DataType Checker (PANDAS) : DataType harus diatur ketika DataFrame diimpor dari data untuk memastikan format data diimpor seperti yang diharapkan. Jika data tidak diatur saat mengimpor, aturan tersebut dilanggar.
R5504 | Kolom-Seleksi-Panda | Pemeriksa Pilihan Kolom (PANDAS) : Kolom harus dipilih setelah DataFrame diimpor untuk menguraikan lebih baik apa yang diharapkan di hilir.
R5505 | gabungan-parameter-panda | Gabungan Parameter Pemeriksa (PANDAS) : Parameter 'bagaimana', 'pada' dan 'validasi' harus ditetapkan untuk operasi penggabungan untuk memastikan penggunaan penggabungan yang benar.
W5503 | inplace-panda | Inplace Checker (PANDAS) : Operasi pada DataFrames mengembalikan DataFrames baru, dan mereka harus ditetapkan ke variabel. Kalau tidak, hasilnya akan hilang, dan aturannya dilanggar. Operasi dari daftar putih dan dengan set parameter in_place dikecualikan.
W5504 | DataFrame-Conversion-Panda | DataFrame Conversion Checker (PANDAS) : Untuk konversi DataFrame dalam kode panda, gunakan .to_numpy () alih -alih .values. Jika .values digunakan dalam kode panda, aturan tersebut dilanggar.
W5505 | scaler-missing-scikitlearn | Scaler Missing Checker (Scikitlearn) : Periksa apakah scaler digunakan sebelum setiap operasi penskalaan-sensitif dalam kode scikit-learn. Operasi penskalaan-sensitif meliputi analisis komponen utama (PCA), mesin vektor dukungan (SVM), stochastic gradient descent (SGD), multi-layer perceptron classifier dan regularisasi L1 dan L2.
R5506 | hyperparameters-scitlearn | Pemeriksa Hyperparameter (Scikitlearn) : Untuk algoritma pembelajaran scikit-learn, beberapa hiperparameter penting harus ditetapkan.
R5507 | Hyperparameter-TensorFlow | Pemeriksa Hyperparameter (TensorFlow) : Untuk algoritma pembelajaran jaringan saraf, beberapa hiperparameter penting harus ditetapkan, seperti tingkat pembelajaran, ukuran batch, momentum dan pembusukan berat badan.
R5508 | hyperparameter-pytorch | Hyperparameter Checker (Pytorch) : Untuk algoritma pembelajaran jaringan saraf, beberapa hiperparameter penting harus ditetapkan, seperti tingkat pembelajaran, ukuran batch, momentum dan pembusukan berat badan.
W5506 | memori-pelepasan-tensorflow | Pemeriksa Rilis Memori (TensorFlow) : Jika jaringan saraf dibuat di loop, dan tidak ada operasi memori yang jelas digunakan, aturan tersebut dilanggar.
W5507 | deterministik-pytorch | Pemeriksa Penggunaan Algoritma Deterministik (Pytorch) : Jika algoritma use_deterministik tidak digunakan dalam program Pytorch, aturan tersebut dilanggar.
W5508 | acak-kontrol-numpy | Pemeriksa Kontrol keacakan (NUMPY) : NP.SEED () harus digunakan untuk menjaga reproduktifitas dalam program pembelajaran mesin.
W5509 | acak-kontrol-scikitlearn | Pemeriksa Kontrol keacakan (Scikitlearn) : Untuk hasil yang dapat direproduksi di seluruh eksekusi, hapus segala penggunaan random_state = tidak ada dalam estimator scikit-learn.
W5510 | Randomness-Control-TensorFlow | Pemeriksa Kontrol keacakan (TensorFlow) : TF.Random.set_seed () harus digunakan untuk menjaga reproduktifitas dalam program TensorFlow.
W5511 | acak-kontrol-pytorch | Pemeriksa Kontrol Pengacakan (Pytorch) : The Torch.Manual_seed () harus digunakan untuk menjaga reproduktifitas dalam program TensorFlow.
W5512 | acak-control-dataloader-pytorch | Pemeriksa Kontrol keacakan (Pytorch-Dataloader) : Pekerja_init_fn () dan generator harus diatur dalam Dataloader untuk mempertahankan reproduktifitas. Jika tidak ditetapkan, aturan tersebut dilanggar.
W5513 | hilang-mask-tensorflow | Topeng yang Hilang Pemeriksa (TensorFlow) : Jika fungsi log digunakan dalam kode, periksa apakah nilai argumen valid.
W5514 | Hilang-mask-pytorch | Mask Missing Checker (Pytorch) : Jika fungsi log digunakan dalam kode, periksa apakah nilai argumen valid.
W5515 | Tensor-array-tensorflow | Pemeriksa Tensor Array (TensorFlow) : Gunakan tf.tensorarray () untuk menumbuhkan array di loop.
W5516 | Forward-Pytorch | Net Forward Checker (Pytorch) : Disarankan untuk menggunakan self.net () daripada self.net.forward () dalam kode Pytorch. Jika self.net.forward () digunakan dalam kode, aturan tersebut dilanggar.
W5517 | gradient-clear-pytorch | Gradien clear checker (pytorch) : loss_fn.backward () dan optimizer.step () harus digunakan bersama dengan optimizer.zero_grad (). Jika .zero_grad() tidak ada dalam kode, aturan tersebut dilanggar.
W5518 | Pipeline-not-using-scikitlearn | Pemeriksa Pipeline (Scikitlearn) : Semua penaksir scikit-learn harus digunakan di dalam jaringan pipa, untuk mencegah kebocoran data antara pelatihan dan data uji.
W5519 | dependen-threshold-scikitlearn | Pemeriksa Threshold Dependent (TensorFlow) : Jika evaluasi yang bergantung pada ambang batas (misalnya, f-score) digunakan dalam kode, periksa apakah metrik evaluasi indenpendent (misalnya, AUC) juga digunakan dalam kode.
W5520 | Dependent-threshold-tensorflow | Dependent Threshold Checker (Pytorch) : Jika evaluasi yang bergantung pada ambang batas (misalnya, f-score) digunakan dalam kode, periksa apakah metrik evaluasi indenpendent (misalnya, AUC) juga digunakan dalam kode.
W5521 | Dependent-Threshold-Pytorch | Pemeriksa Threshold Dependent (Scikitlearn) : Jika evaluasi yang bergantung pada ambang batas (misalnya, f-score) digunakan dalam kode, periksa apakah metrik evaluasi indenpendent (misalnya, AUC) juga digunakan dalam kode.
Dslinter dikembangkan oleh Mark Haakman dan Haiyin Zhang selama tesis utama kami di Software Engineering Research Group (Serg) di Tu Delft dan AI untuk Lab FinTech Research, yang diawasi oleh Luz Cruz dan Arie van Deursen.
Pemelihara: Haiyin Zhang [[email protected]].