julearn 0.3.5.dev117__tar.gz → 0.3.5.dev134__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.5.dev117 → julearn-0.3.5.dev134}/PKG-INFO +4 -4
- julearn-0.3.5.dev134/docs/changes/newsfragments/298.bugfix +1 -0
- julearn-0.3.5.dev134/docs/changes/newsfragments/299.misc +1 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_cm_acc_multiclass.py +1 -1
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_hyperparameter_tuning_bayessearch.py +5 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_model_inspection_docs.py +1 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/_version.py +3 -3
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/api.py +28 -13
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/conftest.py +8 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/final_model_cv.py +17 -6
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/pipeline_creator.py +12 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/prepare.py +38 -12
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/tests/test_api.py +0 -1
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/tests/test_prepare.py +10 -1
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/confound_remover.py +1 -1
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/testing.py +5 -1
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/PKG-INFO +4 -4
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/SOURCES.txt +3 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/requires.txt +3 -3
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/pyproject.toml +3 -3
- julearn-0.3.5.dev134/uv.lock +4047 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/documentation_request.yaml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/dependabot.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/check-stale.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/ci-docs.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/ci.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/docs-preview.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/docs.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/lint.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/publish.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.gitignore +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.pre-commit-config.yaml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/AUTHORS.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/LICENSE.md +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/README.md +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/codecov.yml +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/Makefile +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_static/css/custom.css +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_static/js/custom.js +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/class.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/function.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/function_warning.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/versions.html +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/base.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/config.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/index.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/inspect.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/main.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/model_selection.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/models.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/pipeline.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/prepare.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/scoring.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/stats.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/transformers.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/utils.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/viz.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/available_pipeline_steps.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/contributors.inc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/.gitignore +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/226.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/226.feature +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/254.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/254.change +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/277.enh +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/278.doc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/279.doc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/282.doc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/283.doc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/284.misc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/285.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/286.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/288.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/291.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/297.bugfix +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/297.misc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/conf.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/configuration.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/contributing.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/examples.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/faq.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/getting_started.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/corrected_ttest.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/final_estimator.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/iris_X.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/iris_df.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/iris_y.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/condor_q.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/ui_main.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/ui_open.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/ui_stacked.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_calm.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_confbias.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_cv.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_generalization.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_it.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_ml.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_mlit.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/multiple_scorers_run_cv.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/plot_scores.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/scores_run_cv.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/scores_run_cv_splitter.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/scores_run_cv_train.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/index.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/links.inc +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/maintaining.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/redirect.html +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/CBPM.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/confound_removal.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/cross_validation_splitter.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/hyperparameter_tuning.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/index.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/joblib.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/model_inspect.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/stacked_models.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/target_transformers.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/cross_validation.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/data.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/index.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/model_comparison.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/model_evaluation.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/pipeline.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/whats_new.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_example_regression.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_stratified_kfold_reg.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/run_combine_pandas.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/run_grouped_cv.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/run_simple_binary_classification.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/01_model_comparison/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/01_model_comparison/plot_simple_model_comparison.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/plot_groupcv_inspect_svm.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/plot_inspect_random_forest.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/plot_preprocess.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/run_binary_inspect_folds.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_apply_to_target.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_example_pca_featsets.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_generate_target.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_hyperparameter_multiple_grids.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_hyperparameter_tuning.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_stacked_models.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/04_confounds/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/04_confounds/plot_confound_removal_classification.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/04_confounds/run_return_confounds.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/05_customization/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/05_customization/run_custom_scorers_regression.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_cbpm_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_confound_removal_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_cv_splitters_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_data_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_hyperparameters_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_model_comparison_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_model_evaluation_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_pipeline_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_stacked_models_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_target_transformer_docs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/README.rst +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/XX_disabled/dis_run_n_jobs.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/XX_disabled/dis_run_target_confound_removal.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/ignore_words.txt +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/column_types.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/estimators.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/tests/test_base_estimators.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/tests/test_column_types.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/config.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/external/optuna_searchcv.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/_cv.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/_pipeline.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/_preprocess.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/inspector.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_cv.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_inspector.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_pipeline.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_preprocess.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/_optuna_searcher.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/_skopt_searcher.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/available_searchers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/continuous_stratified_kfold.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/stratified_bootstrap.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_available_searchers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_continous_stratified_kfold.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_final_model_cv.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_optuna_searcher.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_skopt_searcher.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_stratified_bootstrap.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/utils.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/available_models.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/dynamic.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/tests/test_available_models.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/tests/test_dynamic.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/tests/test_models.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/merger.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/target_pipeline.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/target_pipeline_creator.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_merger.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_pipeline_creator.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_target_pipeline.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_target_pipeline_creator.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/available_scorers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/metrics.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/tests/test_available_scorers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/tests/test_metrics.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/stats/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/stats/corrected_ttest.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/stats/tests/test_corrected_ttest.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/tests/test_config.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/available_transformers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/cbpm.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/change_column_types.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/drop_columns.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/filter_columns.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/pick_columns.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/set_column_types.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_change_column_types.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_drop_columns.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_filter_columns.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_set_column_types.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/ju_column_transformer.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/available_target_transformers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/ju_generated_target_model.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/ju_target_transformer.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/ju_transformed_target_model.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/target_confound_remover.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_available_target_transformers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_ju_generated_target_model.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_ju_target_transformer.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_ju_transformed_target_model.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_target_confound_remover.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_available_transformers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_cbpm.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_confounds.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_jucolumntransformers.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/_cv.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/checks.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/logging.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/tests/test_logging.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/tests/test_version.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/typing.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/versions.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/viz/__init__.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/viz/_scores.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/viz/res/julearn_logo_generalization.png +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/dependency_links.txt +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/top_level.txt +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/setup.cfg +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/setup.py +0 -0
- {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: julearn
|
|
3
|
-
Version: 0.3.5.
|
|
3
|
+
Version: 0.3.5.dev134
|
|
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>
|
|
@@ -27,10 +27,10 @@ Requires-Python: >=3.9
|
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
28
28
|
License-File: LICENSE.md
|
|
29
29
|
License-File: AUTHORS.rst
|
|
30
|
-
Requires-Dist: numpy<
|
|
31
|
-
Requires-Dist: pandas<
|
|
30
|
+
Requires-Dist: numpy<3.0.0,>=1.26.0
|
|
31
|
+
Requires-Dist: pandas<4.0.0,>=2.1.0
|
|
32
32
|
Requires-Dist: statsmodels<0.15,>=0.13
|
|
33
|
-
Requires-Dist: scikit-learn<1.
|
|
33
|
+
Requires-Dist: scikit-learn<1.9.0,>=1.5.0
|
|
34
34
|
Requires-Dist: looseversion==1.3.0; python_version >= "3.12"
|
|
35
35
|
Provides-Extra: dev
|
|
36
36
|
Requires-Dist: tox; extra == "dev"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Enable and use metadata routing for hyperparameter tuning estimators by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Update versions of dependencies in pyproject.toml to support pandas 3.X.X, numpy 2.X.X and scikit-learn 1.8.X by `Fede Raimondo`_
|
{julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_cm_acc_multiclass.py
RENAMED
|
@@ -89,7 +89,7 @@ print(cm)
|
|
|
89
89
|
###############################################################################
|
|
90
90
|
# Now that we have our confusion matrix, let's build another matrix with
|
|
91
91
|
# annotations.
|
|
92
|
-
cm_sum = np.sum(cm, axis=1
|
|
92
|
+
cm_sum = np.sum(cm, axis=1)
|
|
93
93
|
cm_perc = cm / cm_sum.astype(float) * 100
|
|
94
94
|
annot = np.empty_like(cm).astype(str)
|
|
95
95
|
nrows, ncols = cm.shape
|
|
@@ -19,6 +19,7 @@ References
|
|
|
19
19
|
|
|
20
20
|
import numpy as np
|
|
21
21
|
from seaborn import load_dataset
|
|
22
|
+
import sklearn
|
|
22
23
|
|
|
23
24
|
from julearn import run_cross_validation
|
|
24
25
|
from julearn.utils import configure_logging, logger
|
|
@@ -29,6 +30,10 @@ from julearn.pipeline import PipelineCreator
|
|
|
29
30
|
# Set the logging level to info to see extra information.
|
|
30
31
|
configure_logging(level="INFO")
|
|
31
32
|
|
|
33
|
+
###############################################################################
|
|
34
|
+
# Disable metadata routing to avoid errors due to BayesSearchCV being used.
|
|
35
|
+
sklearn.set_config(enable_metadata_routing=False)
|
|
36
|
+
|
|
32
37
|
###############################################################################
|
|
33
38
|
# Set the random seed to always have the same example.
|
|
34
39
|
np.random.seed(42)
|
|
@@ -57,6 +57,7 @@ penguins_df = penguins_df.query("species != 'Chinstrap'").dropna()
|
|
|
57
57
|
penguins_df["species"] = penguins_df["species"].replace(
|
|
58
58
|
{"Adelie": 0, "Gentoo": 1}
|
|
59
59
|
)
|
|
60
|
+
penguins_df["species"] = penguins_df["species"].astype(int)
|
|
60
61
|
features = [x for x in penguins_df.columns if x != "species"]
|
|
61
62
|
|
|
62
63
|
##############################################################################
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.3.5.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 3, 5, '
|
|
31
|
+
__version__ = version = '0.3.5.dev134'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 3, 5, 'dev134')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g92ed90a44'
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# Sami Hamdan <s.hamdan@fz-juelich.de>
|
|
5
5
|
# License: AGPL
|
|
6
6
|
|
|
7
|
+
import inspect
|
|
7
8
|
from typing import Optional, Union
|
|
8
9
|
|
|
9
10
|
import numpy as np
|
|
@@ -26,7 +27,10 @@ from .utils import _compute_cvmdsum, logger, raise_error
|
|
|
26
27
|
from .utils.typing import CVLike
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
sklearn.set_config(enable_metadata_routing=True)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _validate_api_params( # noqa: C901
|
|
30
34
|
X: list[str], # noqa: N803
|
|
31
35
|
y: str,
|
|
32
36
|
model: Union[str, PipelineCreator, BaseEstimator, list[PipelineCreator]],
|
|
@@ -533,7 +537,7 @@ def run_cross_validation(
|
|
|
533
537
|
return_inspector,
|
|
534
538
|
wrap_score,
|
|
535
539
|
problem_type,
|
|
536
|
-
) =
|
|
540
|
+
) = _validate_api_params(
|
|
537
541
|
X=X,
|
|
538
542
|
y=y,
|
|
539
543
|
model=model,
|
|
@@ -561,7 +565,7 @@ def run_cross_validation(
|
|
|
561
565
|
)
|
|
562
566
|
logger.info(f"Using outer CV scheme {cv_outer}")
|
|
563
567
|
|
|
564
|
-
check_consistency(df_y, cv, groups, problem_type) # type: ignore
|
|
568
|
+
groups_needed = check_consistency(df_y, cv, groups, problem_type) # type: ignore
|
|
565
569
|
|
|
566
570
|
scoring = check_scoring(
|
|
567
571
|
pipeline, # type: ignore
|
|
@@ -570,16 +574,28 @@ def run_cross_validation(
|
|
|
570
574
|
)
|
|
571
575
|
|
|
572
576
|
cv_mdsum = _compute_cvmdsum(cv_outer)
|
|
573
|
-
fit_params = {}
|
|
574
|
-
if df_groups is not None:
|
|
575
|
-
if isinstance(pipeline, BaseSearchCV):
|
|
576
|
-
fit_params["groups"] = df_groups.values
|
|
577
577
|
|
|
578
|
+
fit_params = {}
|
|
578
579
|
_sklearn_deprec_fit_params = {}
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
580
|
+
|
|
581
|
+
if df_groups is not None:
|
|
582
|
+
if groups_needed:
|
|
583
|
+
# If we need groups, we have to pass them to the fit method of
|
|
584
|
+
# the last step of the pipeline
|
|
585
|
+
if not isinstance(pipeline, BaseSearchCV):
|
|
586
|
+
last_step = pipeline.steps[-1][1]
|
|
587
|
+
argspec = inspect.getfullargspec(last_step.fit)
|
|
588
|
+
if "groups" in argspec.args:
|
|
589
|
+
logger.debug(
|
|
590
|
+
"Pipeline's last step uses groups," \
|
|
591
|
+
"calling `set_fit_request(groups=True)`")
|
|
592
|
+
last_step.set_fit_request(groups=True)
|
|
593
|
+
fit_params["groups"] = df_groups.values
|
|
594
|
+
|
|
595
|
+
if sklearn.__version__ >= "1.4.0":
|
|
596
|
+
_sklearn_deprec_fit_params["params"] = fit_params
|
|
597
|
+
else:
|
|
598
|
+
_sklearn_deprec_fit_params["fit_params"] = fit_params
|
|
583
599
|
|
|
584
600
|
scores = cross_validate(
|
|
585
601
|
pipeline,
|
|
@@ -587,7 +603,6 @@ def run_cross_validation(
|
|
|
587
603
|
df_y,
|
|
588
604
|
cv=cv_outer,
|
|
589
605
|
scoring=scoring,
|
|
590
|
-
groups=df_groups,
|
|
591
606
|
return_estimator=cv_return_estimator,
|
|
592
607
|
n_jobs=n_jobs,
|
|
593
608
|
return_train_score=return_train_score,
|
|
@@ -776,7 +791,7 @@ def run_fit(
|
|
|
776
791
|
_,
|
|
777
792
|
_,
|
|
778
793
|
problem_type,
|
|
779
|
-
) =
|
|
794
|
+
) = _validate_api_params(
|
|
780
795
|
X=X,
|
|
781
796
|
y=y,
|
|
782
797
|
model=model,
|
|
@@ -19,6 +19,14 @@ _filter_keys = {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
|
|
22
|
+
@pytest.fixture(autouse=True)
|
|
23
|
+
def enable_metadata_routing() -> None:
|
|
24
|
+
"""Enable metadata routing in sklearn for all tests."""
|
|
25
|
+
import sklearn
|
|
26
|
+
|
|
27
|
+
sklearn.set_config(enable_metadata_routing=True)
|
|
28
|
+
|
|
29
|
+
|
|
22
30
|
def pytest_configure(config: pytest.Config) -> None:
|
|
23
31
|
"""Add a new marker to pytest.
|
|
24
32
|
|
|
@@ -4,16 +4,13 @@
|
|
|
4
4
|
# License: AGPL
|
|
5
5
|
|
|
6
6
|
from collections.abc import Generator
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import Optional
|
|
8
8
|
|
|
9
9
|
import numpy as np
|
|
10
|
+
from sklearn.model_selection import BaseCrossValidator
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
from sklearn.model_selection import BaseCrossValidator
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class _JulearnFinalModelCV:
|
|
13
|
+
class _JulearnFinalModelCV(BaseCrossValidator):
|
|
17
14
|
"""Final model cross-validation iterator.
|
|
18
15
|
|
|
19
16
|
Wraps any CV iterator to provide an extra iteration with the full dataset.
|
|
@@ -30,6 +27,20 @@ class _JulearnFinalModelCV:
|
|
|
30
27
|
if hasattr(cv, "n_repeats"):
|
|
31
28
|
self.n_repeats = cv.n_repeats
|
|
32
29
|
|
|
30
|
+
def get_metadata_routing(self) -> dict:
|
|
31
|
+
"""Get metadata routing information from the underlying CV.
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
dict
|
|
36
|
+
The metadata routing information.
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
if hasattr(self.cv, "get_metadata_routing"):
|
|
40
|
+
return self.cv.get_metadata_routing()
|
|
41
|
+
else:
|
|
42
|
+
return {}
|
|
43
|
+
|
|
33
44
|
def split(
|
|
34
45
|
self,
|
|
35
46
|
X: np.ndarray, # noqa: N803
|
|
@@ -9,7 +9,9 @@ from dataclasses import dataclass, field
|
|
|
9
9
|
from typing import Any, Optional, Union
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
|
+
import sklearn
|
|
12
13
|
from scipy import stats
|
|
14
|
+
from sklearn.ensemble import AdaBoostClassifier, AdaBoostRegressor
|
|
13
15
|
from sklearn.model_selection import RandomizedSearchCV, check_cv
|
|
14
16
|
from sklearn.pipeline import Pipeline
|
|
15
17
|
|
|
@@ -417,6 +419,16 @@ class PipelineCreator:
|
|
|
417
419
|
f"{name}__{param}": val for param, val in params_to_tune.items()
|
|
418
420
|
}
|
|
419
421
|
|
|
422
|
+
# Disable metadata routing for AdaBoost-based estimators until
|
|
423
|
+
# scikit-learn implements them.
|
|
424
|
+
|
|
425
|
+
if isinstance(step, (AdaBoostClassifier, AdaBoostRegressor)):
|
|
426
|
+
warn_with_log(
|
|
427
|
+
"Disabling metadata routing for AdaBoost-based "
|
|
428
|
+
"estimators until scikit-learn implements them."
|
|
429
|
+
)
|
|
430
|
+
sklearn.set_config(enable_metadata_routing=False)
|
|
431
|
+
|
|
420
432
|
self._steps.append(
|
|
421
433
|
Step(
|
|
422
434
|
name=name,
|
|
@@ -365,7 +365,7 @@ def check_consistency(
|
|
|
365
365
|
cv: CVLike,
|
|
366
366
|
groups: Optional[pd.Series],
|
|
367
367
|
problem_type: str,
|
|
368
|
-
) ->
|
|
368
|
+
) -> bool:
|
|
369
369
|
"""Check the consistency of the parameters/input.
|
|
370
370
|
|
|
371
371
|
Parameters
|
|
@@ -379,6 +379,12 @@ def check_consistency(
|
|
|
379
379
|
problem_type : str
|
|
380
380
|
The problem type. Can be "classification" or "regression".
|
|
381
381
|
|
|
382
|
+
Returns
|
|
383
|
+
-------
|
|
384
|
+
groups_needed : bool
|
|
385
|
+
True if the groups variable is needed for the CV scheme,
|
|
386
|
+
False otherwise.
|
|
387
|
+
|
|
382
388
|
Raises
|
|
383
389
|
------
|
|
384
390
|
ValueError
|
|
@@ -395,6 +401,15 @@ def check_consistency(
|
|
|
395
401
|
# Check problem type and the target.
|
|
396
402
|
n_classes = np.unique(y.values).shape[0] # type: ignore
|
|
397
403
|
if problem_type == "classification":
|
|
404
|
+
is_numeric = isinstance(y.values.dtype, np.dtype) and np.issubdtype(
|
|
405
|
+
y.values.dtype, np.number
|
|
406
|
+
) # type: ignore
|
|
407
|
+
if not is_numeric:
|
|
408
|
+
warn_with_log(
|
|
409
|
+
f"The kind of values in y ({y.values.dtype}) is not "
|
|
410
|
+
"suitable for a classification. Values should be numeric."
|
|
411
|
+
)
|
|
412
|
+
|
|
398
413
|
# If not exactly two classes:
|
|
399
414
|
if n_classes == 1:
|
|
400
415
|
raise_error(
|
|
@@ -417,7 +432,9 @@ def check_consistency(
|
|
|
417
432
|
logger.info("Binary classification problem detected.")
|
|
418
433
|
elif problem_type == "regression":
|
|
419
434
|
# Regression
|
|
420
|
-
is_numeric =
|
|
435
|
+
is_numeric = isinstance(y.values.dtype, np.dtype) and np.issubdtype(
|
|
436
|
+
y.values.dtype, np.number
|
|
437
|
+
) # type: ignore
|
|
421
438
|
if not is_numeric:
|
|
422
439
|
warn_with_log(
|
|
423
440
|
f"The kind of values in y ({y.values.dtype}) is not "
|
|
@@ -435,21 +452,30 @@ def check_consistency(
|
|
|
435
452
|
"The problem type must be either 'classification' or 'regression'."
|
|
436
453
|
)
|
|
437
454
|
# Check groups and CV scheme
|
|
455
|
+
groups_needed = False
|
|
456
|
+
valid_group_cv_instances = (
|
|
457
|
+
GroupKFold,
|
|
458
|
+
GroupShuffleSplit,
|
|
459
|
+
LeaveOneGroupOut,
|
|
460
|
+
LeavePGroupsOut,
|
|
461
|
+
StratifiedGroupKFold,
|
|
462
|
+
ContinuousStratifiedGroupKFold,
|
|
463
|
+
RepeatedContinuousStratifiedGroupKFold,
|
|
464
|
+
)
|
|
438
465
|
if groups is not None:
|
|
439
|
-
|
|
440
|
-
GroupKFold,
|
|
441
|
-
GroupShuffleSplit,
|
|
442
|
-
LeaveOneGroupOut,
|
|
443
|
-
LeavePGroupsOut,
|
|
444
|
-
StratifiedGroupKFold,
|
|
445
|
-
ContinuousStratifiedGroupKFold,
|
|
446
|
-
RepeatedContinuousStratifiedGroupKFold,
|
|
447
|
-
)
|
|
448
|
-
if not isinstance(cv, valid_instances):
|
|
466
|
+
if not isinstance(cv, valid_group_cv_instances):
|
|
449
467
|
warn_with_log(
|
|
450
468
|
"The parameter groups was specified but the CV strategy "
|
|
451
469
|
"will not consider them."
|
|
452
470
|
)
|
|
471
|
+
else:
|
|
472
|
+
groups_needed = True
|
|
473
|
+
elif isinstance(cv, valid_group_cv_instances):
|
|
474
|
+
raise_error(
|
|
475
|
+
"The CV strategy requires groups but the parameter groups was "
|
|
476
|
+
"not specified."
|
|
477
|
+
)
|
|
478
|
+
return groups_needed
|
|
453
479
|
|
|
454
480
|
|
|
455
481
|
def _check_x_types(
|
|
@@ -701,7 +701,16 @@ def test_check_consistency() -> None:
|
|
|
701
701
|
with pytest.warns(RuntimeWarning, match="larger than the number"):
|
|
702
702
|
check_consistency(y=y, cv=cv, groups=groups, problem_type=problem_type)
|
|
703
703
|
|
|
704
|
-
# Test with wrong
|
|
704
|
+
# Test with wrong dtype in series
|
|
705
|
+
y = pd.Series(np.random.randint(0, 2, size=10)).astype(object)
|
|
706
|
+
problem_type = "classification"
|
|
707
|
+
groups = None
|
|
708
|
+
cv = 5
|
|
709
|
+
with pytest.warns(RuntimeWarning, match="should be numeric"):
|
|
710
|
+
check_consistency(y=y, cv=cv, groups=groups, problem_type=problem_type)
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
# Test with wrong dtype in series
|
|
705
714
|
y = pd.Series(["A"] * 10)
|
|
706
715
|
problem_type = "regression"
|
|
707
716
|
groups = None
|
|
@@ -259,7 +259,7 @@ class ConfoundRemover(JuTransformer):
|
|
|
259
259
|
if self.threshold is not None:
|
|
260
260
|
# Accounting for correlated rounding errors for very small
|
|
261
261
|
# residuals
|
|
262
|
-
residuals = residuals.
|
|
262
|
+
residuals = residuals.map( # type: ignore
|
|
263
263
|
lambda x: 0 if abs(x) <= self.threshold else x
|
|
264
264
|
)
|
|
265
265
|
return residuals
|
|
@@ -245,13 +245,17 @@ def do_scoring_test(
|
|
|
245
245
|
)
|
|
246
246
|
|
|
247
247
|
np.random.seed(42)
|
|
248
|
+
if sk_groups is not None:
|
|
249
|
+
params = {"groups": sk_groups}
|
|
250
|
+
else:
|
|
251
|
+
params = {}
|
|
248
252
|
expected = cross_validate(
|
|
249
253
|
sklearn_model, # type: ignore
|
|
250
254
|
sk_X,
|
|
251
255
|
sk_y,
|
|
252
256
|
cv=sk_cv,
|
|
253
257
|
scoring=scorers,
|
|
254
|
-
|
|
258
|
+
params=params, # type: ignore
|
|
255
259
|
)
|
|
256
260
|
|
|
257
261
|
# Compare the models
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: julearn
|
|
3
|
-
Version: 0.3.5.
|
|
3
|
+
Version: 0.3.5.dev134
|
|
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>
|
|
@@ -27,10 +27,10 @@ Requires-Python: >=3.9
|
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
28
28
|
License-File: LICENSE.md
|
|
29
29
|
License-File: AUTHORS.rst
|
|
30
|
-
Requires-Dist: numpy<
|
|
31
|
-
Requires-Dist: pandas<
|
|
30
|
+
Requires-Dist: numpy<3.0.0,>=1.26.0
|
|
31
|
+
Requires-Dist: pandas<4.0.0,>=2.1.0
|
|
32
32
|
Requires-Dist: statsmodels<0.15,>=0.13
|
|
33
|
-
Requires-Dist: scikit-learn<1.
|
|
33
|
+
Requires-Dist: scikit-learn<1.9.0,>=1.5.0
|
|
34
34
|
Requires-Dist: looseversion==1.3.0; python_version >= "3.12"
|
|
35
35
|
Provides-Extra: dev
|
|
36
36
|
Requires-Dist: tox; extra == "dev"
|
|
@@ -8,6 +8,7 @@ ignore_words.txt
|
|
|
8
8
|
pyproject.toml
|
|
9
9
|
setup.py
|
|
10
10
|
tox.ini
|
|
11
|
+
uv.lock
|
|
11
12
|
.github/dependabot.yml
|
|
12
13
|
.github/ISSUE_TEMPLATE/bug_report.yaml
|
|
13
14
|
.github/ISSUE_TEMPLATE/config.yml
|
|
@@ -71,6 +72,8 @@ docs/changes/newsfragments/288.bugfix
|
|
|
71
72
|
docs/changes/newsfragments/291.bugfix
|
|
72
73
|
docs/changes/newsfragments/297.bugfix
|
|
73
74
|
docs/changes/newsfragments/297.misc
|
|
75
|
+
docs/changes/newsfragments/298.bugfix
|
|
76
|
+
docs/changes/newsfragments/299.misc
|
|
74
77
|
docs/images/corrected_ttest.png
|
|
75
78
|
docs/images/final_estimator.png
|
|
76
79
|
docs/images/iris_X.png
|
|
@@ -34,10 +34,10 @@ classifiers = [
|
|
|
34
34
|
"Programming Language :: Python :: 3.13",
|
|
35
35
|
]
|
|
36
36
|
dependencies = [
|
|
37
|
-
"numpy>=1.26.0,<
|
|
38
|
-
"pandas>=2.
|
|
37
|
+
"numpy>=1.26.0,<3.0.0",
|
|
38
|
+
"pandas>=2.1.0,<4.0.0",
|
|
39
39
|
"statsmodels>=0.13,<0.15",
|
|
40
|
-
"scikit-learn>=1.5.0,<1.
|
|
40
|
+
"scikit-learn>=1.5.0,<1.9.0",
|
|
41
41
|
"looseversion==1.3.0; python_version>='3.12'",
|
|
42
42
|
]
|
|
43
43
|
dynamic = ["version"]
|