autogluon.tabular 1.2.1b20250305__py3-none-any.whl → 1.2.1b20250306__py3-none-any.whl
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.
- autogluon/tabular/models/automm/automm_model.py +5 -1
- autogluon/tabular/models/automm/ft_transformer.py +1 -0
- autogluon/tabular/models/catboost/catboost_model.py +2 -0
- autogluon/tabular/models/fasttext/fasttext_model.py +7 -1
- autogluon/tabular/models/image_prediction/image_predictor.py +6 -0
- autogluon/tabular/models/imodels/imodels_models.py +6 -0
- autogluon/tabular/models/knn/knn_model.py +2 -0
- autogluon/tabular/models/lr/lr_model.py +2 -0
- autogluon/tabular/models/rf/rf_model.py +4 -2
- autogluon/tabular/models/tab_transformer/tab_transformer_model.py +5 -0
- autogluon/tabular/models/tabpfn/tabpfn_model.py +4 -7
- autogluon/tabular/models/tabpfnmix/tabpfnmix_model.py +2 -16
- autogluon/tabular/models/tabular_nn/torch/tabular_nn_torch.py +4 -2
- autogluon/tabular/models/text_prediction/text_prediction_v1_model.py +6 -0
- autogluon/tabular/models/vowpalwabbit/vowpalwabbit_model.py +6 -1
- autogluon/tabular/models/xgboost/xgboost_model.py +7 -4
- autogluon/tabular/models/xt/xt_model.py +2 -0
- autogluon/tabular/testing/__init__.py +2 -0
- autogluon/tabular/testing/fit_helper.py +476 -0
- autogluon/tabular/testing/generate_datasets.py +141 -0
- autogluon/tabular/testing/model_fit_helper.py +86 -0
- autogluon/tabular/version.py +1 -1
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/METADATA +12 -12
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/RECORD +31 -27
- /autogluon.tabular-1.2.1b20250305-py3.9-nspkg.pth → /autogluon.tabular-1.2.1b20250306-py3.9-nspkg.pth +0 -0
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/LICENSE +0 -0
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/NOTICE +0 -0
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/WHEEL +0 -0
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/namespace_packages.txt +0 -0
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/top_level.txt +0 -0
- {autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/zip-safe +0 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
"""Wrapper of the MultiModalPredictor."""
|
2
|
+
from __future__ import annotations
|
2
3
|
|
3
4
|
import logging
|
4
5
|
import os
|
@@ -83,11 +84,14 @@ class MultiModalPredictorModel(AbstractModel):
|
|
83
84
|
default_ag_args = super()._get_default_ag_args()
|
84
85
|
extra_ag_args = {
|
85
86
|
"valid_stacker": False,
|
86
|
-
"problem_types": [BINARY, MULTICLASS, REGRESSION],
|
87
87
|
}
|
88
88
|
default_ag_args.update(extra_ag_args)
|
89
89
|
return default_ag_args
|
90
90
|
|
91
|
+
@classmethod
|
92
|
+
def supported_problem_types(cls) -> list[str] | None:
|
93
|
+
return ["binary", "multiclass", "regression"]
|
94
|
+
|
91
95
|
# FIXME: Enable parallel bagging once AutoMM supports being run within Ray without hanging
|
92
96
|
@classmethod
|
93
97
|
def _get_default_ag_args_ensemble(cls, **kwargs) -> dict:
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
__all__ = ["FastTextModel"]
|
2
4
|
|
3
5
|
import contextlib
|
@@ -49,10 +51,14 @@ class FastTextModel(AbstractModel):
|
|
49
51
|
@classmethod
|
50
52
|
def _get_default_ag_args(cls) -> dict:
|
51
53
|
default_ag_args = super()._get_default_ag_args()
|
52
|
-
extra_ag_args = {"valid_stacker": False
|
54
|
+
extra_ag_args = {"valid_stacker": False}
|
53
55
|
default_ag_args.update(extra_ag_args)
|
54
56
|
return default_ag_args
|
55
57
|
|
58
|
+
@classmethod
|
59
|
+
def supported_problem_types(cls) -> list[str] | None:
|
60
|
+
return ["binary", "multiclass"]
|
61
|
+
|
56
62
|
def _fit(self, X, y, sample_weight=None, **kwargs):
|
57
63
|
if self.problem_type not in (BINARY, MULTICLASS):
|
58
64
|
raise ValueError("FastText model only supports binary or multiclass classification")
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
4
|
|
3
5
|
import numpy as np
|
@@ -123,3 +125,7 @@ class ImagePredictorModel(MultiModalPredictorModel):
|
|
123
125
|
else:
|
124
126
|
raise NotImplementedError(f"Computing dummy pred_proba is not implemented for {self.problem_type}.")
|
125
127
|
return pred_proba_mean
|
128
|
+
|
129
|
+
@classmethod
|
130
|
+
def supported_problem_types(cls) -> list[str] | None:
|
131
|
+
return ["binary", "multiclass", "regression"]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
from abc import abstractmethod
|
2
4
|
|
3
5
|
import numpy as np
|
@@ -63,6 +65,10 @@ class _IModelsModel(AbstractModel):
|
|
63
65
|
for param, val in default_params.items():
|
64
66
|
self._set_default_param_value(param, val)
|
65
67
|
|
68
|
+
@classmethod
|
69
|
+
def supported_problem_types(cls) -> list[str] | None:
|
70
|
+
return ["binary", "multiclass", "regression"]
|
71
|
+
|
66
72
|
def _get_default_auxiliary_params(self) -> dict:
|
67
73
|
default_auxiliary_params = super()._get_default_auxiliary_params()
|
68
74
|
extra_auxiliary_params = dict(
|
@@ -399,8 +399,10 @@ class RFModel(AbstractModel):
|
|
399
399
|
tags["valid_oof"] = True
|
400
400
|
return tags
|
401
401
|
|
402
|
-
|
402
|
+
@classmethod
|
403
|
+
def _valid_compilers(cls):
|
403
404
|
return [RFNativeCompiler, RFOnnxCompiler]
|
404
405
|
|
405
|
-
|
406
|
+
@classmethod
|
407
|
+
def _default_compiler(cls):
|
406
408
|
return RFNativeCompiler
|
@@ -1,4 +1,5 @@
|
|
1
1
|
"""TabTransformer model"""
|
2
|
+
from __future__ import annotations
|
2
3
|
|
3
4
|
import logging
|
4
5
|
import os
|
@@ -486,6 +487,10 @@ class TabTransformerModel(AbstractNeuralNetworkModel):
|
|
486
487
|
def _get_default_searchspace(self):
|
487
488
|
return get_default_searchspace()
|
488
489
|
|
490
|
+
@classmethod
|
491
|
+
def supported_problem_types(cls) -> list[str] | None:
|
492
|
+
return ["binary", "multiclass", "regression"]
|
493
|
+
|
489
494
|
def save(self, path: str = None, verbose=True) -> str:
|
490
495
|
import torch
|
491
496
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import numpy as np
|
2
4
|
import pandas as pd
|
3
5
|
|
@@ -97,13 +99,8 @@ class TabPFNModel(AbstractModel):
|
|
97
99
|
self._set_default_param_value(param, val)
|
98
100
|
|
99
101
|
@classmethod
|
100
|
-
def
|
101
|
-
|
102
|
-
extra_ag_args = {
|
103
|
-
"problem_types": [BINARY, MULTICLASS],
|
104
|
-
}
|
105
|
-
default_ag_args.update(extra_ag_args)
|
106
|
-
return default_ag_args
|
102
|
+
def supported_problem_types(cls) -> list[str] | None:
|
103
|
+
return ["binary", "multiclass"]
|
107
104
|
|
108
105
|
def _get_default_auxiliary_params(self) -> dict:
|
109
106
|
"""
|
@@ -297,13 +297,8 @@ class TabPFNMixModel(AbstractModel):
|
|
297
297
|
return os.path.join(self.path, self.weights_file_name)
|
298
298
|
|
299
299
|
@classmethod
|
300
|
-
def
|
301
|
-
|
302
|
-
extra_ag_args = {
|
303
|
-
"problem_types": [BINARY, MULTICLASS, REGRESSION],
|
304
|
-
}
|
305
|
-
default_ag_args.update(extra_ag_args)
|
306
|
-
return default_ag_args
|
300
|
+
def supported_problem_types(cls) -> list[str] | None:
|
301
|
+
return ["binary", "multiclass", "regression"]
|
307
302
|
|
308
303
|
def _get_default_auxiliary_params(self) -> dict:
|
309
304
|
default_auxiliary_params = super()._get_default_auxiliary_params()
|
@@ -314,15 +309,6 @@ class TabPFNMixModel(AbstractModel):
|
|
314
309
|
)
|
315
310
|
return default_auxiliary_params
|
316
311
|
|
317
|
-
@classmethod
|
318
|
-
def _get_default_ag_args_ensemble(cls, **kwargs) -> dict:
|
319
|
-
default_ag_args_ensemble = super()._get_default_ag_args_ensemble(**kwargs)
|
320
|
-
extra_ag_args_ensemble = {
|
321
|
-
# "fold_fitting_strategy": "sequential_local", # FIXME: Comment out after debugging for large speedup
|
322
|
-
}
|
323
|
-
default_ag_args_ensemble.update(extra_ag_args_ensemble)
|
324
|
-
return default_ag_args_ensemble
|
325
|
-
|
326
312
|
def _get_maximum_resources(self) -> dict[str, int | float]:
|
327
313
|
# torch model trains slower when utilizing virtual cores and this issue scale up when the number of cpu cores increases
|
328
314
|
return {"num_cpus": ResourceManager.get_cpu_count_psutil(logical=False)}
|
@@ -897,10 +897,12 @@ class TabularNeuralNetTorchModel(AbstractNeuralNetworkModel):
|
|
897
897
|
minimum_resources["num_gpus"] = 1
|
898
898
|
return minimum_resources
|
899
899
|
|
900
|
-
|
900
|
+
@classmethod
|
901
|
+
def _valid_compilers(cls):
|
901
902
|
return [TabularNeuralNetTorchNativeCompiler, TabularNeuralNetTorchOnnxCompiler]
|
902
903
|
|
903
|
-
|
904
|
+
@classmethod
|
905
|
+
def _default_compiler(cls):
|
904
906
|
return TabularNeuralNetTorchNativeCompiler
|
905
907
|
|
906
908
|
def _ag_params(self) -> set:
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
4
|
|
3
5
|
from autogluon.common.features.types import (
|
@@ -30,3 +32,7 @@ class TextPredictorModel(MultiModalPredictorModel):
|
|
30
32
|
)
|
31
33
|
default_auxiliary_params.update(extra_auxiliary_params)
|
32
34
|
return default_auxiliary_params
|
35
|
+
|
36
|
+
@classmethod
|
37
|
+
def supported_problem_types(cls) -> list[str] | None:
|
38
|
+
return ["binary", "multiclass", "regression"]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
4
|
import os
|
3
5
|
import time
|
@@ -267,11 +269,14 @@ class VowpalWabbitModel(AbstractModel):
|
|
267
269
|
default_ag_args = super()._get_default_ag_args()
|
268
270
|
extra_ag_args = {
|
269
271
|
"valid_stacker": False,
|
270
|
-
"problem_types": [BINARY, MULTICLASS, REGRESSION],
|
271
272
|
}
|
272
273
|
default_ag_args.update(extra_ag_args)
|
273
274
|
return default_ag_args
|
274
275
|
|
276
|
+
@classmethod
|
277
|
+
def supported_problem_types(cls) -> list[str] | None:
|
278
|
+
return ["binary", "multiclass", "regression"]
|
279
|
+
|
275
280
|
def _more_tags(self):
|
276
281
|
# `can_refit_full=True` because best epoch is communicated at end of `_fit`: `self.params_trained['passes'] = epoch`
|
277
282
|
return {"can_refit_full": True}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import logging
|
2
4
|
import math
|
3
5
|
import os
|
@@ -141,10 +143,11 @@ class XGBoostModel(AbstractModel):
|
|
141
143
|
eval_set["test"] = (X_test, y_test)
|
142
144
|
|
143
145
|
if num_gpus != 0:
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
146
|
+
if "device" not in params:
|
147
|
+
# FIXME: figure out which GPUs are available to this model instead of hardcoding GPU 0.
|
148
|
+
# Need to update BaggedEnsembleModel
|
149
|
+
params["device"] = "cuda:0"
|
150
|
+
if "tree_method" not in params:
|
148
151
|
params["tree_method"] = "hist"
|
149
152
|
|
150
153
|
try_import_xgboost()
|
@@ -0,0 +1,476 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import copy
|
4
|
+
import os
|
5
|
+
import pandas as pd
|
6
|
+
import shutil
|
7
|
+
import uuid
|
8
|
+
from typing import Any, Type
|
9
|
+
|
10
|
+
from autogluon.common.utils.path_converter import PathConverter
|
11
|
+
from autogluon.core.constants import BINARY, MULTICLASS, REGRESSION
|
12
|
+
from autogluon.core.metrics import METRICS
|
13
|
+
from autogluon.core.models import AbstractModel, BaggedEnsembleModel
|
14
|
+
from autogluon.core.stacked_overfitting.utils import check_stacked_overfitting_from_leaderboard
|
15
|
+
from autogluon.core.utils import download, generate_train_test_split_combined, infer_problem_type, unzip
|
16
|
+
|
17
|
+
from autogluon.tabular import TabularDataset, TabularPredictor
|
18
|
+
from autogluon.tabular.testing.generate_datasets import (
|
19
|
+
generate_toy_binary_dataset,
|
20
|
+
generate_toy_binary_10_dataset,
|
21
|
+
generate_toy_multiclass_dataset,
|
22
|
+
generate_toy_regression_dataset,
|
23
|
+
generate_toy_quantile_dataset,
|
24
|
+
generate_toy_multiclass_10_dataset,
|
25
|
+
generate_toy_regression_10_dataset,
|
26
|
+
generate_toy_quantile_10_dataset,
|
27
|
+
generate_toy_multiclass_30_dataset,
|
28
|
+
)
|
29
|
+
|
30
|
+
|
31
|
+
class DatasetLoaderHelper:
|
32
|
+
dataset_info_dict = dict(
|
33
|
+
# Binary dataset
|
34
|
+
adult={
|
35
|
+
"url": "https://autogluon.s3.amazonaws.com/datasets/AdultIncomeBinaryClassification.zip",
|
36
|
+
"name": "AdultIncomeBinaryClassification",
|
37
|
+
"problem_type": BINARY,
|
38
|
+
"label": "class",
|
39
|
+
},
|
40
|
+
# Multiclass big dataset with 7 classes, all features are numeric. Runs SLOW.
|
41
|
+
covertype={
|
42
|
+
"url": "https://autogluon.s3.amazonaws.com/datasets/CoverTypeMulticlassClassification.zip",
|
43
|
+
"name": "CoverTypeMulticlassClassification",
|
44
|
+
"problem_type": MULTICLASS,
|
45
|
+
"label": "Cover_Type",
|
46
|
+
},
|
47
|
+
# Subset of covertype dataset with 3k train/test rows. Ratio of labels is preserved.
|
48
|
+
covertype_small={
|
49
|
+
"url": "https://autogluon.s3.amazonaws.com/datasets/CoverTypeMulticlassClassificationSmall.zip",
|
50
|
+
"name": "CoverTypeMulticlassClassificationSmall",
|
51
|
+
"problem_type": MULTICLASS,
|
52
|
+
"label": "Cover_Type",
|
53
|
+
},
|
54
|
+
# Regression with mixed feature-types, skewed Y-values.
|
55
|
+
ames={
|
56
|
+
"url": "https://autogluon.s3.amazonaws.com/datasets/AmesHousingPriceRegression.zip",
|
57
|
+
"name": "AmesHousingPriceRegression",
|
58
|
+
"problem_type": REGRESSION,
|
59
|
+
"label": "SalePrice",
|
60
|
+
},
|
61
|
+
# Regression with multiple text field and categorical
|
62
|
+
sts={
|
63
|
+
"url": "https://autogluon-text.s3.amazonaws.com/glue_sts.zip",
|
64
|
+
"name": "glue_sts",
|
65
|
+
"problem_type": REGRESSION,
|
66
|
+
"label": "score",
|
67
|
+
},
|
68
|
+
)
|
69
|
+
|
70
|
+
toy_map = dict(
|
71
|
+
toy_binary=generate_toy_binary_dataset,
|
72
|
+
toy_multiclass=generate_toy_multiclass_dataset,
|
73
|
+
toy_regression=generate_toy_regression_dataset,
|
74
|
+
toy_quantile=generate_toy_quantile_dataset,
|
75
|
+
toy_binary_10=generate_toy_binary_10_dataset,
|
76
|
+
toy_multiclass_10=generate_toy_multiclass_10_dataset,
|
77
|
+
toy_regression_10=generate_toy_regression_10_dataset,
|
78
|
+
toy_quantile_10=generate_toy_quantile_10_dataset,
|
79
|
+
toy_multiclass_30=generate_toy_multiclass_30_dataset,
|
80
|
+
)
|
81
|
+
|
82
|
+
@staticmethod
|
83
|
+
def load_dataset(name: str, directory_prefix: str = "./datasets/") -> tuple[pd.DataFrame, pd.DataFrame, dict]:
|
84
|
+
if name in DatasetLoaderHelper.toy_map:
|
85
|
+
return DatasetLoaderHelper.toy_map[name]()
|
86
|
+
dataset_info = copy.deepcopy(DatasetLoaderHelper.dataset_info_dict[name])
|
87
|
+
train_file = dataset_info.pop("train_file", "train_data.csv")
|
88
|
+
test_file = dataset_info.pop("test_file", "test_data.csv")
|
89
|
+
name_inner = dataset_info.pop("name")
|
90
|
+
url = dataset_info.pop("url", None)
|
91
|
+
train_data, test_data = DatasetLoaderHelper.load_data(
|
92
|
+
directory_prefix=directory_prefix,
|
93
|
+
train_file=train_file,
|
94
|
+
test_file=test_file,
|
95
|
+
name=name_inner,
|
96
|
+
url=url,
|
97
|
+
)
|
98
|
+
|
99
|
+
return train_data, test_data, dataset_info
|
100
|
+
|
101
|
+
# TODO: Refactor this eventually, this is old code from 2019 that can be improved (use consistent local path for datasets, don't assume zip files, etc.)
|
102
|
+
@staticmethod
|
103
|
+
def load_data(
|
104
|
+
directory_prefix: str,
|
105
|
+
train_file: str,
|
106
|
+
test_file: str,
|
107
|
+
name: str,
|
108
|
+
url: str | None = None,
|
109
|
+
) -> tuple[pd.DataFrame, pd.DataFrame]:
|
110
|
+
"""
|
111
|
+
Will check if files exist locally for:
|
112
|
+
directory_prefix/name/train_file
|
113
|
+
directory_prefix/name/test_file
|
114
|
+
If either don't exist, then download the files from the `url` location.
|
115
|
+
Then, load both train and test data and return them.
|
116
|
+
|
117
|
+
Parameters
|
118
|
+
----------
|
119
|
+
directory_prefix
|
120
|
+
train_file
|
121
|
+
test_file
|
122
|
+
name
|
123
|
+
url
|
124
|
+
|
125
|
+
Returns
|
126
|
+
-------
|
127
|
+
train_data: pd.DataFrame
|
128
|
+
test_data: pd.DataFrame
|
129
|
+
"""
|
130
|
+
if not os.path.exists(directory_prefix):
|
131
|
+
os.mkdir(directory_prefix)
|
132
|
+
directory = directory_prefix + name + "/"
|
133
|
+
train_file_path = directory + train_file
|
134
|
+
test_file_path = directory + test_file
|
135
|
+
if (not os.path.exists(train_file_path)) or (not os.path.exists(test_file_path)):
|
136
|
+
# fetch files from s3:
|
137
|
+
print("%s data not found locally, so fetching from %s" % (name, url))
|
138
|
+
zip_name = download(url, directory_prefix)
|
139
|
+
unzip(zip_name, directory_prefix)
|
140
|
+
os.remove(zip_name)
|
141
|
+
|
142
|
+
train_data = TabularDataset(train_file_path)
|
143
|
+
test_data = TabularDataset(test_file_path)
|
144
|
+
return train_data, test_data
|
145
|
+
|
146
|
+
|
147
|
+
class FitHelper:
|
148
|
+
"""
|
149
|
+
Helper functions to test and verify predictors and models when fit through TabularPredictor's API.
|
150
|
+
"""
|
151
|
+
@staticmethod
|
152
|
+
def fit_and_validate_dataset(
|
153
|
+
dataset_name: str,
|
154
|
+
fit_args: dict[str, Any],
|
155
|
+
init_args: dict[str, Any] | None = None,
|
156
|
+
sample_size: int | None = 1000, # FIXME: default to None
|
157
|
+
refit_full: bool = True,
|
158
|
+
delete_directory: bool = True,
|
159
|
+
extra_metrics: list[str] | None = None,
|
160
|
+
extra_info: bool = False,
|
161
|
+
predictor_info: bool = False,
|
162
|
+
expected_model_count: int | None = 2,
|
163
|
+
fit_weighted_ensemble: bool = True,
|
164
|
+
min_cls_count_train: int = 1,
|
165
|
+
path_as_absolute: bool = False,
|
166
|
+
compile: bool = False,
|
167
|
+
compiler_configs: dict | None = None,
|
168
|
+
allowed_dataset_features: list[str] | None = None,
|
169
|
+
expected_stacked_overfitting_at_test: bool | None = None,
|
170
|
+
expected_stacked_overfitting_at_val: bool | None = None,
|
171
|
+
scikit_api: bool = False,
|
172
|
+
use_test_data: bool = False,
|
173
|
+
use_test_for_val: bool = False,
|
174
|
+
raise_on_model_failure: bool | None = None,
|
175
|
+
deepcopy_fit_args: bool = True,
|
176
|
+
) -> TabularPredictor:
|
177
|
+
if compiler_configs is None:
|
178
|
+
compiler_configs = {}
|
179
|
+
directory_prefix = "./datasets/"
|
180
|
+
train_data, test_data, dataset_info = DatasetLoaderHelper.load_dataset(name=dataset_name, directory_prefix=directory_prefix)
|
181
|
+
label = dataset_info["label"]
|
182
|
+
problem_type = dataset_info["problem_type"]
|
183
|
+
_init_args = dict(
|
184
|
+
label=label,
|
185
|
+
problem_type=problem_type,
|
186
|
+
)
|
187
|
+
if "init_kwargs" in dataset_info:
|
188
|
+
_init_args.update(dataset_info["init_kwargs"])
|
189
|
+
if allowed_dataset_features is not None:
|
190
|
+
train_data = train_data[allowed_dataset_features + [label]]
|
191
|
+
test_data = test_data[allowed_dataset_features + [label]]
|
192
|
+
|
193
|
+
if init_args is None:
|
194
|
+
init_args = _init_args
|
195
|
+
else:
|
196
|
+
init_args = copy.deepcopy(init_args)
|
197
|
+
_init_args.update(init_args)
|
198
|
+
init_args = _init_args
|
199
|
+
if "path" not in init_args:
|
200
|
+
init_args["path"] = os.path.join(directory_prefix, dataset_name, f"AutogluonOutput_{uuid.uuid4()}")
|
201
|
+
if path_as_absolute:
|
202
|
+
init_args["path"] = PathConverter.to_absolute(path=init_args["path"])
|
203
|
+
assert PathConverter._is_absolute(path=init_args["path"])
|
204
|
+
save_path = init_args["path"]
|
205
|
+
|
206
|
+
if deepcopy_fit_args:
|
207
|
+
fit_args = copy.deepcopy(fit_args)
|
208
|
+
if use_test_data:
|
209
|
+
fit_args["test_data"] = test_data
|
210
|
+
if use_test_for_val:
|
211
|
+
fit_args["tuning_data"] = test_data
|
212
|
+
if raise_on_model_failure is not None and "raise_on_model_failure" not in fit_args:
|
213
|
+
fit_args["raise_on_model_failure"] = raise_on_model_failure
|
214
|
+
if "fit_weighted_ensemble" not in fit_args:
|
215
|
+
if not fit_weighted_ensemble and expected_model_count is not None:
|
216
|
+
expected_model_count -= 1
|
217
|
+
fit_args["fit_weighted_ensemble"] = fit_weighted_ensemble
|
218
|
+
|
219
|
+
predictor: TabularPredictor = FitHelper.fit_dataset(
|
220
|
+
train_data=train_data,
|
221
|
+
init_args=init_args,
|
222
|
+
fit_args=fit_args,
|
223
|
+
sample_size=sample_size,
|
224
|
+
scikit_api=scikit_api,
|
225
|
+
min_cls_count_train=min_cls_count_train,
|
226
|
+
)
|
227
|
+
if compile:
|
228
|
+
predictor.compile(models="all", compiler_configs=compiler_configs)
|
229
|
+
predictor.persist(models="all")
|
230
|
+
if sample_size is not None and sample_size < len(test_data):
|
231
|
+
test_data = test_data.sample(n=sample_size, random_state=0)
|
232
|
+
predictor.predict(test_data)
|
233
|
+
predictor.evaluate(test_data)
|
234
|
+
|
235
|
+
if predictor.can_predict_proba:
|
236
|
+
pred_proba = predictor.predict_proba(test_data)
|
237
|
+
predictor.evaluate_predictions(y_true=test_data[label], y_pred=pred_proba)
|
238
|
+
else:
|
239
|
+
try:
|
240
|
+
predictor.predict_proba(test_data)
|
241
|
+
except AssertionError:
|
242
|
+
pass # expected
|
243
|
+
else:
|
244
|
+
raise AssertionError("Expected `predict_proba` to raise AssertionError, but it didn't!")
|
245
|
+
|
246
|
+
model_names = predictor.model_names()
|
247
|
+
model_name = model_names[0]
|
248
|
+
if expected_model_count is not None:
|
249
|
+
assert len(model_names) == expected_model_count
|
250
|
+
if refit_full:
|
251
|
+
refit_model_names = predictor.refit_full()
|
252
|
+
if expected_model_count is not None:
|
253
|
+
assert len(refit_model_names) == expected_model_count
|
254
|
+
refit_model_name = refit_model_names[model_name]
|
255
|
+
assert "_FULL" in refit_model_name
|
256
|
+
predictor.predict(test_data, model=refit_model_name)
|
257
|
+
if predictor.can_predict_proba:
|
258
|
+
predictor.predict_proba(test_data, model=refit_model_name)
|
259
|
+
|
260
|
+
# verify that val_in_fit is False if the model supports refit_full
|
261
|
+
model = predictor._trainer.load_model(refit_model_name)
|
262
|
+
if isinstance(model, BaggedEnsembleModel):
|
263
|
+
model = model.load_child(model.models[0])
|
264
|
+
model_info = model.get_info()
|
265
|
+
can_refit_full = model._get_tags()["can_refit_full"]
|
266
|
+
if can_refit_full:
|
267
|
+
assert not model_info["val_in_fit"], f"val data must not be present in refit model if `can_refit_full=True`. Maybe an exception occurred?"
|
268
|
+
else:
|
269
|
+
assert model_info["val_in_fit"], f"val data must be present in refit model if `can_refit_full=False`"
|
270
|
+
|
271
|
+
if predictor_info:
|
272
|
+
predictor.info()
|
273
|
+
lb_kwargs = {}
|
274
|
+
if extra_info:
|
275
|
+
lb_kwargs["extra_info"] = True
|
276
|
+
lb = predictor.leaderboard(test_data, extra_metrics=extra_metrics, **lb_kwargs)
|
277
|
+
stacked_overfitting_assert(lb, predictor, expected_stacked_overfitting_at_val, expected_stacked_overfitting_at_test)
|
278
|
+
|
279
|
+
predictor_load = predictor.load(path=predictor.path)
|
280
|
+
predictor_load.predict(test_data)
|
281
|
+
|
282
|
+
assert os.path.realpath(save_path) == os.path.realpath(predictor.path)
|
283
|
+
if delete_directory:
|
284
|
+
shutil.rmtree(save_path, ignore_errors=True) # Delete AutoGluon output directory to ensure runs' information has been removed.
|
285
|
+
return predictor
|
286
|
+
|
287
|
+
@staticmethod
|
288
|
+
def load_dataset(name: str, directory_prefix: str = "./datasets/") -> tuple[pd.DataFrame, pd.DataFrame, dict]:
|
289
|
+
return DatasetLoaderHelper.load_dataset(name=name, directory_prefix=directory_prefix)
|
290
|
+
|
291
|
+
@staticmethod
|
292
|
+
def fit_dataset(
|
293
|
+
train_data: pd.DataFrame,
|
294
|
+
init_args: dict[str, Any],
|
295
|
+
fit_args: dict[str, Any],
|
296
|
+
sample_size: int | None = None,
|
297
|
+
min_cls_count_train: int = 1,
|
298
|
+
scikit_api: bool = False,
|
299
|
+
) -> TabularPredictor:
|
300
|
+
if "problem_type" in init_args:
|
301
|
+
problem_type = init_args["problem_type"]
|
302
|
+
else:
|
303
|
+
problem_type = infer_problem_type(train_data[init_args["label"]])
|
304
|
+
|
305
|
+
if sample_size is not None and sample_size < len(train_data):
|
306
|
+
train_data, _ = generate_train_test_split_combined(
|
307
|
+
data=train_data,
|
308
|
+
label=init_args["label"],
|
309
|
+
problem_type=problem_type,
|
310
|
+
test_size=len(train_data) - sample_size,
|
311
|
+
min_cls_count_train=min_cls_count_train,
|
312
|
+
)
|
313
|
+
|
314
|
+
if scikit_api:
|
315
|
+
from autogluon.tabular.experimental import TabularClassifier, TabularRegressor
|
316
|
+
|
317
|
+
X = train_data.drop(columns=[init_args["label"]])
|
318
|
+
y = train_data[init_args["label"]]
|
319
|
+
if problem_type in [REGRESSION]:
|
320
|
+
regressor = TabularRegressor(init_args=init_args, fit_args=fit_args)
|
321
|
+
regressor.fit(X, y)
|
322
|
+
return regressor.predictor_
|
323
|
+
else:
|
324
|
+
classifier = TabularClassifier(init_args=init_args, fit_args=fit_args)
|
325
|
+
classifier.fit(X, y)
|
326
|
+
return classifier.predictor_
|
327
|
+
else:
|
328
|
+
return TabularPredictor(**init_args).fit(train_data, **fit_args)
|
329
|
+
|
330
|
+
@staticmethod
|
331
|
+
def verify_model(
|
332
|
+
model_cls: Type[AbstractModel],
|
333
|
+
model_hyperparameters: dict[str, Any],
|
334
|
+
bag: bool | str = "first",
|
335
|
+
refit_full: bool | str = "first",
|
336
|
+
extra_metrics: bool = False,
|
337
|
+
require_known_problem_types: bool = True,
|
338
|
+
raise_on_model_failure: bool = True,
|
339
|
+
problem_types: list[str] | None = None,
|
340
|
+
**kwargs,
|
341
|
+
):
|
342
|
+
"""
|
343
|
+
|
344
|
+
Parameters
|
345
|
+
----------
|
346
|
+
model_cls
|
347
|
+
model_hyperparameters
|
348
|
+
bag
|
349
|
+
refit_full
|
350
|
+
extra_metrics
|
351
|
+
require_known_problem_types
|
352
|
+
raise_on_model_failure
|
353
|
+
problem_types: list[str], optional
|
354
|
+
If specified, checks the given problem_types.
|
355
|
+
If None, checks `model_cls.supported_problem_types()`
|
356
|
+
**kwargs
|
357
|
+
|
358
|
+
Returns
|
359
|
+
-------
|
360
|
+
|
361
|
+
"""
|
362
|
+
fit_args = dict(
|
363
|
+
hyperparameters={model_cls: model_hyperparameters},
|
364
|
+
)
|
365
|
+
supported_problem_types = model_cls.supported_problem_types()
|
366
|
+
if supported_problem_types is None:
|
367
|
+
raise AssertionError(
|
368
|
+
f"Model must specify `cls.supported_problem_types`"
|
369
|
+
f"""\nExample code:
|
370
|
+
@classmethod
|
371
|
+
def supported_problem_types(cls) -> list[str] | None:
|
372
|
+
return ["binary", "multiclass", "regression", "quantile"]
|
373
|
+
"""
|
374
|
+
)
|
375
|
+
assert isinstance(supported_problem_types, list)
|
376
|
+
assert len(supported_problem_types) > 0
|
377
|
+
|
378
|
+
known_problem_types = [
|
379
|
+
"binary",
|
380
|
+
"multiclass",
|
381
|
+
"regression",
|
382
|
+
"quantile",
|
383
|
+
"softclass",
|
384
|
+
]
|
385
|
+
|
386
|
+
if require_known_problem_types:
|
387
|
+
for problem_type in supported_problem_types:
|
388
|
+
if problem_type not in known_problem_types:
|
389
|
+
raise AssertionError(
|
390
|
+
f"Model {model_cls.__name__} supports an unknown problem_type: {problem_type}"
|
391
|
+
f"\nKnown problem types: {known_problem_types}"
|
392
|
+
f"\nEither remove the unknown problem_type from `model_cls.supported_problem_types` or set `require_known_problem_types=False`"
|
393
|
+
)
|
394
|
+
|
395
|
+
problem_type_dataset_map = {
|
396
|
+
"binary": "toy_binary",
|
397
|
+
"multiclass": "toy_multiclass",
|
398
|
+
"regression": "toy_regression",
|
399
|
+
"quantile": "toy_quantile",
|
400
|
+
}
|
401
|
+
|
402
|
+
problem_types_refit_full = []
|
403
|
+
if refit_full:
|
404
|
+
if isinstance(refit_full, bool):
|
405
|
+
problem_types_refit_full = supported_problem_types
|
406
|
+
elif refit_full == "first":
|
407
|
+
problem_types_refit_full = supported_problem_types[:1]
|
408
|
+
|
409
|
+
if problem_types is None:
|
410
|
+
problem_types_to_check = supported_problem_types
|
411
|
+
else:
|
412
|
+
problem_types_to_check = problem_types
|
413
|
+
|
414
|
+
for problem_type in problem_types_to_check:
|
415
|
+
if problem_type not in problem_type_dataset_map:
|
416
|
+
print(f"WARNING: Skipping check on problem_type='{problem_type}': No dataset available")
|
417
|
+
continue
|
418
|
+
_extra_metrics = None
|
419
|
+
if extra_metrics:
|
420
|
+
_extra_metrics = METRICS.get(problem_type, None)
|
421
|
+
refit_full = problem_type in problem_types_refit_full
|
422
|
+
dataset_name = problem_type_dataset_map[problem_type]
|
423
|
+
FitHelper.fit_and_validate_dataset(
|
424
|
+
dataset_name=dataset_name,
|
425
|
+
fit_args=fit_args,
|
426
|
+
fit_weighted_ensemble=False,
|
427
|
+
refit_full=refit_full,
|
428
|
+
extra_metrics=_extra_metrics,
|
429
|
+
raise_on_model_failure=raise_on_model_failure,
|
430
|
+
**kwargs,
|
431
|
+
)
|
432
|
+
|
433
|
+
if bag:
|
434
|
+
model_params_bag = copy.deepcopy(model_hyperparameters)
|
435
|
+
model_params_bag["ag_args_ensemble"] = {"fold_fitting_strategy": "sequential_local"}
|
436
|
+
fit_args_bag = dict(
|
437
|
+
hyperparameters={model_cls: model_params_bag},
|
438
|
+
num_bag_folds=2,
|
439
|
+
num_bag_sets=1,
|
440
|
+
)
|
441
|
+
if isinstance(bag, bool):
|
442
|
+
problem_types_bag = supported_problem_types
|
443
|
+
elif bag == "first":
|
444
|
+
problem_types_bag = supported_problem_types[:1]
|
445
|
+
else:
|
446
|
+
raise ValueError(f"Unknown 'bag' value: {bag}")
|
447
|
+
|
448
|
+
for problem_type in problem_types_bag:
|
449
|
+
_extra_metrics = None
|
450
|
+
if extra_metrics:
|
451
|
+
_extra_metrics = METRICS.get(problem_type, None)
|
452
|
+
refit_full = problem_type in problem_types_refit_full
|
453
|
+
dataset_name = problem_type_dataset_map[problem_type]
|
454
|
+
FitHelper.fit_and_validate_dataset(
|
455
|
+
dataset_name=dataset_name,
|
456
|
+
fit_args=fit_args_bag,
|
457
|
+
fit_weighted_ensemble=False,
|
458
|
+
refit_full=refit_full,
|
459
|
+
extra_metrics=_extra_metrics,
|
460
|
+
raise_on_model_failure=raise_on_model_failure,
|
461
|
+
**kwargs,
|
462
|
+
)
|
463
|
+
|
464
|
+
|
465
|
+
def stacked_overfitting_assert(
|
466
|
+
lb: pd.DataFrame,
|
467
|
+
predictor: TabularPredictor,
|
468
|
+
expected_stacked_overfitting_at_val: bool | None,
|
469
|
+
expected_stacked_overfitting_at_test: bool | None,
|
470
|
+
):
|
471
|
+
if expected_stacked_overfitting_at_val is not None:
|
472
|
+
assert predictor._stacked_overfitting_occurred == expected_stacked_overfitting_at_val, "Expected stacked overfitting at val mismatch!"
|
473
|
+
|
474
|
+
if expected_stacked_overfitting_at_test is not None:
|
475
|
+
stacked_overfitting = check_stacked_overfitting_from_leaderboard(lb)
|
476
|
+
assert stacked_overfitting == expected_stacked_overfitting_at_test, "Expected stacked overfitting at test mismatch!"
|
@@ -0,0 +1,141 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import pandas as pd
|
4
|
+
from sklearn.datasets import make_blobs
|
5
|
+
|
6
|
+
from autogluon.core.constants import BINARY, MULTICLASS, REGRESSION, QUANTILE
|
7
|
+
|
8
|
+
|
9
|
+
def generate_toy_binary_dataset():
|
10
|
+
label = "label"
|
11
|
+
dummy_dataset = {
|
12
|
+
"int": [0, 1, 2, 3],
|
13
|
+
label: [0, 0, 1, 1],
|
14
|
+
}
|
15
|
+
|
16
|
+
dataset_info = {
|
17
|
+
"problem_type": BINARY,
|
18
|
+
"label": label,
|
19
|
+
}
|
20
|
+
|
21
|
+
train_data = pd.DataFrame(dummy_dataset)
|
22
|
+
test_data = train_data
|
23
|
+
return train_data, test_data, dataset_info
|
24
|
+
|
25
|
+
|
26
|
+
def generate_toy_multiclass_dataset():
|
27
|
+
label = "label"
|
28
|
+
dummy_dataset = {
|
29
|
+
"int": [0, 1, 2, 3, 4, 5],
|
30
|
+
label: [0, 0, 1, 1, 2, 2],
|
31
|
+
}
|
32
|
+
|
33
|
+
dataset_info = {
|
34
|
+
"problem_type": MULTICLASS,
|
35
|
+
"label": label,
|
36
|
+
}
|
37
|
+
|
38
|
+
train_data = pd.DataFrame(dummy_dataset)
|
39
|
+
test_data = train_data
|
40
|
+
return train_data, test_data, dataset_info
|
41
|
+
|
42
|
+
|
43
|
+
def generate_toy_regression_dataset():
|
44
|
+
label = "label"
|
45
|
+
dummy_dataset = {
|
46
|
+
"int": [0, 1, 2, 3],
|
47
|
+
label: [0.1, 0.9, 1.1, 1.9],
|
48
|
+
}
|
49
|
+
|
50
|
+
dataset_info = {
|
51
|
+
"problem_type": REGRESSION,
|
52
|
+
"label": label,
|
53
|
+
}
|
54
|
+
|
55
|
+
train_data = pd.DataFrame(dummy_dataset)
|
56
|
+
test_data = train_data
|
57
|
+
return train_data, test_data, dataset_info
|
58
|
+
|
59
|
+
|
60
|
+
def generate_toy_quantile_dataset():
|
61
|
+
train_data, test_data, dataset_info = generate_toy_regression_dataset()
|
62
|
+
dataset_info["problem_type"] = QUANTILE
|
63
|
+
dataset_info["init_kwargs"] = {"quantile_levels": [0.25, 0.5, 0.75]}
|
64
|
+
return train_data, test_data, dataset_info
|
65
|
+
|
66
|
+
|
67
|
+
def generate_toy_binary_10_dataset():
|
68
|
+
label = "label"
|
69
|
+
dummy_dataset = {
|
70
|
+
"int": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
71
|
+
label: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0],
|
72
|
+
}
|
73
|
+
|
74
|
+
dataset_info = {
|
75
|
+
"problem_type": BINARY,
|
76
|
+
"label": label,
|
77
|
+
}
|
78
|
+
|
79
|
+
train_data = pd.DataFrame(dummy_dataset)
|
80
|
+
test_data = train_data
|
81
|
+
return train_data, test_data, dataset_info
|
82
|
+
|
83
|
+
|
84
|
+
def generate_toy_multiclass_10_dataset():
|
85
|
+
label = "label"
|
86
|
+
dummy_dataset = {
|
87
|
+
"int": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
88
|
+
label: [0, 0, 1, 1, 2, 2, 0, 0, 1, 1],
|
89
|
+
}
|
90
|
+
|
91
|
+
dataset_info = {
|
92
|
+
"problem_type": MULTICLASS,
|
93
|
+
"label": label,
|
94
|
+
}
|
95
|
+
|
96
|
+
train_data = pd.DataFrame(dummy_dataset)
|
97
|
+
test_data = train_data
|
98
|
+
return train_data, test_data, dataset_info
|
99
|
+
|
100
|
+
|
101
|
+
def generate_toy_regression_10_dataset():
|
102
|
+
label = "label"
|
103
|
+
dummy_dataset = {
|
104
|
+
"int": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
105
|
+
label: [0.1, 0.9, 1.1, 1.9, 0.2, 0.8, 1.2, 1.8, -0.1, 0.7],
|
106
|
+
}
|
107
|
+
|
108
|
+
dataset_info = {
|
109
|
+
"problem_type": REGRESSION,
|
110
|
+
"label": label,
|
111
|
+
}
|
112
|
+
|
113
|
+
train_data = pd.DataFrame(dummy_dataset)
|
114
|
+
test_data = train_data
|
115
|
+
return train_data, test_data, dataset_info
|
116
|
+
|
117
|
+
|
118
|
+
def generate_toy_quantile_10_dataset():
|
119
|
+
train_data, test_data, dataset_info = generate_toy_regression_10_dataset()
|
120
|
+
dataset_info["problem_type"] = QUANTILE
|
121
|
+
dataset_info["init_kwargs"] = {"quantile_levels": [0.25, 0.5, 0.75]}
|
122
|
+
return train_data, test_data, dataset_info
|
123
|
+
|
124
|
+
|
125
|
+
def generate_toy_multiclass_30_dataset():
|
126
|
+
label = "label"
|
127
|
+
train_data = generate_toy_multiclass_n_dataset(n_samples=30, n_features=2, n_classes=3)
|
128
|
+
test_data = train_data
|
129
|
+
|
130
|
+
dataset_info = {
|
131
|
+
"problem_type": MULTICLASS,
|
132
|
+
"label": label,
|
133
|
+
}
|
134
|
+
return train_data, test_data, dataset_info
|
135
|
+
|
136
|
+
|
137
|
+
def generate_toy_multiclass_n_dataset(n_samples, n_features, n_classes) -> pd.DataFrame:
|
138
|
+
X, y = make_blobs(centers=n_classes, n_samples=n_samples, n_features=n_features, cluster_std=0.5, random_state=0)
|
139
|
+
data = pd.DataFrame(X)
|
140
|
+
data["label"] = y
|
141
|
+
return data
|
@@ -0,0 +1,86 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import Tuple
|
4
|
+
|
5
|
+
import numpy as np
|
6
|
+
import pandas as pd
|
7
|
+
|
8
|
+
from autogluon.core.data.label_cleaner import LabelCleaner
|
9
|
+
from autogluon.core.models import AbstractModel, BaggedEnsembleModel
|
10
|
+
from autogluon.core.utils import generate_train_test_split, infer_problem_type
|
11
|
+
from autogluon.features.generators import AbstractFeatureGenerator, AutoMLPipelineFeatureGenerator
|
12
|
+
|
13
|
+
from autogluon.tabular.testing.fit_helper import FitHelper
|
14
|
+
|
15
|
+
|
16
|
+
# Helper functions for training models outside of predictors
|
17
|
+
class ModelFitHelper:
|
18
|
+
"""
|
19
|
+
Helper functions to test and verify models when fit outside TabularPredictor's API (aka as stand-alone models)
|
20
|
+
"""
|
21
|
+
@staticmethod
|
22
|
+
def fit_and_validate_dataset(
|
23
|
+
dataset_name: str,
|
24
|
+
model: AbstractModel,
|
25
|
+
fit_args: dict,
|
26
|
+
sample_size: int = 1000,
|
27
|
+
check_predict_children: bool = False,
|
28
|
+
) -> AbstractModel:
|
29
|
+
directory_prefix = "./datasets/"
|
30
|
+
train_data, test_data, dataset_info = FitHelper.load_dataset(name=dataset_name, directory_prefix=directory_prefix)
|
31
|
+
label = dataset_info["label"]
|
32
|
+
model, label_cleaner, feature_generator = ModelFitHelper.fit_dataset(
|
33
|
+
train_data=train_data, model=model, label=label, fit_args=fit_args, sample_size=sample_size
|
34
|
+
)
|
35
|
+
if sample_size is not None and sample_size < len(test_data):
|
36
|
+
test_data = test_data.sample(n=sample_size, random_state=0)
|
37
|
+
|
38
|
+
X_test = test_data.drop(columns=[label])
|
39
|
+
X_test = feature_generator.transform(X_test)
|
40
|
+
|
41
|
+
y_pred = model.predict(X_test)
|
42
|
+
assert isinstance(y_pred, np.ndarray), f"Expected np.ndarray as model.predict(X_test) output. Got: {y_pred.__class__}"
|
43
|
+
|
44
|
+
y_pred_proba = model.predict_proba(X_test)
|
45
|
+
assert isinstance(y_pred_proba, np.ndarray), f"Expected np.ndarray as model.predict_proba(X_test) output. Got: {y_pred.__class__}"
|
46
|
+
model.get_info()
|
47
|
+
|
48
|
+
if check_predict_children:
|
49
|
+
assert isinstance(model, BaggedEnsembleModel)
|
50
|
+
y_pred_children = model.predict_children(X_test)
|
51
|
+
assert len(y_pred_children) == model.n_children
|
52
|
+
if model.can_predict_proba:
|
53
|
+
y_pred_proba_children = model.predict_proba_children(X_test)
|
54
|
+
assert len(y_pred_proba_children) == model.n_children
|
55
|
+
y_pred_proba_from_children = np.mean(y_pred_proba_children, axis=0)
|
56
|
+
assert np.isclose(y_pred_proba_from_children, y_pred_proba).all()
|
57
|
+
|
58
|
+
for y_pred_proba_child, y_pred_child in zip(y_pred_proba_children, y_pred_children):
|
59
|
+
y_pred_child_from_proba = model.predict_from_proba(y_pred_proba=y_pred_proba_child)
|
60
|
+
assert np.isclose(y_pred_child_from_proba, y_pred_child).all()
|
61
|
+
|
62
|
+
return model
|
63
|
+
|
64
|
+
@staticmethod
|
65
|
+
def fit_dataset(
|
66
|
+
train_data: pd.DataFrame,
|
67
|
+
model: AbstractModel,
|
68
|
+
label: str,
|
69
|
+
fit_args: dict,
|
70
|
+
sample_size: int = None,
|
71
|
+
) -> Tuple[AbstractModel, LabelCleaner, AbstractFeatureGenerator]:
|
72
|
+
if sample_size is not None and sample_size < len(train_data):
|
73
|
+
train_data = train_data.sample(n=sample_size, random_state=0)
|
74
|
+
X = train_data.drop(columns=[label])
|
75
|
+
y = train_data[label]
|
76
|
+
|
77
|
+
problem_type = infer_problem_type(y)
|
78
|
+
label_cleaner = LabelCleaner.construct(problem_type=problem_type, y=y)
|
79
|
+
y = label_cleaner.transform(y)
|
80
|
+
feature_generator = AutoMLPipelineFeatureGenerator()
|
81
|
+
X = feature_generator.fit_transform(X, y)
|
82
|
+
|
83
|
+
X, X_val, y, y_val = generate_train_test_split(X, y, problem_type=problem_type, test_size=0.2, random_state=0)
|
84
|
+
|
85
|
+
model.fit(X=X, y=y, X_val=X_val, y_val=y_val, **fit_args)
|
86
|
+
return model, label_cleaner, feature_generator
|
autogluon/tabular/version.py
CHANGED
{autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: autogluon.tabular
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.1b20250306
|
4
4
|
Summary: Fast and Accurate ML in 3 Lines of Code
|
5
5
|
Home-page: https://github.com/autogluon/autogluon
|
6
6
|
Author: AutoGluon Community
|
@@ -41,19 +41,19 @@ Requires-Dist: scipy<1.16,>=1.5.4
|
|
41
41
|
Requires-Dist: pandas<2.3.0,>=2.0.0
|
42
42
|
Requires-Dist: scikit-learn<1.5.3,>=1.4.0
|
43
43
|
Requires-Dist: networkx<4,>=3.0
|
44
|
-
Requires-Dist: autogluon.core==1.2.
|
45
|
-
Requires-Dist: autogluon.features==1.2.
|
44
|
+
Requires-Dist: autogluon.core==1.2.1b20250306
|
45
|
+
Requires-Dist: autogluon.features==1.2.1b20250306
|
46
46
|
Provides-Extra: all
|
47
|
-
Requires-Dist: catboost<1.3,>=1.2; extra == "all"
|
48
|
-
Requires-Dist: numpy<2.0.0,>=1.25; extra == "all"
|
49
|
-
Requires-Dist: lightgbm<4.6,>=4.0; extra == "all"
|
50
47
|
Requires-Dist: spacy<3.8; extra == "all"
|
51
|
-
Requires-Dist:
|
48
|
+
Requires-Dist: catboost<1.3,>=1.2; extra == "all"
|
49
|
+
Requires-Dist: torch<2.6,>=2.2; extra == "all"
|
52
50
|
Requires-Dist: fastai<2.8,>=2.3.1; extra == "all"
|
53
|
-
Requires-Dist: xgboost<2.2,>=1.6; extra == "all"
|
54
|
-
Requires-Dist: einops<0.9,>=0.7; extra == "all"
|
55
51
|
Requires-Dist: huggingface-hub[torch]; extra == "all"
|
56
|
-
Requires-Dist:
|
52
|
+
Requires-Dist: lightgbm<4.6,>=4.0; extra == "all"
|
53
|
+
Requires-Dist: autogluon.core[all]==1.2.1b20250306; extra == "all"
|
54
|
+
Requires-Dist: einops<0.9,>=0.7; extra == "all"
|
55
|
+
Requires-Dist: numpy<2.0.0,>=1.25; extra == "all"
|
56
|
+
Requires-Dist: xgboost<2.2,>=2.0; extra == "all"
|
57
57
|
Provides-Extra: catboost
|
58
58
|
Requires-Dist: numpy<2.0.0,>=1.25; extra == "catboost"
|
59
59
|
Requires-Dist: catboost<1.3,>=1.2; extra == "catboost"
|
@@ -66,7 +66,7 @@ Requires-Dist: imodels<1.4.0,>=1.3.10; extra == "imodels"
|
|
66
66
|
Provides-Extra: lightgbm
|
67
67
|
Requires-Dist: lightgbm<4.6,>=4.0; extra == "lightgbm"
|
68
68
|
Provides-Extra: ray
|
69
|
-
Requires-Dist: autogluon.core[all]==1.2.
|
69
|
+
Requires-Dist: autogluon.core[all]==1.2.1b20250306; extra == "ray"
|
70
70
|
Provides-Extra: skex
|
71
71
|
Requires-Dist: scikit-learn-intelex<2025.1,>=2024.0; extra == "skex"
|
72
72
|
Provides-Extra: skl2onnx
|
@@ -96,7 +96,7 @@ Requires-Dist: vowpalwabbit<9.10,>=9; (python_version < "3.11" and sys_platform
|
|
96
96
|
Provides-Extra: vowpalwabbit
|
97
97
|
Requires-Dist: vowpalwabbit<9.10,>=9; (python_version < "3.11" and sys_platform != "darwin") and extra == "vowpalwabbit"
|
98
98
|
Provides-Extra: xgboost
|
99
|
-
Requires-Dist: xgboost<2.2,>=
|
99
|
+
Requires-Dist: xgboost<2.2,>=2.0; extra == "xgboost"
|
100
100
|
|
101
101
|
|
102
102
|
|
{autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/RECORD
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
autogluon.tabular-1.2.
|
1
|
+
autogluon.tabular-1.2.1b20250306-py3.9-nspkg.pth,sha256=cQGwpuGPqg1GXscIwt-7PmME1OnSpD-7ixkikJ31WAY,554
|
2
2
|
autogluon/tabular/__init__.py,sha256=2OXpJCvENRHubBTYNIPpHX93WWuFZzsJBtTZbNVHVas,400
|
3
|
-
autogluon/tabular/version.py,sha256=
|
3
|
+
autogluon/tabular/version.py,sha256=vpLPQw8Tz1FiEFDl7STt_ZrtxXTVYzhhywUGcg_8Fec,91
|
4
4
|
autogluon/tabular/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
autogluon/tabular/configs/config_helper.py,sha256=Pb2aW9Z9w77pYKPRVZ3nBzHY3KJaiEJSJ747zZcJIVk,21132
|
6
6
|
autogluon/tabular/configs/feature_generator_presets.py,sha256=EV5Ym8VW15q92MwOUpTi7wZFS2QooM51fLg3RdUsn-M,1223
|
@@ -21,11 +21,11 @@ autogluon/tabular/models/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
21
21
|
autogluon/tabular/models/_utils/rapids_utils.py,sha256=gbej9Hjn4alCWZuGN9sOLXMMAyWbgHPThTsp2feS39o,1038
|
22
22
|
autogluon/tabular/models/_utils/torch_utils.py,sha256=dxs_KMMAOmNkRNjYf_hrzqaHIfkqn1xoKRKqCFbQ1Rk,537
|
23
23
|
autogluon/tabular/models/automm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
|
-
autogluon/tabular/models/automm/automm_model.py,sha256=
|
25
|
-
autogluon/tabular/models/automm/ft_transformer.py,sha256=
|
24
|
+
autogluon/tabular/models/automm/automm_model.py,sha256=GvrMBC8Z-zobalmSzX1iDHTYMmQ4Jp5hINJa_fSm-j8,11322
|
25
|
+
autogluon/tabular/models/automm/ft_transformer.py,sha256=yZ9-TTA4GbtutHhz0Djkrl-rIFNxc7A2LBOFOXYOxVY,3886
|
26
26
|
autogluon/tabular/models/catboost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
autogluon/tabular/models/catboost/callbacks.py,sha256=l8x17n_w7oEFs-iDECSdBKZ89yW5g1z-zvj4XLgQPkw,7098
|
28
|
-
autogluon/tabular/models/catboost/catboost_model.py,sha256=
|
28
|
+
autogluon/tabular/models/catboost/catboost_model.py,sha256=ApltUyLY0BUuS-Rb8z2_OgkAniXrm3Zlpd9FDZkRMjM,17416
|
29
29
|
autogluon/tabular/models/catboost/catboost_softclass_utils.py,sha256=UiW0SUb3hFueW5qYtQn6Sbk7Wg7BWN4jqKWeFtbMvgU,3919
|
30
30
|
autogluon/tabular/models/catboost/catboost_utils.py,sha256=YSc94V4DjrwbmkeUM8306zV7z21oq-K-qGCOj0UE_wg,3167
|
31
31
|
autogluon/tabular/models/catboost/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -41,16 +41,16 @@ autogluon/tabular/models/fastainn/hyperparameters/__init__.py,sha256=47DEQpj8HBS
|
|
41
41
|
autogluon/tabular/models/fastainn/hyperparameters/parameters.py,sha256=DkQwAZZ7CuODKoljr-yrkx-uFxBSPRxkKuvPdwO-UhQ,2069
|
42
42
|
autogluon/tabular/models/fastainn/hyperparameters/searchspaces.py,sha256=5qdknZDrHtdPdrhSqjamYQrCxvupXvlN3bVGEPgs48E,1660
|
43
43
|
autogluon/tabular/models/fasttext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
44
|
-
autogluon/tabular/models/fasttext/fasttext_model.py,sha256=
|
44
|
+
autogluon/tabular/models/fasttext/fasttext_model.py,sha256=Tiwe9qxWlJ7Z_HGsLApPP4bTyvUgJbbYNXk7ni7CP1o,7203
|
45
45
|
autogluon/tabular/models/fasttext/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
46
46
|
autogluon/tabular/models/fasttext/hyperparameters/parameters.py,sha256=DbkLlHlxRh1uGWJ_sUYNrweSJj4yjlOBH_H2COyaWL8,1234
|
47
47
|
autogluon/tabular/models/image_prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
autogluon/tabular/models/image_prediction/image_predictor.py,sha256=
|
48
|
+
autogluon/tabular/models/image_prediction/image_predictor.py,sha256=ZDW9vMEZtI5KOE2MDxGB9XDytpUum0DsjrfWEb4PE1Y,5620
|
49
49
|
autogluon/tabular/models/imodels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
-
autogluon/tabular/models/imodels/imodels_models.py,sha256=
|
50
|
+
autogluon/tabular/models/imodels/imodels_models.py,sha256=89uQwbRAtqcUvPwYsKnER8SUMIbwkGZUd9spoG_mP10,4878
|
51
51
|
autogluon/tabular/models/knn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
52
|
autogluon/tabular/models/knn/_knn_loo_variants.py,sha256=-n2znYS7OBA0bZvtei6JZiEMRWp4GX-Qp64uheaHyhQ,4562
|
53
|
-
autogluon/tabular/models/knn/knn_model.py,sha256=
|
53
|
+
autogluon/tabular/models/knn/knn_model.py,sha256=qZwBnDVPT2Fd5aDPZqcwugszeUYREm5nZ_-bHVVE3_s,13977
|
54
54
|
autogluon/tabular/models/knn/knn_rapids_model.py,sha256=0FFApNZFH8nyrDqlBSUV7jO-2fLe0-h_UHp1GsyQJ8E,1550
|
55
55
|
autogluon/tabular/models/knn/knn_utils.py,sha256=XU1cxVXp1BAoQnja2_KmSIn9_q9gZkjAya7-9b0uStk,7455
|
56
56
|
autogluon/tabular/models/lgb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -61,14 +61,14 @@ autogluon/tabular/models/lgb/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TI
|
|
61
61
|
autogluon/tabular/models/lgb/hyperparameters/parameters.py,sha256=LLEQ-Ns3HElWBsFJx3ogRV7L6qw_nXlcl7EyO0C0fVQ,1336
|
62
62
|
autogluon/tabular/models/lgb/hyperparameters/searchspaces.py,sha256=tvNNR7niWz_B-PndYQXb6vVNABxSfBYRHj6ZVQJ1x2E,1930
|
63
63
|
autogluon/tabular/models/lr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
64
|
-
autogluon/tabular/models/lr/lr_model.py,sha256=
|
64
|
+
autogluon/tabular/models/lr/lr_model.py,sha256=wTrrTWVwmlAyx4RAxhfXHbkvZTAVIvAiTadpEChGEzc,15599
|
65
65
|
autogluon/tabular/models/lr/lr_preprocessing_utils.py,sha256=zkmVZtv05BQPDasVBz1J8LmXEfLgoggsv57s6cXuTMQ,1094
|
66
66
|
autogluon/tabular/models/lr/lr_rapids_model.py,sha256=a07JvjWemrL0L08moA3K4lnYieukRlAdb2Z_uWA44k8,2127
|
67
67
|
autogluon/tabular/models/lr/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
68
|
autogluon/tabular/models/lr/hyperparameters/parameters.py,sha256=Hr5YC13zjbt3CfCbzGj8iXUIuDn-Q7FvDT2uSuiSVlM,1414
|
69
69
|
autogluon/tabular/models/lr/hyperparameters/searchspaces.py,sha256=Igywc-B6qJ9EBLdasrDhW-Ot5FGirIzbXLwv5HRe5Xo,276
|
70
70
|
autogluon/tabular/models/rf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
|
-
autogluon/tabular/models/rf/rf_model.py,sha256=
|
71
|
+
autogluon/tabular/models/rf/rf_model.py,sha256=MwhTUk9PknLgZWyT5bz_7DtjEW8ADU5wiBvlOjzVLkA,21529
|
72
72
|
autogluon/tabular/models/rf/rf_quantile.py,sha256=2S8FE8po9lMnZaeKuVkzOUFOcdil46ZbFqm49OuvNZY,36460
|
73
73
|
autogluon/tabular/models/rf/rf_rapids_model.py,sha256=3s-8M11dzCl_2Lu5iB3H8YjHLgyP_SElrm_4w_HfmqY,2028
|
74
74
|
autogluon/tabular/models/rf/compilers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -80,15 +80,15 @@ autogluon/tabular/models/tab_transformer/pretexts.py,sha256=UEoDq_8hLKbY7EbE5IyL
|
|
80
80
|
autogluon/tabular/models/tab_transformer/tab_model_base.py,sha256=4rmY1IrwoFuJejy-9gOoYSz-ar3DvZY8uXyDUBKk7Iw,3615
|
81
81
|
autogluon/tabular/models/tab_transformer/tab_transformer.py,sha256=1c1oTJfSsGxQjzZJVN8doqFmYV-Wwwbqcu7RcW77kJk,6991
|
82
82
|
autogluon/tabular/models/tab_transformer/tab_transformer_encoder.py,sha256=v2G1S_MSESzKqtvSfxS5uEse2CWtOn_K2E-uIwuE6zI,24701
|
83
|
-
autogluon/tabular/models/tab_transformer/tab_transformer_model.py,sha256=
|
83
|
+
autogluon/tabular/models/tab_transformer/tab_transformer_model.py,sha256=5J3xeIWEoSMljJ-ghMeRmHv0sFqY3ASJ2aN7ivOIqww,22917
|
84
84
|
autogluon/tabular/models/tab_transformer/utils.py,sha256=rrNk0X6Y0vzt7ivylRmTf0zjDx1DIF-5_ibf6B9Taz8,4554
|
85
85
|
autogluon/tabular/models/tab_transformer/hyperparameters/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
86
86
|
autogluon/tabular/models/tab_transformer/hyperparameters/parameters.py,sha256=-vJRG8PVj5FgQnF9FNJHMvoIzzyazGE4XLRyQKL5VT8,3854
|
87
87
|
autogluon/tabular/models/tab_transformer/hyperparameters/searchspaces.py,sha256=poiOFwOVIf1ONcPIjOqsA31YbqBgWxy0DlVFpVwKNHM,650
|
88
88
|
autogluon/tabular/models/tabpfn/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
89
|
-
autogluon/tabular/models/tabpfn/tabpfn_model.py,sha256=
|
89
|
+
autogluon/tabular/models/tabpfn/tabpfn_model.py,sha256=PEYMuIh5TFLIDy3hcjfz1DcvDu77rbwRq0pKWyuUR04,6787
|
90
90
|
autogluon/tabular/models/tabpfnmix/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
|
-
autogluon/tabular/models/tabpfnmix/tabpfnmix_model.py,sha256=
|
91
|
+
autogluon/tabular/models/tabpfnmix/tabpfnmix_model.py,sha256=Bo-JMnNgI0fYXXTHy3zLAE1OHZv9ikgH4bFBaVSa79g,16174
|
92
92
|
autogluon/tabular/models/tabpfnmix/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
93
|
autogluon/tabular/models/tabpfnmix/_internal/tabpfnmix_classifier.py,sha256=U3DAhtSLpHUu-22GgR3QCZJnpRYpOW95XoTV7tE9J5Y,3425
|
94
94
|
autogluon/tabular/models/tabpfnmix/_internal/tabpfnmix_regressor.py,sha256=J6JvrK6L6y3s-Ah6sHQdjSK0mwAMP-Wy3RRBwzB0AoA,3196
|
@@ -121,7 +121,7 @@ autogluon/tabular/models/tabular_nn/hyperparameters/__init__.py,sha256=47DEQpj8H
|
|
121
121
|
autogluon/tabular/models/tabular_nn/hyperparameters/parameters.py,sha256=Z3t_U1f7jfolPey6lzqgJyoFbVgoncFNSvCKXSuLxeU,6465
|
122
122
|
autogluon/tabular/models/tabular_nn/hyperparameters/searchspaces.py,sha256=pT9cJ3MaWPnaQwAf47Yz6f0-L9qDBknahERbggAp52U,2810
|
123
123
|
autogluon/tabular/models/tabular_nn/torch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
124
|
-
autogluon/tabular/models/tabular_nn/torch/tabular_nn_torch.py,sha256=
|
124
|
+
autogluon/tabular/models/tabular_nn/torch/tabular_nn_torch.py,sha256=tDxWg4SLUjBFaNcdmbEYfC8nPWCYtCQMTX_XG00x13s,42587
|
125
125
|
autogluon/tabular/models/tabular_nn/torch/tabular_torch_dataset.py,sha256=RdnQGZSrvY1iuJB4JTANniH3Dorw-DP0Em_JK3_h7RM,13497
|
126
126
|
autogluon/tabular/models/tabular_nn/torch/torch_network_modules.py,sha256=Qc3PwXTD8A7PgXi6EGuaBCrN3jsFAXDLCW7i6tE5wYI,11338
|
127
127
|
autogluon/tabular/models/tabular_nn/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -129,25 +129,29 @@ autogluon/tabular/models/tabular_nn/utils/categorical_encoders.py,sha256=uLQaHku
|
|
129
129
|
autogluon/tabular/models/tabular_nn/utils/data_preprocessor.py,sha256=ypXqtxdt1qH6la1hcq-BJ0dzQBNtgKY-BjXmIWxPjCg,5237
|
130
130
|
autogluon/tabular/models/tabular_nn/utils/nn_architecture_utils.py,sha256=tttzR5EtYcFa6sIrUG9wyegdYmYE5DPK_CiLF1-L3c8,2875
|
131
131
|
autogluon/tabular/models/text_prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
132
|
-
autogluon/tabular/models/text_prediction/text_prediction_v1_model.py,sha256=
|
132
|
+
autogluon/tabular/models/text_prediction/text_prediction_v1_model.py,sha256=PBN7F98qgEAO6U76rV_hxZfAmKr_XpVKjElOdBvfX8c,1090
|
133
133
|
autogluon/tabular/models/vowpalwabbit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
134
|
-
autogluon/tabular/models/vowpalwabbit/vowpalwabbit_model.py,sha256=
|
134
|
+
autogluon/tabular/models/vowpalwabbit/vowpalwabbit_model.py,sha256=h_j33hnsuxDM0mfExpmejO2pu5lIpTm1uIEirS2OXXI,11802
|
135
135
|
autogluon/tabular/models/vowpalwabbit/vowpalwabbit_utils.py,sha256=jZ0STjvqwKw8jJDeoo5yAXTvgwFvY8Fsz6OqSif_JGI,3677
|
136
136
|
autogluon/tabular/models/xgboost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
137
137
|
autogluon/tabular/models/xgboost/callbacks.py,sha256=uynimXya07XQMBkDvec-7mXK6OfMGP6M8MiVYu8OVRI,7008
|
138
|
-
autogluon/tabular/models/xgboost/xgboost_model.py,sha256=
|
138
|
+
autogluon/tabular/models/xgboost/xgboost_model.py,sha256=tTSnTzEot2JB0qEvhki4h3RdaLjEpfMs-jWKsxlJWO4,14304
|
139
139
|
autogluon/tabular/models/xgboost/xgboost_utils.py,sha256=FVqZ8h4JAe_pifSvNx83cLZHwsuzTXylrrcan07AoNo,5757
|
140
140
|
autogluon/tabular/models/xgboost/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
141
141
|
autogluon/tabular/models/xgboost/hyperparameters/parameters.py,sha256=ay6bVVpiPzftbtz6TTS76w7j4vjDjzHFpuf2Bjf6Zu4,1673
|
142
142
|
autogluon/tabular/models/xgboost/hyperparameters/searchspaces.py,sha256=lFwI34pcRtlVQkxmsdZsSaPry8t_WSMBhig4soMK54k,2140
|
143
143
|
autogluon/tabular/models/xt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
144
|
-
autogluon/tabular/models/xt/xt_model.py,sha256=
|
144
|
+
autogluon/tabular/models/xt/xt_model.py,sha256=qOHJ5h1lHI7uYJfbl0BWm-29R3MNp2WeZB9ptcq5Xis,1003
|
145
145
|
autogluon/tabular/predictor/__init__.py,sha256=zCMgjxQlWpDWnr1l1xjBCiK3rWC3N3RoD8UXBnazT74,107
|
146
146
|
autogluon/tabular/predictor/interpretable_predictor.py,sha256=5UeKgnMFsfY65tiO3kxfHBPr03lyswLrgdtjPhI0Y7Q,6934
|
147
147
|
autogluon/tabular/predictor/predictor.py,sha256=jOkpypHAPrL2nsI4iypVkZV90TpMORK-G_Ixr3Kw3XQ,357182
|
148
148
|
autogluon/tabular/register/__init__.py,sha256=7CLOTWIUho0wi4eAwhYJ5Y0PfvNCWKnRwlw3bwYoTNE,93
|
149
149
|
autogluon/tabular/register/_ag_model_register.py,sha256=tMr-QgxgCE49tdThdSFOZaJg2D9ckDh6fiR5K4cRtvk,1564
|
150
150
|
autogluon/tabular/register/_model_register.py,sha256=jqSg0d89dXAAcp-OT4II90ce994ByKMMzAYmpkyaRbI,6824
|
151
|
+
autogluon/tabular/testing/__init__.py,sha256=XrEGLmMdmRT6QHNR13M9wna57LO4O3Q4tt27Ca8omAc,79
|
152
|
+
autogluon/tabular/testing/fit_helper.py,sha256=gVHTdAsp_lSZ_qbwjXM7aA5fI32zHj3_zXwEXC9C_ds,19586
|
153
|
+
autogluon/tabular/testing/generate_datasets.py,sha256=UXPNfviUNZqGcx4mTYIloJxRED6DRMxAgHqbOvjEUCs,3603
|
154
|
+
autogluon/tabular/testing/model_fit_helper.py,sha256=ZjWpw2nyeFnsrccmkfQtx3qbA8HJx282XX2rwdS-LIs,3808
|
151
155
|
autogluon/tabular/trainer/__init__.py,sha256=PW_PGL-tWoQzx3ES2S53bQEZOtsRWTYiM9QdOqsk0dI,38
|
152
156
|
autogluon/tabular/trainer/abstract_trainer.py,sha256=lqOjVTLUaZNue4B7u47PYXTXsBEFbSJ4SyruNeChFCk,231925
|
153
157
|
autogluon/tabular/trainer/auto_trainer.py,sha256=FyRWM8iUJuDvw_aqV5EV_xdh_pb-nHzAvG1sbEhvs0g,8680
|
@@ -156,11 +160,11 @@ autogluon/tabular/trainer/model_presets/presets.py,sha256=bTPGPyz07a7GG6327yO6ry
|
|
156
160
|
autogluon/tabular/trainer/model_presets/presets_distill.py,sha256=MnFC2GJc6RmDBNAGbsO2XMfo3PjR8cUrZoilWW8gTYQ,3295
|
157
161
|
autogluon/tabular/tuning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
158
162
|
autogluon/tabular/tuning/feature_pruner.py,sha256=9iNku8gVbYEkjuKlyITPJDicsNkoraaQOlINQq9iZlQ,6877
|
159
|
-
autogluon.tabular-1.2.
|
160
|
-
autogluon.tabular-1.2.
|
161
|
-
autogluon.tabular-1.2.
|
162
|
-
autogluon.tabular-1.2.
|
163
|
-
autogluon.tabular-1.2.
|
164
|
-
autogluon.tabular-1.2.
|
165
|
-
autogluon.tabular-1.2.
|
166
|
-
autogluon.tabular-1.2.
|
163
|
+
autogluon.tabular-1.2.1b20250306.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
|
164
|
+
autogluon.tabular-1.2.1b20250306.dist-info/METADATA,sha256=YgXdgjQUF_qTbiUXze0zDW5m1-lQO6pPMBOhZPp8Jqs,14386
|
165
|
+
autogluon.tabular-1.2.1b20250306.dist-info/NOTICE,sha256=7nPQuj8Kp-uXsU0S5so3-2dNU5EctS5hDXvvzzehd7E,114
|
166
|
+
autogluon.tabular-1.2.1b20250306.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
167
|
+
autogluon.tabular-1.2.1b20250306.dist-info/namespace_packages.txt,sha256=giERA4R78OkJf2ijn5slgjURlhRPzfLr7waIcGkzYAo,10
|
168
|
+
autogluon.tabular-1.2.1b20250306.dist-info/top_level.txt,sha256=giERA4R78OkJf2ijn5slgjURlhRPzfLr7waIcGkzYAo,10
|
169
|
+
autogluon.tabular-1.2.1b20250306.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
170
|
+
autogluon.tabular-1.2.1b20250306.dist-info/RECORD,,
|
File without changes
|
{autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/LICENSE
RENAMED
File without changes
|
{autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/NOTICE
RENAMED
File without changes
|
{autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
{autogluon.tabular-1.2.1b20250305.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/zip-safe
RENAMED
File without changes
|