Skip to content

Commit 5a6161f

Browse files
committed
multi-import package
1 parent cd4495e commit 5a6161f

7 files changed

Lines changed: 274 additions & 4 deletions

File tree

openml/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,10 @@ def populate_cache(
124124
"__version__",
125125
"get",
126126
]
127+
128+
129+
def __getattr__(name: str):
130+
if name in __all__:
131+
return globals()[name]
132+
if name not in __all__:
133+
return get(name)

openml/base/_base_pkg.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class _BasePkg(BaseObject):
2020
"pkg_obj": "reference", # or "code"
2121
"pkg_obj_type": None, # openml API type
2222
"pkg_compression": "zlib", # compression
23+
"pkg_pypi_name": None, # PyPI package name of objects
2324
}
2425

2526
def __init__(self):

openml/models/_get.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def get(id: str):
2727
obj = id_lookup.get(id)
2828
if obj is None:
2929
raise ValueError(f"Error in openml.get, object with package id {id} " "does not exist.")
30-
return obj().materialize()
30+
return obj(id).materialize()
3131

3232

3333
# todo: need to generalize this later to more types
@@ -41,8 +41,16 @@ def _id_lookup(obj_type=None):
4141
def _id_lookup_cached(obj_type=None):
4242
all_objs = _all_objects(obj_type=obj_type)
4343

44-
# todo: generalize that pkg can contain more than one object
45-
return {obj.get_class_tag("pkg_id"): obj for obj in all_objs}
44+
lookup_dict = {}
45+
for obj in all_objs:
46+
obj_index = obj.get_class_tag("pkg_id")
47+
if obj_index != "__multiple":
48+
lookup_dict[obj_index] = obj
49+
else:
50+
obj_all_ids = obj.contained_ids()
51+
lookup_dict.update({obj_id: obj for obj_id in obj_all_ids})
52+
53+
return lookup_dict
4654

4755

4856
@lru_cache

openml/models/base/_base.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,28 @@
77

88
class _OpenmlModelPkg(_BasePkg):
99
_obj = None
10+
_obj_dict = {}
11+
12+
def __init__(self, id=None):
13+
super().__init__()
14+
15+
pkg_id = self.get_tag("pkg_id")
16+
if pkg_id == "__multiple":
17+
self._obj = self._obj_dict.get(id, None)
18+
19+
@classmethod
20+
def contained_ids(cls):
21+
"""Return list of ids of objects contained in this package.
22+
23+
Returns
24+
-------
25+
ids : list of str
26+
list of unique identifiers of objects contained in this package
27+
"""
28+
pkg_id = cls.get_class_tag("pkg_id")
29+
if pkg_id != "__multiple":
30+
return [cls.get_class_tag("pkg_id")]
31+
return list(cls._obj_dict.keys())
1032

1133
def _materialize(self):
1234
pkg_obj = self.get_tag("pkg_obj")
@@ -23,7 +45,10 @@ def _materialize(self):
2345
if pkg_obj == "reference":
2446
from skbase.utils.dependencies import _safe_import
2547

26-
return _safe_import(self._obj)
48+
obj_loc = self._obj
49+
pkg_name = self.get_tag("pkg_pypi_name")
50+
51+
return _safe_import(obj_loc, pkg_name=pkg_name)
2752

2853
if pkg_obj == "code":
2954
exec(self._obj)

openml/models/classification/auto_sklearn.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class OpenmlPkg__AutoSklearnClassifier(_ModelPkgClassifier):
99
_tags = {
1010
"pkg_id": "AutoSklearnClassifier",
1111
"python_dependencies": "auto-sklearn",
12+
"pkg_pypi_name": "auto-sklearn",
1213
}
1314

