julearn 0.3.2.dev57__tar.gz → 0.3.2.dev61__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/PKG-INFO +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/_version.py +2 -2
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/api.py +19 -6
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/base/estimators.py +26 -8
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/base/tests/test_base_estimators.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/_cv.py +16 -10
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/_preprocess.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/tests/test_cv.py +4 -2
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/tests/test_inspector.py +12 -9
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/tests/test_pipeline.py +27 -14
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/tests/test_preprocess.py +8 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/available_searchers.py +3 -3
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/stratified_bootstrap.py +7 -5
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/models/dynamic.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/models/tests/test_models.py +6 -6
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/pipeline_creator.py +26 -17
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/target_pipeline.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/tests/test_merger.py +16 -13
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/tests/test_pipeline_creator.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/prepare.py +2 -4
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/scoring/available_scorers.py +12 -6
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/stats/corrected_ttest.py +8 -4
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/stats/tests/test_corrected_ttest.py +22 -5
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/tests/test_api.py +103 -45
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/confound_remover.py +2 -2
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/tests/test_drop_columns.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/tests/test_filter_columns.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/tests/test_set_column_types.py +10 -6
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/ju_column_transformer.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/ju_transformed_target_model.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/target_confound_remover.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/tests/test_ju_transformed_target_model.py +3 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/tests/test_cbpm.py +3 -3
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/tests/test_confounds.py +17 -6
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/tests/test_jucolumntransformers.py +8 -6
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/checks.py +3 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/logging.py +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/testing.py +21 -11
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/typing.py +39 -19
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/viz/_scores.py +5 -4
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn.egg-info/PKG-INFO +1 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/pyproject.toml +15 -1
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/ISSUE_TEMPLATE/documentation_request.yaml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/check-stale.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/ci-docs.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/ci.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/docs-preview.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/docs.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/lint.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.github/workflows/pypi.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.gitignore +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/.pre-commit-config.yaml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/AUTHORS.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/LICENSE.md +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/README.md +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/codecov.yml +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/Makefile +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/_static/css/custom.css +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/_static/js/custom.js +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/_templates/class.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/_templates/function.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/_templates/function_warning.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/_templates/versions.html +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/base.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/index.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/inspect.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/main.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/model_selection.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/models.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/pipeline.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/prepare.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/scoring.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/stats.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/transformers.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/utils.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/api/viz.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/available_pipeline_steps.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/contributors.inc +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/.gitignore +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/224.misc +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/244.misc +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/249.bugfix +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/251.misc +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/255.bugfix +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/260.enh +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/changes/newsfragments/260.misc +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/conf.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/configuration.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/contributing.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/examples.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/faq.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/getting_started.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/corrected_ttest.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/final_estimator.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/iris_X.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/iris_df.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/iris_y.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_calm.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_confbias.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_cv.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_generalization.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_it.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_ml.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/julearn_logo_mlit.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/multiple_scorers_run_cv.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/plot_scores.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/scores_run_cv.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/scores_run_cv_splitter.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/images/scores_run_cv_train.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/index.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/links.inc +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/maintaining.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/redirect.html +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/CBPM.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/confound_removal.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/cross_validation_splitter.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/hyperparameter_tuning.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/index.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/model_inspect.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/stacked_models.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/selected_deeper_topics/target_transformers.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/sphinxext/gh_substitutions.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/what_really_need_know/cross_validation.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/what_really_need_know/data.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/what_really_need_know/index.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/what_really_need_know/model_comparison.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/what_really_need_know/model_evaluation.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/what_really_need_know/pipeline.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/docs/whats_new.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/plot_cm_acc_multiclass.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/plot_example_regression.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/plot_stratified_kfold_reg.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/run_combine_pandas.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/run_grouped_cv.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/00_starting/run_simple_binary_classification.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/01_model_comparison/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/01_model_comparison/plot_simple_model_comparison.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/02_inspection/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/02_inspection/plot_groupcv_inspect_svm.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/02_inspection/plot_inspect_random_forest.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/02_inspection/plot_preprocess.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/02_inspection/run_binary_inspect_folds.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/run_apply_to_target.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/run_example_pca_featsets.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/run_hyperparameter_multiple_grids.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/run_hyperparameter_tuning.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/run_hyperparameter_tuning_bayessearch.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/03_complex_models/run_stacked_models.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/04_confounds/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/04_confounds/plot_confound_removal_classification.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/04_confounds/run_return_confounds.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/05_customization/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/05_customization/run_custom_scorers_regression.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_cbpm_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_confound_removal_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_cv_splitters_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_data_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_hyperparameters_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_model_comparison_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_model_evaluation_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_model_inspection_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_pipeline_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_stacked_models_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/99_docs/run_target_transformer_docs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/README.rst +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/XX_disabled/dis_run_n_jobs.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/examples/XX_disabled/dis_run_target_confound_removal.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/ignore_words.txt +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/base/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/base/column_types.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/base/tests/test_column_types.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/config.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/conftest.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/_pipeline.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/inspect/inspector.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/_skopt_searcher.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/continuous_stratified_kfold.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/tests/test_available_searchers.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/tests/test_continous_stratified_kfold.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/model_selection/tests/test_stratified_bootstrap.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/models/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/models/available_models.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/models/tests/test_available_models.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/models/tests/test_dynamic.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/merger.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/target_pipeline_creator.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/tests/test_target_pipeline.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/pipeline/tests/test_target_pipeline_creator.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/scoring/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/scoring/metrics.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/scoring/tests/test_available_scorers.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/scoring/tests/test_metrics.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/stats/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/tests/test_config.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/tests/test_prepare.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/available_transformers.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/cbpm.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/change_column_types.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/drop_columns.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/filter_columns.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/set_column_types.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/dataframe/tests/test_change_column_types.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/available_target_transformers.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/ju_target_transformer.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/tests/test_available_target_transformers.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/tests/test_ju_target_transformer.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/target/tests/test_target_confound_remover.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/transformers/tests/test_available_transformers.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/_cv.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/tests/test_logging.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/tests/test_version.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/utils/versions.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/viz/__init__.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn/viz/res/julearn_logo_generalization.png +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn.egg-info/SOURCES.txt +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn.egg-info/dependency_links.txt +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn.egg-info/requires.txt +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/julearn.egg-info/top_level.txt +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/setup.cfg +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/setup.py +0 -0
- {julearn-0.3.2.dev57 → julearn-0.3.2.dev61}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: julearn
|
|
3
|
-
Version: 0.3.2.
|
|
3
|
+
Version: 0.3.2.dev61
|
|
4
4
|
Summary: Juelich Machine Learning Library
|
|
5
5
|
Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
6
6
|
Maintainer-email: Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '0.3.2.
|
|
16
|
-
__version_tuple__ = version_tuple = (0, 3, 2, '
|
|
15
|
+
__version__ = version = '0.3.2.dev61'
|
|
16
|
+
__version_tuple__ = version_tuple = (0, 3, 2, 'dev61')
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
# Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
5
5
|
# License: AGPL
|
|
6
6
|
|
|
7
|
-
from typing import Dict,
|
|
7
|
+
from typing import Dict, List, Optional, Union
|
|
8
8
|
|
|
9
9
|
import numpy as np
|
|
10
10
|
import pandas as pd
|
|
11
|
+
import sklearn
|
|
11
12
|
from sklearn.base import BaseEstimator
|
|
12
13
|
from sklearn.model_selection import (
|
|
13
|
-
BaseCrossValidator,
|
|
14
14
|
check_cv,
|
|
15
15
|
cross_validate,
|
|
16
16
|
)
|
|
@@ -23,6 +23,7 @@ from .pipeline.merger import merge_pipelines
|
|
|
23
23
|
from .prepare import check_consistency, prepare_input_data
|
|
24
24
|
from .scoring import check_scoring
|
|
25
25
|
from .utils import _compute_cvmdsum, logger, raise_error
|
|
26
|
+
from .utils.typing import CVLike
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
def run_cross_validation( # noqa: C901
|
|
@@ -36,7 +37,7 @@ def run_cross_validation( # noqa: C901
|
|
|
36
37
|
return_estimator: Optional[str] = None,
|
|
37
38
|
return_inspector: bool = False,
|
|
38
39
|
return_train_score: bool = False,
|
|
39
|
-
cv: Optional[
|
|
40
|
+
cv: Optional[CVLike] = None,
|
|
40
41
|
groups: Optional[str] = None,
|
|
41
42
|
scoring: Union[str, List[str], None] = None,
|
|
42
43
|
pos_labels: Union[str, List[str], None] = None,
|
|
@@ -357,20 +358,32 @@ def run_cross_validation( # noqa: C901
|
|
|
357
358
|
|
|
358
359
|
# Prepare cross validation
|
|
359
360
|
cv_outer = check_cv(
|
|
360
|
-
cv,
|
|
361
|
+
cv, # type: ignore
|
|
362
|
+
classifier=problem_type == "classification",
|
|
361
363
|
)
|
|
362
364
|
logger.info(f"Using outer CV scheme {cv_outer}")
|
|
363
365
|
|
|
364
366
|
check_consistency(df_y, cv, groups, problem_type) # type: ignore
|
|
365
367
|
|
|
366
368
|
cv_return_estimator = return_estimator in ["cv", "all"]
|
|
367
|
-
scoring = check_scoring(
|
|
369
|
+
scoring = check_scoring(
|
|
370
|
+
pipeline, # type: ignore
|
|
371
|
+
scoring,
|
|
372
|
+
wrap_score=wrap_score,
|
|
373
|
+
)
|
|
368
374
|
|
|
369
375
|
cv_mdsum = _compute_cvmdsum(cv_outer)
|
|
370
376
|
fit_params = {}
|
|
371
377
|
if df_groups is not None:
|
|
372
378
|
if isinstance(pipeline, BaseSearchCV):
|
|
373
379
|
fit_params["groups"] = df_groups.values
|
|
380
|
+
|
|
381
|
+
_sklearn_deprec_fit_params = {}
|
|
382
|
+
if sklearn.__version__ >= "1.4.0":
|
|
383
|
+
_sklearn_deprec_fit_params["params"] = fit_params
|
|
384
|
+
else:
|
|
385
|
+
_sklearn_deprec_fit_params["fit_params"] = fit_params
|
|
386
|
+
|
|
374
387
|
scores = cross_validate(
|
|
375
388
|
pipeline,
|
|
376
389
|
df_X,
|
|
@@ -382,7 +395,7 @@ def run_cross_validation( # noqa: C901
|
|
|
382
395
|
n_jobs=n_jobs,
|
|
383
396
|
return_train_score=return_train_score,
|
|
384
397
|
verbose=verbose, # type: ignore
|
|
385
|
-
|
|
398
|
+
**_sklearn_deprec_fit_params,
|
|
386
399
|
)
|
|
387
400
|
|
|
388
401
|
n_repeats = getattr(cv_outer, "n_repeats", 1)
|
|
@@ -13,11 +13,11 @@ from sklearn.utils.metaestimators import available_if
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
try: # sklearn < 1.4.0
|
|
16
|
-
from sklearn.utils.validation import _check_fit_params
|
|
16
|
+
from sklearn.utils.validation import _check_fit_params # type: ignore
|
|
17
17
|
|
|
18
18
|
fit_params_checker = _check_fit_params
|
|
19
19
|
except ImportError: # sklearn >= 1.4.0
|
|
20
|
-
from sklearn.utils.validation import _check_method_params
|
|
20
|
+
from sklearn.utils.validation import _check_method_params # type: ignore
|
|
21
21
|
|
|
22
22
|
fit_params_checker = _check_method_params
|
|
23
23
|
|
|
@@ -180,7 +180,12 @@ class JuTransformer(JuBaseEstimator, TransformerMixin):
|
|
|
180
180
|
self.row_select_col_type = row_select_col_type
|
|
181
181
|
self.row_select_vals = row_select_vals
|
|
182
182
|
|
|
183
|
-
def fit(
|
|
183
|
+
def fit(
|
|
184
|
+
self,
|
|
185
|
+
X: pd.DataFrame, # noqa: N803
|
|
186
|
+
y: Optional[pd.Series] = None,
|
|
187
|
+
**fit_params,
|
|
188
|
+
):
|
|
184
189
|
"""Fit the model.
|
|
185
190
|
|
|
186
191
|
This method will fit the model using only the columns selected by
|
|
@@ -217,8 +222,21 @@ class JuTransformer(JuBaseEstimator, TransformerMixin):
|
|
|
217
222
|
self.row_select_vals = [self.row_select_vals]
|
|
218
223
|
return self._fit(**self._select_rows(X, y, **fit_params))
|
|
219
224
|
|
|
225
|
+
def _fit(
|
|
226
|
+
self,
|
|
227
|
+
X: pd.DataFrame, # noqa: N803,
|
|
228
|
+
y: Optional[pd.Series],
|
|
229
|
+
**kwargs,
|
|
230
|
+
) -> None:
|
|
231
|
+
raise_error(
|
|
232
|
+
"This method should be implemented in the concrete class",
|
|
233
|
+
klass=NotImplementedError,
|
|
234
|
+
)
|
|
235
|
+
|
|
220
236
|
def _add_backed_filtered(
|
|
221
|
-
self,
|
|
237
|
+
self,
|
|
238
|
+
X: pd.DataFrame, # noqa: N803
|
|
239
|
+
X_trans: pd.DataFrame, # noqa: N803
|
|
222
240
|
) -> pd.DataFrame:
|
|
223
241
|
"""Add the left-out columns back to the transformed data.
|
|
224
242
|
|
|
@@ -301,7 +319,7 @@ class WrapModel(JuBaseEstimator):
|
|
|
301
319
|
|
|
302
320
|
def fit(
|
|
303
321
|
self,
|
|
304
|
-
X:
|
|
322
|
+
X: DataLike, # noqa: N803
|
|
305
323
|
y: Optional[DataLike] = None,
|
|
306
324
|
**fit_params: Any,
|
|
307
325
|
) -> "WrapModel":
|
|
@@ -312,7 +330,7 @@ class WrapModel(JuBaseEstimator):
|
|
|
312
330
|
|
|
313
331
|
Parameters
|
|
314
332
|
----------
|
|
315
|
-
X :
|
|
333
|
+
X : DataLike
|
|
316
334
|
The data to fit the model on.
|
|
317
335
|
y : DataLike, optional
|
|
318
336
|
The target data (default is None).
|
|
@@ -329,9 +347,9 @@ class WrapModel(JuBaseEstimator):
|
|
|
329
347
|
if self.needed_types is not None:
|
|
330
348
|
self.needed_types = ensure_column_types(self.needed_types)
|
|
331
349
|
|
|
332
|
-
Xt = self.filter_columns(X)
|
|
350
|
+
Xt = self.filter_columns(X) # type: ignore
|
|
333
351
|
self.model_ = self.model
|
|
334
|
-
self.model_.fit(Xt, y, **fit_params)
|
|
352
|
+
self.model_.fit(Xt, y, **fit_params) # type: ignore
|
|
335
353
|
return self
|
|
336
354
|
|
|
337
355
|
def predict(self, X: pd.DataFrame) -> DataLike: # noqa: N803
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
# Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
5
5
|
# License: AGPL
|
|
6
6
|
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import Optional, Union
|
|
8
8
|
|
|
9
9
|
import pandas as pd
|
|
10
10
|
from sklearn.model_selection import BaseCrossValidator, check_cv
|
|
11
11
|
from sklearn.utils.metaestimators import available_if
|
|
12
12
|
|
|
13
13
|
from ..utils import _compute_cvmdsum, is_nonoverlapping_cv, raise_error
|
|
14
|
+
from ..utils.typing import DataLike
|
|
14
15
|
from ._pipeline import PipelineInspector
|
|
15
16
|
|
|
16
17
|
|
|
@@ -60,14 +61,13 @@ class FoldsInspector:
|
|
|
60
61
|
def __init__(
|
|
61
62
|
self,
|
|
62
63
|
scores: pd.DataFrame,
|
|
63
|
-
cv: BaseCrossValidator,
|
|
64
|
-
X:
|
|
65
|
-
y:
|
|
64
|
+
cv: Union[BaseCrossValidator, int],
|
|
65
|
+
X: DataLike, # noqa: N803
|
|
66
|
+
y: pd.Series,
|
|
66
67
|
func: str = "predict",
|
|
67
|
-
groups: Optional[
|
|
68
|
+
groups: Optional[pd.Series] = None,
|
|
68
69
|
):
|
|
69
70
|
self._scores = scores
|
|
70
|
-
self._cv = cv
|
|
71
71
|
self._X = X
|
|
72
72
|
self._y = y
|
|
73
73
|
self._func = func
|
|
@@ -92,7 +92,7 @@ class FoldsInspector:
|
|
|
92
92
|
)
|
|
93
93
|
|
|
94
94
|
cv = check_cv(cv)
|
|
95
|
-
|
|
95
|
+
self._cv = cv
|
|
96
96
|
t_cv_mdsum = _compute_cvmdsum(cv)
|
|
97
97
|
if t_cv_mdsum != cv_mdsums[0]:
|
|
98
98
|
raise_error(
|
|
@@ -120,10 +120,16 @@ class FoldsInspector:
|
|
|
120
120
|
|
|
121
121
|
predictions = []
|
|
122
122
|
for i_fold, (_, test) in enumerate(
|
|
123
|
-
self._cv.split(
|
|
123
|
+
self._cv.split(
|
|
124
|
+
self._X, # type: ignore
|
|
125
|
+
self._y,
|
|
126
|
+
groups=self._groups,
|
|
127
|
+
)
|
|
124
128
|
):
|
|
125
129
|
t_model = self._scores["estimator"][i_fold]
|
|
126
|
-
t_values = getattr(t_model, func)(
|
|
130
|
+
t_values = getattr(t_model, func)(
|
|
131
|
+
self._X.iloc[test] # type: ignore
|
|
132
|
+
)
|
|
127
133
|
if t_values.ndim == 1:
|
|
128
134
|
t_values = t_values[:, None]
|
|
129
135
|
column_names = [f"p{i}" for i in range(t_values.shape[1])]
|
|
@@ -152,7 +158,7 @@ class FoldsInspector:
|
|
|
152
158
|
t_df.columns = [f"fold{i_fold}_{x}" for x in t_df.columns]
|
|
153
159
|
predictions = pd.concat(predictions, axis=1)
|
|
154
160
|
predictions = predictions.sort_index()
|
|
155
|
-
predictions["target"] = self._y.values
|
|
161
|
+
predictions["target"] = self._y.values # type: ignore
|
|
156
162
|
return predictions
|
|
157
163
|
|
|
158
164
|
def __getitem__(self, key):
|
|
@@ -53,7 +53,7 @@ def preprocess(
|
|
|
53
53
|
else:
|
|
54
54
|
raise_error(f"No step named {until} found.")
|
|
55
55
|
df_out = pipeline[:i].transform(_X)
|
|
56
|
-
|
|
56
|
+
df_out = df_out.copy()
|
|
57
57
|
if not isinstance(df_out, pd.DataFrame) and with_column_types is False:
|
|
58
58
|
raise_error(
|
|
59
59
|
"The output of the pipeline is not a DataFrame. Cannot remove "
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
# Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
|
|
4
4
|
# Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
5
5
|
# License: AGPL
|
|
6
|
-
|
|
7
6
|
import numpy as np
|
|
8
7
|
import pandas as pd
|
|
9
8
|
import pytest
|
|
@@ -70,7 +69,10 @@ def scores(df_typed_iris, n_iters=5, mock_model=None):
|
|
|
70
69
|
if mock_model is None:
|
|
71
70
|
mock_model = MockModelReturnsIndex
|
|
72
71
|
|
|
73
|
-
estimators = [
|
|
72
|
+
estimators = [
|
|
73
|
+
WrapModel(mock_model()).fit(X, y) # type: ignore
|
|
74
|
+
for _ in range(n_iters)
|
|
75
|
+
]
|
|
74
76
|
|
|
75
77
|
return pd.DataFrame(
|
|
76
78
|
{
|
|
@@ -18,28 +18,28 @@ if TYPE_CHECKING:
|
|
|
18
18
|
|
|
19
19
|
def test_no_cv() -> None:
|
|
20
20
|
"""Test inspector with no cross-validation."""
|
|
21
|
-
inspector = Inspector({})
|
|
21
|
+
inspector = Inspector({}) # type: ignore
|
|
22
22
|
with pytest.raises(ValueError, match="No cv"):
|
|
23
23
|
_ = inspector.folds
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def test_no_X() -> None:
|
|
27
27
|
"""Test inspector with no features."""
|
|
28
|
-
inspector = Inspector({}, cv=5)
|
|
28
|
+
inspector = Inspector({}, cv=5) # type: ignore
|
|
29
29
|
with pytest.raises(ValueError, match="No X"):
|
|
30
30
|
_ = inspector.folds
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
def test_no_y() -> None:
|
|
34
34
|
"""Test inspector with no targets."""
|
|
35
|
-
inspector = Inspector({}, cv=5, X=[1, 2, 3])
|
|
35
|
+
inspector = Inspector({}, cv=5, X=[1, 2, 3]) # type: ignore
|
|
36
36
|
with pytest.raises(ValueError, match="No y"):
|
|
37
37
|
_ = inspector.folds
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def test_no_model() -> None:
|
|
41
41
|
"""Test inspector with no model."""
|
|
42
|
-
inspector = Inspector({})
|
|
42
|
+
inspector = Inspector({}) # type: ignore
|
|
43
43
|
with pytest.raises(ValueError, match="No model"):
|
|
44
44
|
_ = inspector.model
|
|
45
45
|
|
|
@@ -63,8 +63,11 @@ def test_normal_usage(df_iris: "pd.DataFrame") -> None:
|
|
|
63
63
|
return_inspector=True,
|
|
64
64
|
problem_type="classification",
|
|
65
65
|
)
|
|
66
|
-
assert pipe == inspect.model._model
|
|
67
|
-
for (_, score), inspect_fold in zip(
|
|
66
|
+
assert pipe == inspect.model._model # type: ignore
|
|
67
|
+
for (_, score), inspect_fold in zip(
|
|
68
|
+
scores.iterrows(), # type: ignore
|
|
69
|
+
inspect.folds, # type: ignore
|
|
70
|
+
):
|
|
68
71
|
assert score["estimator"] == inspect_fold.model._model
|
|
69
72
|
|
|
70
73
|
|
|
@@ -88,6 +91,6 @@ def test_normal_usage_with_search(df_iris: "pd.DataFrame") -> None:
|
|
|
88
91
|
return_estimator="all",
|
|
89
92
|
return_inspector=True,
|
|
90
93
|
)
|
|
91
|
-
assert pipe == inspect.model._model
|
|
92
|
-
inspect.model.get_fitted_params()
|
|
93
|
-
inspect.model.get_params()
|
|
94
|
+
assert pipe == inspect.model._model # type: ignore
|
|
95
|
+
inspect.model.get_fitted_params() # type: ignore
|
|
96
|
+
inspect.model.get_params() # type: ignore
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
# Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
5
5
|
# License: AGPL
|
|
6
6
|
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import Any, Dict, List, Optional, Type
|
|
8
8
|
|
|
9
|
+
import pandas as pd
|
|
9
10
|
import pytest
|
|
10
11
|
from sklearn.base import BaseEstimator
|
|
11
12
|
from sklearn.decomposition import PCA
|
|
@@ -17,10 +18,6 @@ from julearn.pipeline import PipelineCreator
|
|
|
17
18
|
from julearn.transformers import JuColumnTransformer
|
|
18
19
|
|
|
19
20
|
|
|
20
|
-
if TYPE_CHECKING:
|
|
21
|
-
import pandas as pd
|
|
22
|
-
|
|
23
|
-
|
|
24
21
|
class MockTestEst(BaseEstimator):
|
|
25
22
|
"""Class for estimator tests.
|
|
26
23
|
|
|
@@ -39,8 +36,8 @@ class MockTestEst(BaseEstimator):
|
|
|
39
36
|
|
|
40
37
|
def fit(
|
|
41
38
|
self,
|
|
42
|
-
X:
|
|
43
|
-
y: Optional[
|
|
39
|
+
X: pd.DataFrame, # noqa: N803
|
|
40
|
+
y: Optional[pd.Series] = None,
|
|
44
41
|
**fit_params: Any,
|
|
45
42
|
) -> "MockTestEst":
|
|
46
43
|
"""Fit the estimator.
|
|
@@ -64,7 +61,7 @@ class MockTestEst(BaseEstimator):
|
|
|
64
61
|
self.param_1_ = 1
|
|
65
62
|
return self
|
|
66
63
|
|
|
67
|
-
def transform(self, X:
|
|
64
|
+
def transform(self, X: pd.DataFrame) -> pd.DataFrame: # noqa: N803
|
|
68
65
|
"""Transform the estimator.
|
|
69
66
|
|
|
70
67
|
Parameters
|
|
@@ -90,7 +87,7 @@ class MockTestEst(BaseEstimator):
|
|
|
90
87
|
["zscore", "pca", "svm"],
|
|
91
88
|
],
|
|
92
89
|
)
|
|
93
|
-
def test_get_stepnames(steps: List[str], df_iris:
|
|
90
|
+
def test_get_stepnames(steps: List[str], df_iris: pd.DataFrame) -> None:
|
|
94
91
|
"""Test step names fetch.
|
|
95
92
|
|
|
96
93
|
Parameters
|
|
@@ -157,7 +154,11 @@ def test_steps(
|
|
|
157
154
|
[
|
|
158
155
|
[MockTestEst(), {"param_0_": 0, "param_1_": 1}],
|
|
159
156
|
[
|
|
160
|
-
JuColumnTransformer(
|
|
157
|
+
JuColumnTransformer(
|
|
158
|
+
"test",
|
|
159
|
+
MockTestEst(), # type: ignore
|
|
160
|
+
"continuous",
|
|
161
|
+
),
|
|
161
162
|
{"param_0_": 0, "param_1_": 1},
|
|
162
163
|
],
|
|
163
164
|
],
|
|
@@ -201,8 +202,14 @@ def test_inspect_pipeline(df_iris: "pd.DataFrame") -> None:
|
|
|
201
202
|
|
|
202
203
|
pipe = (
|
|
203
204
|
PipelineCreator(problem_type="classification")
|
|
204
|
-
.add(
|
|
205
|
-
|
|
205
|
+
.add(
|
|
206
|
+
JuColumnTransformer(
|
|
207
|
+
"test",
|
|
208
|
+
MockTestEst(), # type: ignore
|
|
209
|
+
"continuous",
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
.add(SVC()) # type: ignore TODO: fix typing hints
|
|
206
213
|
.to_pipeline()
|
|
207
214
|
)
|
|
208
215
|
pipe.fit(df_iris.iloc[:, :-1], df_iris.species)
|
|
@@ -230,8 +237,14 @@ def test_get_estimator(df_iris: "pd.DataFrame") -> None:
|
|
|
230
237
|
"""
|
|
231
238
|
pipe = (
|
|
232
239
|
PipelineCreator(problem_type="classification")
|
|
233
|
-
.add(
|
|
234
|
-
|
|
240
|
+
.add(
|
|
241
|
+
JuColumnTransformer(
|
|
242
|
+
"test",
|
|
243
|
+
MockTestEst(), # type: ignore
|
|
244
|
+
"continuous",
|
|
245
|
+
)
|
|
246
|
+
)
|
|
247
|
+
.add(SVC()) # type: ignore TODO: fix typing hints
|
|
235
248
|
.to_pipeline()
|
|
236
249
|
)
|
|
237
250
|
pipe.fit(df_iris.iloc[:, :-1], df_iris.species)
|
|
@@ -157,13 +157,20 @@ def test_preprocess_with_column_types(df_iris: pd.DataFrame) -> None:
|
|
|
157
157
|
|
|
158
158
|
X = list(df_iris.iloc[:, :-1].columns)
|
|
159
159
|
y = "species"
|
|
160
|
+
X_types = {"continuous": X}
|
|
160
161
|
_, model = run_cross_validation(
|
|
161
162
|
X=X,
|
|
162
163
|
y=y,
|
|
163
164
|
data=df_iris,
|
|
165
|
+
X_types=X_types,
|
|
164
166
|
problem_type="classification",
|
|
165
167
|
model="rf",
|
|
166
168
|
return_estimator="final",
|
|
167
169
|
)
|
|
168
|
-
X_t = preprocess(
|
|
170
|
+
X_t = preprocess(
|
|
171
|
+
model, # type: ignore
|
|
172
|
+
X=X,
|
|
173
|
+
data=df_iris,
|
|
174
|
+
with_column_types=False,
|
|
175
|
+
)
|
|
169
176
|
assert list(X_t.columns) == X
|
|
@@ -46,7 +46,7 @@ def list_searchers() -> List[str]:
|
|
|
46
46
|
return list(_available_searchers)
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
def get_searcher(name: str) ->
|
|
49
|
+
def get_searcher(name: str) -> Type:
|
|
50
50
|
"""Get a searcher by name.
|
|
51
51
|
|
|
52
52
|
Parameters
|
|
@@ -56,8 +56,8 @@ def get_searcher(name: str) -> object:
|
|
|
56
56
|
|
|
57
57
|
Returns
|
|
58
58
|
-------
|
|
59
|
-
|
|
60
|
-
scikit-learn compatible searcher.
|
|
59
|
+
out
|
|
60
|
+
scikit-learn compatible searcher class.
|
|
61
61
|
|
|
62
62
|
Raises
|
|
63
63
|
------
|
|
@@ -9,7 +9,9 @@ from typing import Optional, Union
|
|
|
9
9
|
import numpy as np
|
|
10
10
|
from numpy.random import RandomState
|
|
11
11
|
from sklearn.model_selection import BaseShuffleSplit
|
|
12
|
-
from sklearn.model_selection._split import
|
|
12
|
+
from sklearn.model_selection._split import (
|
|
13
|
+
_validate_shuffle_split, # type: ignore
|
|
14
|
+
)
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
class StratifiedBootstrap(BaseShuffleSplit):
|
|
@@ -87,13 +89,13 @@ class StratifiedBootstrap(BaseShuffleSplit):
|
|
|
87
89
|
n_samples = [
|
|
88
90
|
_validate_shuffle_split(
|
|
89
91
|
len(t_inds),
|
|
90
|
-
self.test_size,
|
|
91
|
-
self.train_size,
|
|
92
|
-
default_test_size=self._default_test_size,
|
|
92
|
+
self.test_size, # type: ignore
|
|
93
|
+
self.train_size, # type: ignore
|
|
94
|
+
default_test_size=self._default_test_size, # type: ignore
|
|
93
95
|
)
|
|
94
96
|
for t_inds in y_inds
|
|
95
97
|
]
|
|
96
|
-
for _ in range(self.n_splits):
|
|
98
|
+
for _ in range(self.n_splits): # type: ignore
|
|
97
99
|
train = []
|
|
98
100
|
test = []
|
|
99
101
|
for t_inds, (n_train, _) in zip(y_inds, n_samples):
|
|
@@ -132,7 +132,7 @@ class DynamicSelection(BaseEstimator):
|
|
|
132
132
|
y_train = y[train]
|
|
133
133
|
y_dsel = y[test]
|
|
134
134
|
|
|
135
|
-
self.ensemble.fit(X_train, y_train)
|
|
135
|
+
self.ensemble.fit(X_train, y_train) # type: ignore
|
|
136
136
|
self._dsmodel = self._get_algorithm()
|
|
137
137
|
self._dsmodel.fit(X_dsel, y_dsel)
|
|
138
138
|
|
|
@@ -113,7 +113,7 @@ def test_naive_bayes_estimators(
|
|
|
113
113
|
"preprocess": None,
|
|
114
114
|
"problem_type": "classification",
|
|
115
115
|
}
|
|
116
|
-
clf = make_pipeline(clone(t_model))
|
|
116
|
+
clf = make_pipeline(clone(t_model)) # type: ignore
|
|
117
117
|
do_scoring_test(
|
|
118
118
|
X,
|
|
119
119
|
y,
|
|
@@ -129,7 +129,7 @@ def test_naive_bayes_estimators(
|
|
|
129
129
|
"preprocess": None,
|
|
130
130
|
"problem_type": "classification",
|
|
131
131
|
}
|
|
132
|
-
clf = make_pipeline(clone(t_model))
|
|
132
|
+
clf = make_pipeline(clone(t_model)) # type: ignore
|
|
133
133
|
do_scoring_test(
|
|
134
134
|
X,
|
|
135
135
|
y,
|
|
@@ -150,7 +150,7 @@ def test_naive_bayes_estimators(
|
|
|
150
150
|
"preprocess": None,
|
|
151
151
|
"problem_type": "classification",
|
|
152
152
|
}
|
|
153
|
-
clf = make_pipeline(clone(t_model))
|
|
153
|
+
clf = make_pipeline(clone(t_model)) # type: ignore
|
|
154
154
|
do_scoring_test(
|
|
155
155
|
X,
|
|
156
156
|
y,
|
|
@@ -236,7 +236,7 @@ def test_classificationestimators(
|
|
|
236
236
|
"problem_type": "classification",
|
|
237
237
|
"preprocess": "zscore",
|
|
238
238
|
}
|
|
239
|
-
clf = make_pipeline(StandardScaler(), clone(t_model))
|
|
239
|
+
clf = make_pipeline(StandardScaler(), clone(t_model)) # type: ignore
|
|
240
240
|
do_scoring_test(
|
|
241
241
|
X,
|
|
242
242
|
y,
|
|
@@ -258,7 +258,7 @@ def test_classificationestimators(
|
|
|
258
258
|
"problem_type": "classification",
|
|
259
259
|
"preprocess": "zscore",
|
|
260
260
|
}
|
|
261
|
-
clf = make_pipeline(StandardScaler(), clone(t_model))
|
|
261
|
+
clf = make_pipeline(StandardScaler(), clone(t_model)) # type: ignore
|
|
262
262
|
do_scoring_test(
|
|
263
263
|
X,
|
|
264
264
|
y,
|
|
@@ -333,7 +333,7 @@ def test_regression_estimators(
|
|
|
333
333
|
"preprocess": "zscore",
|
|
334
334
|
"problem_type": "regression",
|
|
335
335
|
}
|
|
336
|
-
clf = make_pipeline(StandardScaler(), clone(t_model))
|
|
336
|
+
clf = make_pipeline(StandardScaler(), clone(t_model)) # type: ignore
|
|
337
337
|
do_scoring_test(
|
|
338
338
|
X,
|
|
339
339
|
y,
|