1415
_obj = "autosklearn.classification.AutoSklearnClassifier"
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
"""Auto-sklearn classifier."""
2+
3+
from __future__ import annotations
4+
5+
from openml.models.apis import _ModelPkgClassifier
6+
7+
8+
class OpenmlPkg__Sklearn(_ModelPkgClassifier):
9+
_tags = {
10+
"pkg_id": "__multiple",
11+
"python_dependencies": "scikit-learn",
12+
"pkg_pypi_name": "scikit-learn",
13+
}
14+
15+
# obtained via utils._indexing._preindex_sklearn
16+
# todo: automate generation
17+
# todo: include version bounds for availability
18+
# todo: test generated index against actual index
19+
_obj_dict = {
20+
"ARDRegression": "sklearn.linear_model._bayes.ARDRegression",
21+
"AdaBoostClassifier": "sklearn.ensemble._weight_boosting.AdaBoostClassifier",
22+
"AdaBoostRegressor": "sklearn.ensemble._weight_boosting.AdaBoostRegressor",
23+
"AdditiveChi2Sampler": "sklearn.kernel_approximation.AdditiveChi2Sampler",
24+
"AffinityPropagation": "sklearn.cluster._affinity_propagation.AffinityPropagation",
25+
"AgglomerativeClustering": "sklearn.cluster._agglomerative.AgglomerativeClustering",
26+
"BaggingClassifier": "sklearn.ensemble._bagging.BaggingClassifier",
27+
"BaggingRegressor": "sklearn.ensemble._bagging.BaggingRegressor",
28+
"BayesianGaussianMixture": "sklearn.mixture._bayesian_mixture.BayesianGaussianMixture",
29+
"BayesianRidge": "sklearn.linear_model._bayes.BayesianRidge",
30+
"BernoulliNB": "sklearn.naive_bayes.BernoulliNB",
31+
"BernoulliRBM": "sklearn.neural_network._rbm.BernoulliRBM",
32+
"Binarizer": "sklearn.preprocessing._data.Binarizer",
33+
"Birch": "sklearn.cluster._birch.Birch",
34+
"BisectingKMeans": "sklearn.cluster._bisect_k_means.BisectingKMeans",
35+
"CCA": "sklearn.cross_decomposition._pls.CCA",
36+
"CalibratedClassifierCV": "sklearn.calibration.CalibratedClassifierCV",
37+
"CategoricalNB": "sklearn.naive_bayes.CategoricalNB",
38+
"ClassifierChain": "sklearn.multioutput.ClassifierChain",
39+
"ColumnTransformer": "sklearn.compose._column_transformer.ColumnTransformer",
40+
"ComplementNB": "sklearn.naive_bayes.ComplementNB",
41+
"CountVectorizer": "sklearn.feature_extraction.text.CountVectorizer",
42+
"DBSCAN": "sklearn.cluster._dbscan.DBSCAN",
43+
"DecisionTreeClassifier": "sklearn.tree._classes.DecisionTreeClassifier",
44+
"DecisionTreeRegressor": "sklearn.tree._classes.DecisionTreeRegressor",
45+
"DictVectorizer": "sklearn.feature_extraction._dict_vectorizer.DictVectorizer",
46+
"DictionaryLearning": "sklearn.decomposition._dict_learning.DictionaryLearning",
47+
"DummyClassifier": "sklearn.dummy.DummyClassifier",
48+
"DummyRegressor": "sklearn.dummy.DummyRegressor",
49+
"ElasticNet": "sklearn.linear_model._coordinate_descent.ElasticNet",
50+
"ElasticNetCV": "sklearn.linear_model._coordinate_descent.ElasticNetCV",
51+
"EllipticEnvelope": "sklearn.covariance._elliptic_envelope.EllipticEnvelope",
52+
"EmpiricalCovariance": "sklearn.covariance._empirical_covariance.EmpiricalCovariance",
53+
"ExtraTreeClassifier": "sklearn.tree._classes.ExtraTreeClassifier",
54+
"ExtraTreeRegressor": "sklearn.tree._classes.ExtraTreeRegressor",
55+
"ExtraTreesClassifier": "sklearn.ensemble._forest.ExtraTreesClassifier",
56+
"ExtraTreesRegressor": "sklearn.ensemble._forest.ExtraTreesRegressor",
57+
"FactorAnalysis": "sklearn.decomposition._factor_analysis.FactorAnalysis",
58+
"FastICA": "sklearn.decomposition._fastica.FastICA",
59+
"FeatureAgglomeration": "sklearn.cluster._agglomerative.FeatureAgglomeration",
60+
"FeatureHasher": "sklearn.feature_extraction._hash.FeatureHasher",
61+
"FeatureUnion": "sklearn.pipeline.FeatureUnion",
62+
"FixedThresholdClassifier": "sklearn.model_selection._classification_threshold.FixedThresholdClassifier",
63+
"FrozenEstimator": "sklearn.frozen._frozen.FrozenEstimator",
64+
"FunctionTransformer": "sklearn.preprocessing._function_transformer.FunctionTransformer",
65+
"GammaRegressor": "sklearn.linear_model._glm.glm.GammaRegressor",
66+
"GaussianMixture": "sklearn.mixture._gaussian_mixture.GaussianMixture",
67+
"GaussianNB": "sklearn.naive_bayes.GaussianNB",
68+
"GaussianProcessClassifier": "sklearn.gaussian_process._gpc.GaussianProcessClassifier",
69+
"GaussianProcessRegressor": "sklearn.gaussian_process._gpr.GaussianProcessRegressor",
70+
"GaussianRandomProjection": "sklearn.random_projection.GaussianRandomProjection",
71+
"GenericUnivariateSelect": "sklearn.feature_selection._univariate_selection.GenericUnivariateSelect",
72+
"GradientBoostingClassifier": "sklearn.ensemble._gb.GradientBoostingClassifier",
73+
"GradientBoostingRegressor": "sklearn.ensemble._gb.GradientBoostingRegressor",
74+
"GraphicalLasso": "sklearn.covariance._graph_lasso.GraphicalLasso",
75+
"GraphicalLassoCV": "sklearn.covariance._graph_lasso.GraphicalLassoCV",
76+
"GridSearchCV": "sklearn.model_selection._search.GridSearchCV",
77+
"HDBSCAN": "sklearn.cluster._hdbscan.hdbscan.HDBSCAN",
78+
"HashingVectorizer": "sklearn.feature_extraction.text.HashingVectorizer",
79+
"HistGradientBoostingClassifier": "sklearn.ensemble._hist_gradient_boosting.gradient_boosting.HistGradientBoostingClassifier",
80+
"HistGradientBoostingRegressor": "sklearn.ensemble._hist_gradient_boosting.gradient_boosting.HistGradientBoostingRegressor",
81+
"HuberRegressor": "sklearn.linear_model._huber.HuberRegressor",
82+
"IncrementalPCA": "sklearn.decomposition._incremental_pca.IncrementalPCA",
83+
"IsolationForest": "sklearn.ensemble._iforest.IsolationForest",
84+
"Isomap": "sklearn.manifold._isomap.Isomap",
85+
"IsotonicRegression": "sklearn.isotonic.IsotonicRegression",
86+
"KBinsDiscretizer": "sklearn.preprocessing._discretization.KBinsDiscretizer",
87+
"KMeans": "sklearn.cluster._kmeans.KMeans",
88+
"KNNImputer": "sklearn.impute._knn.KNNImputer",
89+
"KNeighborsClassifier": "sklearn.neighbors._classification.KNeighborsClassifier",
90+
"KNeighborsRegressor": "sklearn.neighbors._regression.KNeighborsRegressor",
91+
"KNeighborsTransformer": "sklearn.neighbors._graph.KNeighborsTransformer",
92+
"KernelCenterer": "sklearn.preprocessing._data.KernelCenterer",
93+
"KernelDensity": "sklearn.neighbors._kde.KernelDensity",
94+
"KernelPCA": "sklearn.decomposition._kernel_pca.KernelPCA",
95+
"KernelRidge": "sklearn.kernel_ridge.KernelRidge",
96+
"LabelBinarizer": "sklearn.preprocessing._label.LabelBinarizer",
97+
"LabelEncoder": "sklearn.preprocessing._label.LabelEncoder",
98+
"LabelPropagation": "sklearn.semi_supervised._label_propagation.LabelPropagation",
99+
"LabelSpreading": "sklearn.semi_supervised._label_propagation.LabelSpreading",
100+
"Lars": "sklearn.linear_model._least_angle.Lars",
101+
"LarsCV": "sklearn.linear_model._least_angle.LarsCV",
102+
"Lasso": "sklearn.linear_model._coordinate_descent.Lasso",
103+
"LassoCV": "sklearn.linear_model._coordinate_descent.LassoCV",
104+
"LassoLars": "sklearn.linear_model._least_angle.LassoLars",
105+
"LassoLarsCV": "sklearn.linear_model._least_angle.LassoLarsCV",
106+
"LassoLarsIC": "sklearn.linear_model._least_angle.LassoLarsIC",
107+
"LatentDirichletAllocation": "sklearn.decomposition._lda.LatentDirichletAllocation",
108+
"LedoitWolf": "sklearn.covariance._shrunk_covariance.LedoitWolf",
109+
"LinearDiscriminantAnalysis": "sklearn.discriminant_analysis.LinearDiscriminantAnalysis",
110+
"LinearRegression": "sklearn.linear_model._base.LinearRegression",
111+
"LinearSVC": "sklearn.svm._classes.LinearSVC",
112+
"LinearSVR": "sklearn.svm._classes.LinearSVR",
113+
"LocalOutlierFactor": "sklearn.neighbors._lof.LocalOutlierFactor",
114+
"LocallyLinearEmbedding": "sklearn.manifold._locally_linear.LocallyLinearEmbedding",
115+
"LogisticRegression": "sklearn.linear_model._logistic.LogisticRegression",
116+
"LogisticRegressionCV": "sklearn.linear_model._logistic.LogisticRegressionCV",
117+
"MDS": "sklearn.manifold._mds.MDS",
118+
"MLPClassifier": "sklearn.neural_network._multilayer_perceptron.MLPClassifier",
119+
"MLPRegressor": "sklearn.neural_network._multilayer_perceptron.MLPRegressor",
120+
"MaxAbsScaler": "sklearn.preprocessing._data.MaxAbsScaler",
121+
"MeanShift": "sklearn.cluster._mean_shift.MeanShift",
122+
"MinCovDet": "sklearn.covariance._robust_covariance.MinCovDet",
123+
"MinMaxScaler": "sklearn.preprocessing._data.MinMaxScaler",
124+
"MiniBatchDictionaryLearning": "sklearn.decomposition._dict_learning.MiniBatchDictionaryLearning",
125+
"MiniBatchKMeans": "sklearn.cluster._kmeans.MiniBatchKMeans",
126+
"MiniBatchNMF": "sklearn.decomposition._nmf.MiniBatchNMF",
127+
"MiniBatchSparsePCA": "sklearn.decomposition._sparse_pca.MiniBatchSparsePCA",
128+
"MissingIndicator": "sklearn.impute._base.MissingIndicator",
129+
"MultiLabelBinarizer": "sklearn.preprocessing._label.MultiLabelBinarizer",
130+
"MultiOutputClassifier": "sklearn.multioutput.MultiOutputClassifier",
131+
"MultiOutputRegressor": "sklearn.multioutput.MultiOutputRegressor",
132+
"MultiTaskElasticNet": "sklearn.linear_model._coordinate_descent.MultiTaskElasticNet",
133+
"MultiTaskElasticNetCV": "sklearn.linear_model._coordinate_descent.MultiTaskElasticNetCV",
134+
"MultiTaskLasso": "sklearn.linear_model._coordinate_descent.MultiTaskLasso",
135+
"MultiTaskLassoCV": "sklearn.linear_model._coordinate_descent.MultiTaskLassoCV",
136+
"MultinomialNB": "sklearn.naive_bayes.MultinomialNB",
137+
"NMF": "sklearn.decomposition._nmf.NMF",
138+
"NearestCentroid": "sklearn.neighbors._nearest_centroid.NearestCentroid",
139+
"NearestNeighbors": "sklearn.neighbors._unsupervised.NearestNeighbors",
140+
"NeighborhoodComponentsAnalysis": "sklearn.neighbors._nca.NeighborhoodComponentsAnalysis",
141+
"Normalizer": "sklearn.preprocessing._data.Normalizer",
142+
"NuSVC": "sklearn.svm._classes.NuSVC",
143+
"NuSVR": "sklearn.svm._classes.NuSVR",
144+
"Nystroem": "sklearn.kernel_approximation.Nystroem",
145+
"OAS": "sklearn.covariance._shrunk_covariance.OAS",
146+
"OPTICS": "sklearn.cluster._optics.OPTICS",
147+
"OneClassSVM": "sklearn.svm._classes.OneClassSVM",
148+
"OneHotEncoder": "sklearn.preprocessing._encoders.OneHotEncoder",
149+
"OneVsOneClassifier": "sklearn.multiclass.OneVsOneClassifier",
150+
"OneVsRestClassifier": "sklearn.multiclass.OneVsRestClassifier",
151+
"OrdinalEncoder": "sklearn.preprocessing._encoders.OrdinalEncoder",
152+
"OrthogonalMatchingPursuit": "sklearn.linear_model._omp.OrthogonalMatchingPursuit",
153+
"OrthogonalMatchingPursuitCV": "sklearn.linear_model._omp.OrthogonalMatchingPursuitCV",
154+
"OutputCodeClassifier": "sklearn.multiclass.OutputCodeClassifier",
155+
"PCA": "sklearn.decomposition._pca.PCA",
156+
"PLSCanonical": "sklearn.cross_decomposition._pls.PLSCanonical",
157+
"PLSRegression": "sklearn.cross_decomposition._pls.PLSRegression",
158+
"PLSSVD": "sklearn.cross_decomposition._pls.PLSSVD",
159+
"PassiveAggressiveClassifier": "sklearn.linear_model._passive_aggressive.PassiveAggressiveClassifier",
160+
"PassiveAggressiveRegressor": "sklearn.linear_model._passive_aggressive.PassiveAggressiveRegressor",
161+
"PatchExtractor": "sklearn.feature_extraction.image.PatchExtractor",
162+
"Perceptron": "sklearn.linear_model._perceptron.Perceptron",
163+
"Pipeline": "sklearn.pipeline.Pipeline",
164+
"PoissonRegressor": "sklearn.linear_model._glm.glm.PoissonRegressor",
165+
"PolynomialCountSketch": "sklearn.kernel_approximation.PolynomialCountSketch",
166+
"PolynomialFeatures": "sklearn.preprocessing._polynomial.PolynomialFeatures",
167+
"PowerTransformer": "sklearn.preprocessing._data.PowerTransformer",
168+
"QuadraticDiscriminantAnalysis": "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis",
169+
"QuantileRegressor": "sklearn.linear_model._quantile.QuantileRegressor",
170+
"QuantileTransformer": "sklearn.preprocessing._data.QuantileTransformer",
171+
"RANSACRegressor": "sklearn.linear_model._ransac.RANSACRegressor",
172+
"RBFSampler": "sklearn.kernel_approximation.RBFSampler",
173+
"RFE": "sklearn.feature_selection._rfe.RFE",
174+
"RFECV": "sklearn.feature_selection._rfe.RFECV",
175+
"RadiusNeighborsClassifier": "sklearn.neighbors._classification.RadiusNeighborsClassifier",
176+
"RadiusNeighborsRegressor": "sklearn.neighbors._regression.RadiusNeighborsRegressor",
177+
"RadiusNeighborsTransformer": "sklearn.neighbors._graph.RadiusNeighborsTransformer",
178+
"RandomForestClassifier": "sklearn.ensemble._forest.RandomForestClassifier",
179+
"RandomForestRegressor": "sklearn.ensemble._forest.RandomForestRegressor",
180+
"RandomTreesEmbedding": "sklearn.ensemble._forest.RandomTreesEmbedding",
181+
"RandomizedSearchCV": "sklearn.model_selection._search.RandomizedSearchCV",
182+
"RegressorChain": "sklearn.multioutput.RegressorChain",
183+
"Ridge": "sklearn.linear_model._ridge.Ridge",
184+
"RidgeCV": "sklearn.linear_model._ridge.RidgeCV",
185+
"RidgeClassifier": "sklearn.linear_model._ridge.RidgeClassifier",
186+
"RidgeClassifierCV": "sklearn.linear_model._ridge.RidgeClassifierCV",
187+
"RobustScaler": "sklearn.preprocessing._data.RobustScaler",
188+
"SGDClassifier": "sklearn.linear_model._stochastic_gradient.SGDClassifier",
189+
"SGDOneClassSVM": "sklearn.linear_model._stochastic_gradient.SGDOneClassSVM",
190+
"SGDRegressor": "sklearn.linear_model._stochastic_gradient.SGDRegressor",
191+
"SVC": "sklearn.svm._classes.SVC",
192+
"SVR": "sklearn.svm._classes.SVR",
193+
"SelectFdr": "sklearn.feature_selection._univariate_selection.SelectFdr",
194+
"SelectFpr": "sklearn.feature_selection._univariate_selection.SelectFpr",
195+
"SelectFromModel": "sklearn.feature_selection._from_model.SelectFromModel",
196+
"SelectFwe": "sklearn.feature_selection._univariate_selection.SelectFwe",
197+
"SelectKBest": "sklearn.feature_selection._univariate_selection.SelectKBest",
198+
"SelectPercentile": "sklearn.feature_selection._univariate_selection.SelectPercentile",
199+
"SelfTrainingClassifier": "sklearn.semi_supervised._self_training.SelfTrainingClassifier",
200+
"SequentialFeatureSelector": "sklearn.feature_selection._sequential.SequentialFeatureSelector",
201+
"ShrunkCovariance": "sklearn.covariance._shrunk_covariance.ShrunkCovariance",
202+
"SimpleImputer": "sklearn.impute._base.SimpleImputer",
203+
"SkewedChi2Sampler": "sklearn.kernel_approximation.SkewedChi2Sampler",
204+
"SparseCoder": "sklearn.decomposition._dict_learning.SparseCoder",
205+
"SparsePCA": "sklearn.decomposition._sparse_pca.SparsePCA",
206+
"SparseRandomProjection": "sklearn.random_projection.SparseRandomProjection",
207+
"SpectralBiclustering": "sklearn.cluster._bicluster.SpectralBiclustering",
208+
"SpectralClustering": "sklearn.cluster._spectral.SpectralClustering",
209+
"SpectralCoclustering": "sklearn.cluster._bicluster.SpectralCoclustering",
210+
"SpectralEmbedding": "sklearn.manifold._spectral_embedding.SpectralEmbedding",
211+
"SplineTransformer": "sklearn.preprocessing._polynomial.SplineTransformer",
212+
"StackingClassifier": "sklearn.ensemble._stacking.StackingClassifier",
213+
"StackingRegressor": "sklearn.ensemble._stacking.StackingRegressor",
214+
"StandardScaler": "sklearn.preprocessing._data.StandardScaler",
215+
"TSNE": "sklearn.manifold._t_sne.TSNE",
216+
"TargetEncoder": "sklearn.preprocessing._target_encoder.TargetEncoder",
217+
"TfidfTransformer": "sklearn.feature_extraction.text.TfidfTransformer",
218+
"TfidfVectorizer": "sklearn.feature_extraction.text.TfidfVectorizer",
219+
"TheilSenRegressor": "sklearn.linear_model._theil_sen.TheilSenRegressor",
220+
"TransformedTargetRegressor": "sklearn.compose._target.TransformedTargetRegressor",
221+
"TruncatedSVD": "sklearn.decomposition._truncated_svd.TruncatedSVD",
222+
"TunedThresholdClassifierCV": "sklearn.model_selection._classification_threshold.TunedThresholdClassifierCV",
223+
"TweedieRegressor": "sklearn.linear_model._glm.glm.TweedieRegressor",
224+
"VarianceThreshold": "sklearn.feature_selection._variance_threshold.VarianceThreshold",
225+
"VotingClassifier": "sklearn.ensemble._voting.VotingClassifier",
226+
"VotingRegressor": "sklearn.ensemble._voting.VotingRegressor",
227+
}

openml/models/classification/xgboost.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class OpenmlPkg__XGBClassifier(_ModelPkgClassifier):
99
_tags = {
1010
"pkg_id": "XGBClassifier",
1111
"python_dependencies": "xgboost",
12+
"pkg_pypi_name": "xgboost",
1213
}
1314

1415
_obj = "xgboost.XGBClassifier"

0 commit comments

Comments
 (0)