snowflake-ml-python 1.3.1__py3-none-any.whl → 1.4.1__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.
- snowflake/ml/_internal/env_utils.py +11 -1
- snowflake/ml/_internal/human_readable_id/adjectives.txt +128 -0
- snowflake/ml/_internal/human_readable_id/animals.txt +128 -0
- snowflake/ml/_internal/human_readable_id/hrid_generator.py +40 -0
- snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +135 -0
- snowflake/ml/_internal/utils/formatting.py +1 -1
- snowflake/ml/_internal/utils/identifier.py +3 -1
- snowflake/ml/_internal/utils/sql_identifier.py +2 -6
- snowflake/ml/feature_store/feature_store.py +166 -184
- snowflake/ml/feature_store/feature_view.py +12 -24
- snowflake/ml/fileset/sfcfs.py +56 -50
- snowflake/ml/fileset/stage_fs.py +48 -13
- snowflake/ml/model/_client/model/model_version_impl.py +6 -49
- snowflake/ml/model/_client/ops/model_ops.py +78 -29
- snowflake/ml/model/_client/sql/model.py +23 -2
- snowflake/ml/model/_client/sql/model_version.py +22 -1
- snowflake/ml/model/_deploy_client/image_builds/server_image_builder.py +1 -3
- snowflake/ml/model/_deploy_client/snowservice/deploy.py +5 -2
- snowflake/ml/model/_model_composer/model_composer.py +7 -5
- snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +19 -54
- snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +8 -1
- snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +1 -1
- snowflake/ml/model/_model_composer/model_method/model_method.py +6 -10
- snowflake/ml/model/_packager/model_handlers/catboost.py +206 -0
- snowflake/ml/model/_packager/model_handlers/lightgbm.py +218 -0
- snowflake/ml/model/_packager/model_handlers/sklearn.py +3 -0
- snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +13 -1
- snowflake/ml/model/_packager/model_handlers/xgboost.py +1 -1
- snowflake/ml/model/_packager/model_meta/_core_requirements.py +1 -1
- snowflake/ml/model/_packager/model_meta/model_meta.py +36 -6
- snowflake/ml/model/_packager/model_meta/model_meta_schema.py +20 -1
- snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +3 -1
- snowflake/ml/model/_packager/model_packager.py +2 -2
- snowflake/ml/model/{_model_composer/model_runtime/_runtime_requirements.py → _packager/model_runtime/_snowml_inference_alternative_requirements.py} +1 -1
- snowflake/ml/model/_packager/model_runtime/model_runtime.py +137 -0
- snowflake/ml/model/custom_model.py +3 -1
- snowflake/ml/model/type_hints.py +21 -2
- snowflake/ml/modeling/_internal/estimator_utils.py +16 -11
- snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +4 -1
- snowflake/ml/modeling/_internal/model_specifications.py +3 -1
- snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +545 -0
- snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +8 -5
- snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +195 -123
- snowflake/ml/modeling/cluster/affinity_propagation.py +195 -123
- snowflake/ml/modeling/cluster/agglomerative_clustering.py +195 -123
- snowflake/ml/modeling/cluster/birch.py +195 -123
- snowflake/ml/modeling/cluster/bisecting_k_means.py +195 -123
- snowflake/ml/modeling/cluster/dbscan.py +195 -123
- snowflake/ml/modeling/cluster/feature_agglomeration.py +195 -123
- snowflake/ml/modeling/cluster/k_means.py +195 -123
- snowflake/ml/modeling/cluster/mean_shift.py +195 -123
- snowflake/ml/modeling/cluster/mini_batch_k_means.py +195 -123
- snowflake/ml/modeling/cluster/optics.py +195 -123
- snowflake/ml/modeling/cluster/spectral_biclustering.py +195 -123
- snowflake/ml/modeling/cluster/spectral_clustering.py +195 -123
- snowflake/ml/modeling/cluster/spectral_coclustering.py +195 -123
- snowflake/ml/modeling/compose/column_transformer.py +195 -123
- snowflake/ml/modeling/compose/transformed_target_regressor.py +195 -123
- snowflake/ml/modeling/covariance/elliptic_envelope.py +195 -123
- snowflake/ml/modeling/covariance/empirical_covariance.py +195 -123
- snowflake/ml/modeling/covariance/graphical_lasso.py +195 -123
- snowflake/ml/modeling/covariance/graphical_lasso_cv.py +195 -123
- snowflake/ml/modeling/covariance/ledoit_wolf.py +195 -123
- snowflake/ml/modeling/covariance/min_cov_det.py +195 -123
- snowflake/ml/modeling/covariance/oas.py +195 -123
- snowflake/ml/modeling/covariance/shrunk_covariance.py +195 -123
- snowflake/ml/modeling/decomposition/dictionary_learning.py +195 -123
- snowflake/ml/modeling/decomposition/factor_analysis.py +195 -123
- snowflake/ml/modeling/decomposition/fast_ica.py +195 -123
- snowflake/ml/modeling/decomposition/incremental_pca.py +195 -123
- snowflake/ml/modeling/decomposition/kernel_pca.py +195 -123
- snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +195 -123
- snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +195 -123
- snowflake/ml/modeling/decomposition/pca.py +195 -123
- snowflake/ml/modeling/decomposition/sparse_pca.py +195 -123
- snowflake/ml/modeling/decomposition/truncated_svd.py +195 -123
- snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +195 -123
- snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +195 -123
- snowflake/ml/modeling/ensemble/ada_boost_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/ada_boost_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/bagging_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/bagging_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/extra_trees_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/extra_trees_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/isolation_forest.py +195 -123
- snowflake/ml/modeling/ensemble/random_forest_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/random_forest_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/stacking_regressor.py +195 -123
- snowflake/ml/modeling/ensemble/voting_classifier.py +195 -123
- snowflake/ml/modeling/ensemble/voting_regressor.py +195 -123
- snowflake/ml/modeling/feature_selection/generic_univariate_select.py +195 -123
- snowflake/ml/modeling/feature_selection/select_fdr.py +195 -123
- snowflake/ml/modeling/feature_selection/select_fpr.py +195 -123
- snowflake/ml/modeling/feature_selection/select_fwe.py +195 -123
- snowflake/ml/modeling/feature_selection/select_k_best.py +195 -123
- snowflake/ml/modeling/feature_selection/select_percentile.py +195 -123
- snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +195 -123
- snowflake/ml/modeling/feature_selection/variance_threshold.py +195 -123
- snowflake/ml/modeling/framework/_utils.py +8 -1
- snowflake/ml/modeling/framework/base.py +24 -6
- snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +195 -123
- snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +195 -123
- snowflake/ml/modeling/impute/iterative_imputer.py +195 -123
- snowflake/ml/modeling/impute/knn_imputer.py +195 -123
- snowflake/ml/modeling/impute/missing_indicator.py +195 -123
- snowflake/ml/modeling/impute/simple_imputer.py +4 -15
- snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +195 -123
- snowflake/ml/modeling/kernel_approximation/nystroem.py +195 -123
- snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +195 -123
- snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +195 -123
- snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +195 -123
- snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +195 -123
- snowflake/ml/modeling/lightgbm/lgbm_classifier.py +198 -125
- snowflake/ml/modeling/lightgbm/lgbm_regressor.py +198 -125
- snowflake/ml/modeling/linear_model/ard_regression.py +195 -123
- snowflake/ml/modeling/linear_model/bayesian_ridge.py +195 -123
- snowflake/ml/modeling/linear_model/elastic_net.py +195 -123
- snowflake/ml/modeling/linear_model/elastic_net_cv.py +195 -123
- snowflake/ml/modeling/linear_model/gamma_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/huber_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/lars.py +195 -123
- snowflake/ml/modeling/linear_model/lars_cv.py +195 -123
- snowflake/ml/modeling/linear_model/lasso.py +195 -123
- snowflake/ml/modeling/linear_model/lasso_cv.py +195 -123
- snowflake/ml/modeling/linear_model/lasso_lars.py +195 -123
- snowflake/ml/modeling/linear_model/lasso_lars_cv.py +195 -123
- snowflake/ml/modeling/linear_model/lasso_lars_ic.py +195 -123
- snowflake/ml/modeling/linear_model/linear_regression.py +195 -123
- snowflake/ml/modeling/linear_model/logistic_regression.py +195 -123
- snowflake/ml/modeling/linear_model/logistic_regression_cv.py +195 -123
- snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +195 -123
- snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +195 -123
- snowflake/ml/modeling/linear_model/multi_task_lasso.py +195 -123
- snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +195 -123
- snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +195 -123
- snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +195 -123
- snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/perceptron.py +195 -123
- snowflake/ml/modeling/linear_model/poisson_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/ransac_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/ridge.py +195 -123
- snowflake/ml/modeling/linear_model/ridge_classifier.py +195 -123
- snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +195 -123
- snowflake/ml/modeling/linear_model/ridge_cv.py +195 -123
- snowflake/ml/modeling/linear_model/sgd_classifier.py +195 -123
- snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +195 -123
- snowflake/ml/modeling/linear_model/sgd_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/theil_sen_regressor.py +195 -123
- snowflake/ml/modeling/linear_model/tweedie_regressor.py +195 -123
- snowflake/ml/modeling/manifold/isomap.py +195 -123
- snowflake/ml/modeling/manifold/mds.py +195 -123
- snowflake/ml/modeling/manifold/spectral_embedding.py +195 -123
- snowflake/ml/modeling/manifold/tsne.py +195 -123
- snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +195 -123
- snowflake/ml/modeling/mixture/gaussian_mixture.py +195 -123
- snowflake/ml/modeling/model_selection/grid_search_cv.py +42 -18
- snowflake/ml/modeling/model_selection/randomized_search_cv.py +42 -18
- snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +195 -123
- snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +195 -123
- snowflake/ml/modeling/multiclass/output_code_classifier.py +195 -123
- snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +195 -123
- snowflake/ml/modeling/naive_bayes/categorical_nb.py +195 -123
- snowflake/ml/modeling/naive_bayes/complement_nb.py +195 -123
- snowflake/ml/modeling/naive_bayes/gaussian_nb.py +195 -123
- snowflake/ml/modeling/naive_bayes/multinomial_nb.py +195 -123
- snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +195 -123
- snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +195 -123
- snowflake/ml/modeling/neighbors/kernel_density.py +195 -123
- snowflake/ml/modeling/neighbors/local_outlier_factor.py +195 -123
- snowflake/ml/modeling/neighbors/nearest_centroid.py +195 -123
- snowflake/ml/modeling/neighbors/nearest_neighbors.py +195 -123
- snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +195 -123
- snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +195 -123
- snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +195 -123
- snowflake/ml/modeling/neural_network/bernoulli_rbm.py +195 -123
- snowflake/ml/modeling/neural_network/mlp_classifier.py +195 -123
- snowflake/ml/modeling/neural_network/mlp_regressor.py +195 -123
- snowflake/ml/modeling/pipeline/pipeline.py +4 -4
- snowflake/ml/modeling/preprocessing/binarizer.py +1 -5
- snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +1 -5
- snowflake/ml/modeling/preprocessing/label_encoder.py +1 -5
- snowflake/ml/modeling/preprocessing/max_abs_scaler.py +1 -5
- snowflake/ml/modeling/preprocessing/min_max_scaler.py +10 -12
- snowflake/ml/modeling/preprocessing/normalizer.py +1 -5
- snowflake/ml/modeling/preprocessing/one_hot_encoder.py +1 -5
- snowflake/ml/modeling/preprocessing/ordinal_encoder.py +1 -5
- snowflake/ml/modeling/preprocessing/polynomial_features.py +195 -123
- snowflake/ml/modeling/preprocessing/robust_scaler.py +1 -5
- snowflake/ml/modeling/preprocessing/standard_scaler.py +11 -11
- snowflake/ml/modeling/semi_supervised/label_propagation.py +195 -123
- snowflake/ml/modeling/semi_supervised/label_spreading.py +195 -123
- snowflake/ml/modeling/svm/linear_svc.py +195 -123
- snowflake/ml/modeling/svm/linear_svr.py +195 -123
- snowflake/ml/modeling/svm/nu_svc.py +195 -123
- snowflake/ml/modeling/svm/nu_svr.py +195 -123
- snowflake/ml/modeling/svm/svc.py +195 -123
- snowflake/ml/modeling/svm/svr.py +195 -123
- snowflake/ml/modeling/tree/decision_tree_classifier.py +195 -123
- snowflake/ml/modeling/tree/decision_tree_regressor.py +195 -123
- snowflake/ml/modeling/tree/extra_tree_classifier.py +195 -123
- snowflake/ml/modeling/tree/extra_tree_regressor.py +195 -123
- snowflake/ml/modeling/xgboost/xgb_classifier.py +195 -123
- snowflake/ml/modeling/xgboost/xgb_regressor.py +195 -123
- snowflake/ml/modeling/xgboost/xgbrf_classifier.py +195 -123
- snowflake/ml/modeling/xgboost/xgbrf_regressor.py +195 -123
- snowflake/ml/registry/_manager/model_manager.py +5 -1
- snowflake/ml/registry/model_registry.py +99 -26
- snowflake/ml/registry/registry.py +3 -2
- snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.3.1.dist-info → snowflake_ml_python-1.4.1.dist-info}/METADATA +94 -55
- {snowflake_ml_python-1.3.1.dist-info → snowflake_ml_python-1.4.1.dist-info}/RECORD +218 -212
- snowflake/ml/model/_model_composer/model_runtime/model_runtime.py +0 -97
- {snowflake_ml_python-1.3.1.dist-info → snowflake_ml_python-1.4.1.dist-info}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.3.1.dist-info → snowflake_ml_python-1.4.1.dist-info}/WHEEL +0 -0
- {snowflake_ml_python-1.3.1.dist-info → snowflake_ml_python-1.4.1.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,7 @@ from numpy import typing as npt
|
|
16
16
|
|
17
17
|
|
18
18
|
import numpy
|
19
|
+
import sklearn
|
19
20
|
import lightgbm
|
20
21
|
from sklearn.utils.metaestimators import available_if
|
21
22
|
|
@@ -32,6 +33,15 @@ from snowflake.ml.modeling._internal.transformer_protocols import (
|
|
32
33
|
BatchInferenceKwargsTypedDict,
|
33
34
|
ScoreKwargsTypedDict
|
34
35
|
)
|
36
|
+
from snowflake.ml.model._signatures import utils as model_signature_utils
|
37
|
+
from snowflake.ml.model.model_signature import (
|
38
|
+
BaseFeatureSpec,
|
39
|
+
DataType,
|
40
|
+
FeatureSpec,
|
41
|
+
ModelSignature,
|
42
|
+
_infer_signature,
|
43
|
+
_rename_signature_with_snowflake_identifiers,
|
44
|
+
)
|
35
45
|
|
36
46
|
from snowflake.ml.modeling._internal.model_transformer_builder import ModelTransformerBuilder
|
37
47
|
|
@@ -42,16 +52,6 @@ from snowflake.ml.modeling._internal.estimator_utils import (
|
|
42
52
|
validate_sklearn_args,
|
43
53
|
)
|
44
54
|
|
45
|
-
from snowflake.ml.model.model_signature import (
|
46
|
-
DataType,
|
47
|
-
FeatureSpec,
|
48
|
-
ModelSignature,
|
49
|
-
_infer_signature,
|
50
|
-
_rename_signature_with_snowflake_identifiers,
|
51
|
-
BaseFeatureSpec,
|
52
|
-
)
|
53
|
-
from snowflake.ml.model._signatures import utils as model_signature_utils
|
54
|
-
|
55
55
|
_PROJECT = "ModelDevelopment"
|
56
56
|
# Derive subproject from module name by removing "sklearn"
|
57
57
|
# and converting module name from underscore to CamelCase
|
@@ -160,7 +160,7 @@ class LGBMClassifier(BaseTransformer):
|
|
160
160
|
self.set_sample_weight_col(sample_weight_col)
|
161
161
|
self._use_external_memory_version = False
|
162
162
|
self._batch_size = -1
|
163
|
-
deps: Set[str] = set([f'numpy=={np.__version__}', f'lightgbm=={lightgbm.__version__}', f'cloudpickle=={cp.__version__}'])
|
163
|
+
deps: Set[str] = set([f'numpy=={np.__version__}', f'lightgbm=={lightgbm.__version__}', f'cloudpickle=={cp.__version__}', f'scikit-learn=={sklearn.__version__}'])
|
164
164
|
|
165
165
|
self._deps = list(deps)
|
166
166
|
|
@@ -232,12 +232,7 @@ class LGBMClassifier(BaseTransformer):
|
|
232
232
|
)
|
233
233
|
return selected_cols
|
234
234
|
|
235
|
-
|
236
|
-
project=_PROJECT,
|
237
|
-
subproject=_SUBPROJECT,
|
238
|
-
custom_tags=dict([("autogen", True)]),
|
239
|
-
)
|
240
|
-
def fit(self, dataset: Union[DataFrame, pd.DataFrame]) -> "LGBMClassifier":
|
235
|
+
def _fit(self, dataset: Union[DataFrame, pd.DataFrame]) -> "LGBMClassifier":
|
241
236
|
"""Build a gradient boosting model from the training set (X, y)
|
242
237
|
For more details on this function, see [lightgbm.LGBMClassifier.fit]
|
243
238
|
(https://lightgbm.readthedocs.io/en/v3.3.2/pythonapi/lightgbm.LGBMClassifier.html#lightgbm.LGBMClassifier.fit)
|
@@ -264,12 +259,14 @@ class LGBMClassifier(BaseTransformer):
|
|
264
259
|
|
265
260
|
self._snowpark_cols = dataset.select(self.input_cols).columns
|
266
261
|
|
267
|
-
|
262
|
+
# If we are already in a stored procedure, no need to kick off another one.
|
268
263
|
if SNOWML_SPROC_ENV in os.environ:
|
269
264
|
statement_params = telemetry.get_function_usage_statement_params(
|
270
265
|
project=_PROJECT,
|
271
266
|
subproject=_SUBPROJECT,
|
272
|
-
function_name=telemetry.get_statement_params_full_func_name(
|
267
|
+
function_name=telemetry.get_statement_params_full_func_name(
|
268
|
+
inspect.currentframe(), LGBMClassifier.__class__.__name__
|
269
|
+
),
|
273
270
|
api_calls=[Session.call],
|
274
271
|
custom_tags=dict([("autogen", True)]) if self._autogenerated else None,
|
275
272
|
)
|
@@ -290,7 +287,7 @@ class LGBMClassifier(BaseTransformer):
|
|
290
287
|
)
|
291
288
|
self._sklearn_object = model_trainer.train()
|
292
289
|
self._is_fitted = True
|
293
|
-
self.
|
290
|
+
self._generate_model_signatures(dataset)
|
294
291
|
return self
|
295
292
|
|
296
293
|
def _batch_inference_validate_snowpark(
|
@@ -366,7 +363,9 @@ class LGBMClassifier(BaseTransformer):
|
|
366
363
|
# when it is classifier, infer the datatype from label columns
|
367
364
|
if expected_type_inferred == "" and 'predict' in self.model_signatures:
|
368
365
|
# Batch inference takes a single expected output column type. Use the first columns type for now.
|
369
|
-
label_cols_signatures = [
|
366
|
+
label_cols_signatures = [
|
367
|
+
row for row in self.model_signatures['predict'].outputs if row.name in self.output_cols
|
368
|
+
]
|
370
369
|
if len(label_cols_signatures) == 0:
|
371
370
|
error_str = f"Output columns {self.output_cols} do not match model signatures {self.model_signatures['predict'].outputs}."
|
372
371
|
raise exceptions.SnowflakeMLException(
|
@@ -374,25 +373,22 @@ class LGBMClassifier(BaseTransformer):
|
|
374
373
|
original_exception=ValueError(error_str),
|
375
374
|
)
|
376
375
|
|
377
|
-
expected_type_inferred = convert_sp_to_sf_type(
|
378
|
-
label_cols_signatures[0].as_snowpark_type()
|
379
|
-
)
|
376
|
+
expected_type_inferred = convert_sp_to_sf_type(label_cols_signatures[0].as_snowpark_type())
|
380
377
|
|
381
378
|
self._deps = self._batch_inference_validate_snowpark(dataset=dataset, inference_method=inference_method)
|
382
|
-
assert isinstance(
|
379
|
+
assert isinstance(
|
380
|
+
dataset._session, Session
|
381
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
383
382
|
|
384
383
|
transform_kwargs = dict(
|
385
|
-
session
|
386
|
-
dependencies
|
387
|
-
drop_input_cols
|
388
|
-
expected_output_cols_type
|
384
|
+
session=dataset._session,
|
385
|
+
dependencies=self._deps,
|
386
|
+
drop_input_cols=self._drop_input_cols,
|
387
|
+
expected_output_cols_type=expected_type_inferred,
|
389
388
|
)
|
390
389
|
|
391
390
|
elif isinstance(dataset, pd.DataFrame):
|
392
|
-
transform_kwargs = dict(
|
393
|
-
snowpark_input_cols = self._snowpark_cols,
|
394
|
-
drop_input_cols = self._drop_input_cols
|
395
|
-
)
|
391
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
396
392
|
|
397
393
|
transform_handlers = ModelTransformerBuilder.build(
|
398
394
|
dataset=dataset,
|
@@ -432,7 +428,7 @@ class LGBMClassifier(BaseTransformer):
|
|
432
428
|
Transformed dataset.
|
433
429
|
"""
|
434
430
|
super()._check_dataset_type(dataset)
|
435
|
-
inference_method="transform"
|
431
|
+
inference_method = "transform"
|
436
432
|
|
437
433
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
438
434
|
# are specific to the type of dataset used.
|
@@ -469,17 +465,14 @@ class LGBMClassifier(BaseTransformer):
|
|
469
465
|
assert isinstance(dataset._session, Session) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
470
466
|
|
471
467
|
transform_kwargs = dict(
|
472
|
-
session
|
473
|
-
dependencies
|
474
|
-
drop_input_cols
|
475
|
-
expected_output_cols_type
|
468
|
+
session=dataset._session,
|
469
|
+
dependencies=self._deps,
|
470
|
+
drop_input_cols=self._drop_input_cols,
|
471
|
+
expected_output_cols_type=expected_dtype,
|
476
472
|
)
|
477
473
|
|
478
474
|
elif isinstance(dataset, pd.DataFrame):
|
479
|
-
transform_kwargs = dict(
|
480
|
-
snowpark_input_cols = self._snowpark_cols,
|
481
|
-
drop_input_cols = self._drop_input_cols
|
482
|
-
)
|
475
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
483
476
|
|
484
477
|
transform_handlers = ModelTransformerBuilder.build(
|
485
478
|
dataset=dataset,
|
@@ -498,7 +491,11 @@ class LGBMClassifier(BaseTransformer):
|
|
498
491
|
return output_df
|
499
492
|
|
500
493
|
@available_if(original_estimator_has_callable("fit_predict")) # type: ignore[misc]
|
501
|
-
def fit_predict(
|
494
|
+
def fit_predict(
|
495
|
+
self,
|
496
|
+
dataset: Union[DataFrame, pd.DataFrame],
|
497
|
+
output_cols_prefix: str = "fit_predict_",
|
498
|
+
) -> Union[DataFrame, pd.DataFrame]:
|
502
499
|
""" Method not supported for this class.
|
503
500
|
|
504
501
|
|
@@ -523,7 +520,9 @@ class LGBMClassifier(BaseTransformer):
|
|
523
520
|
)
|
524
521
|
output_result, fitted_estimator = model_trainer.train_fit_predict(
|
525
522
|
drop_input_cols=self._drop_input_cols,
|
526
|
-
expected_output_cols_list=
|
523
|
+
expected_output_cols_list=(
|
524
|
+
self.output_cols if self.output_cols else self._get_output_column_names(output_cols_prefix)
|
525
|
+
),
|
527
526
|
)
|
528
527
|
self._sklearn_object = fitted_estimator
|
529
528
|
self._is_fitted = True
|
@@ -540,6 +539,62 @@ class LGBMClassifier(BaseTransformer):
|
|
540
539
|
assert self._sklearn_object is not None
|
541
540
|
return self._sklearn_object.embedding_
|
542
541
|
|
542
|
+
|
543
|
+
def _get_output_column_names(self, output_cols_prefix: str, output_cols: Optional[List[str]] = None) -> List[str]:
|
544
|
+
""" Returns the list of output columns for predict_proba(), decision_function(), etc.. functions.
|
545
|
+
Returns a list with output_cols_prefix as the only element if the estimator is not a classifier.
|
546
|
+
"""
|
547
|
+
output_cols_prefix = identifier.resolve_identifier(output_cols_prefix)
|
548
|
+
# The following condition is introduced for kneighbors methods, and not used in other methods
|
549
|
+
if output_cols:
|
550
|
+
output_cols = [
|
551
|
+
identifier.concat_names([output_cols_prefix, identifier.resolve_identifier(c)])
|
552
|
+
for c in output_cols
|
553
|
+
]
|
554
|
+
elif getattr(self._sklearn_object, "classes_", None) is None:
|
555
|
+
output_cols = [output_cols_prefix]
|
556
|
+
elif self._sklearn_object is not None:
|
557
|
+
classes = self._sklearn_object.classes_
|
558
|
+
if isinstance(classes, numpy.ndarray):
|
559
|
+
output_cols = [f'{output_cols_prefix}{str(c)}' for c in classes.tolist()]
|
560
|
+
elif isinstance(classes, list) and len(classes) > 0 and isinstance(classes[0], numpy.ndarray):
|
561
|
+
# If the estimator is a multioutput estimator, classes_ will be a list of ndarrays.
|
562
|
+
output_cols = []
|
563
|
+
for i, cl in enumerate(classes):
|
564
|
+
# For binary classification, there is only one output column for each class
|
565
|
+
# ndarray as the two classes are complementary.
|
566
|
+
if len(cl) == 2:
|
567
|
+
output_cols.append(f'{output_cols_prefix}{i}_{cl[0]}')
|
568
|
+
else:
|
569
|
+
output_cols.extend([
|
570
|
+
f'{output_cols_prefix}{i}_{c}' for c in cl.tolist()
|
571
|
+
])
|
572
|
+
else:
|
573
|
+
output_cols = []
|
574
|
+
|
575
|
+
# Make sure column names are valid snowflake identifiers.
|
576
|
+
assert output_cols is not None # Make MyPy happy
|
577
|
+
rv = [identifier.rename_to_valid_snowflake_identifier(c) for c in output_cols]
|
578
|
+
|
579
|
+
return rv
|
580
|
+
|
581
|
+
def _align_expected_output_names(
|
582
|
+
self, method: str, dataset: DataFrame, expected_output_cols_list: List[str], output_cols_prefix: str
|
583
|
+
) -> List[str]:
|
584
|
+
# in case the inferred output column names dimension is different
|
585
|
+
# we use one line of snowpark dataframe and put it into sklearn estimator using pandas
|
586
|
+
output_df_pd = getattr(self, method)(dataset.limit(1).to_pandas(), output_cols_prefix)
|
587
|
+
output_df_columns = list(output_df_pd.columns)
|
588
|
+
output_df_columns_set: Set[str] = set(output_df_columns) - set(dataset.columns)
|
589
|
+
if self.sample_weight_col:
|
590
|
+
output_df_columns_set -= set(self.sample_weight_col)
|
591
|
+
# if the dimension of inferred output column names is correct; use it
|
592
|
+
if len(expected_output_cols_list) == len(output_df_columns_set):
|
593
|
+
return expected_output_cols_list
|
594
|
+
# otherwise, use the sklearn estimator's output
|
595
|
+
else:
|
596
|
+
return sorted(list(output_df_columns_set), key=lambda x: output_df_columns.index(x))
|
597
|
+
|
543
598
|
@available_if(original_estimator_has_callable("predict_proba")) # type: ignore[misc]
|
544
599
|
@telemetry.send_api_usage_telemetry(
|
545
600
|
project=_PROJECT,
|
@@ -572,24 +627,28 @@ class LGBMClassifier(BaseTransformer):
|
|
572
627
|
# are specific to the type of dataset used.
|
573
628
|
transform_kwargs: BatchInferenceKwargsTypedDict = dict()
|
574
629
|
|
630
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
631
|
+
|
575
632
|
if isinstance(dataset, DataFrame):
|
576
633
|
self._deps = self._batch_inference_validate_snowpark(
|
577
634
|
dataset=dataset,
|
578
635
|
inference_method=inference_method,
|
579
636
|
)
|
580
|
-
assert isinstance(
|
637
|
+
assert isinstance(
|
638
|
+
dataset._session, Session
|
639
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
581
640
|
transform_kwargs = dict(
|
582
641
|
session=dataset._session,
|
583
642
|
dependencies=self._deps,
|
584
|
-
drop_input_cols
|
643
|
+
drop_input_cols=self._drop_input_cols,
|
585
644
|
expected_output_cols_type="float",
|
586
645
|
)
|
646
|
+
expected_output_cols = self._align_expected_output_names(
|
647
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
648
|
+
)
|
587
649
|
|
588
650
|
elif isinstance(dataset, pd.DataFrame):
|
589
|
-
transform_kwargs = dict(
|
590
|
-
snowpark_input_cols = self._snowpark_cols,
|
591
|
-
drop_input_cols = self._drop_input_cols
|
592
|
-
)
|
651
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
593
652
|
|
594
653
|
transform_handlers = ModelTransformerBuilder.build(
|
595
654
|
dataset=dataset,
|
@@ -601,7 +660,7 @@ class LGBMClassifier(BaseTransformer):
|
|
601
660
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
602
661
|
inference_method=inference_method,
|
603
662
|
input_cols=self.input_cols,
|
604
|
-
expected_output_cols=
|
663
|
+
expected_output_cols=expected_output_cols,
|
605
664
|
**transform_kwargs
|
606
665
|
)
|
607
666
|
return output_df
|
@@ -633,7 +692,8 @@ class LGBMClassifier(BaseTransformer):
|
|
633
692
|
Output dataset with log probability of the sample for each class in the model.
|
634
693
|
"""
|
635
694
|
super()._check_dataset_type(dataset)
|
636
|
-
inference_method="predict_log_proba"
|
695
|
+
inference_method = "predict_log_proba"
|
696
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
637
697
|
|
638
698
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
639
699
|
# are specific to the type of dataset used.
|
@@ -644,18 +704,20 @@ class LGBMClassifier(BaseTransformer):
|
|
644
704
|
dataset=dataset,
|
645
705
|
inference_method=inference_method,
|
646
706
|
)
|
647
|
-
assert isinstance(
|
707
|
+
assert isinstance(
|
708
|
+
dataset._session, Session
|
709
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
648
710
|
transform_kwargs = dict(
|
649
711
|
session=dataset._session,
|
650
712
|
dependencies=self._deps,
|
651
|
-
drop_input_cols
|
713
|
+
drop_input_cols=self._drop_input_cols,
|
652
714
|
expected_output_cols_type="float",
|
653
715
|
)
|
716
|
+
expected_output_cols = self._align_expected_output_names(
|
717
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
718
|
+
)
|
654
719
|
elif isinstance(dataset, pd.DataFrame):
|
655
|
-
transform_kwargs = dict(
|
656
|
-
snowpark_input_cols = self._snowpark_cols,
|
657
|
-
drop_input_cols = self._drop_input_cols
|
658
|
-
)
|
720
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
659
721
|
|
660
722
|
transform_handlers = ModelTransformerBuilder.build(
|
661
723
|
dataset=dataset,
|
@@ -668,7 +730,7 @@ class LGBMClassifier(BaseTransformer):
|
|
668
730
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
669
731
|
inference_method=inference_method,
|
670
732
|
input_cols=self.input_cols,
|
671
|
-
expected_output_cols=
|
733
|
+
expected_output_cols=expected_output_cols,
|
672
734
|
**transform_kwargs
|
673
735
|
)
|
674
736
|
return output_df
|
@@ -694,30 +756,34 @@ class LGBMClassifier(BaseTransformer):
|
|
694
756
|
Output dataset with results of the decision function for the samples in input dataset.
|
695
757
|
"""
|
696
758
|
super()._check_dataset_type(dataset)
|
697
|
-
inference_method="decision_function"
|
759
|
+
inference_method = "decision_function"
|
698
760
|
|
699
761
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
700
762
|
# are specific to the type of dataset used.
|
701
763
|
transform_kwargs: BatchInferenceKwargsTypedDict = dict()
|
702
764
|
|
765
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
766
|
+
|
703
767
|
if isinstance(dataset, DataFrame):
|
704
768
|
self._deps = self._batch_inference_validate_snowpark(
|
705
769
|
dataset=dataset,
|
706
770
|
inference_method=inference_method,
|
707
771
|
)
|
708
|
-
assert isinstance(
|
772
|
+
assert isinstance(
|
773
|
+
dataset._session, Session
|
774
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
709
775
|
transform_kwargs = dict(
|
710
776
|
session=dataset._session,
|
711
777
|
dependencies=self._deps,
|
712
|
-
drop_input_cols
|
778
|
+
drop_input_cols=self._drop_input_cols,
|
713
779
|
expected_output_cols_type="float",
|
714
780
|
)
|
781
|
+
expected_output_cols = self._align_expected_output_names(
|
782
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
783
|
+
)
|
715
784
|
|
716
785
|
elif isinstance(dataset, pd.DataFrame):
|
717
|
-
transform_kwargs = dict(
|
718
|
-
snowpark_input_cols = self._snowpark_cols,
|
719
|
-
drop_input_cols = self._drop_input_cols
|
720
|
-
)
|
786
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
721
787
|
|
722
788
|
transform_handlers = ModelTransformerBuilder.build(
|
723
789
|
dataset=dataset,
|
@@ -730,7 +796,7 @@ class LGBMClassifier(BaseTransformer):
|
|
730
796
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
731
797
|
inference_method=inference_method,
|
732
798
|
input_cols=self.input_cols,
|
733
|
-
expected_output_cols=
|
799
|
+
expected_output_cols=expected_output_cols,
|
734
800
|
**transform_kwargs
|
735
801
|
)
|
736
802
|
return output_df
|
@@ -759,12 +825,14 @@ class LGBMClassifier(BaseTransformer):
|
|
759
825
|
Output dataset with probability of the sample for each class in the model.
|
760
826
|
"""
|
761
827
|
super()._check_dataset_type(dataset)
|
762
|
-
inference_method="score_samples"
|
828
|
+
inference_method = "score_samples"
|
763
829
|
|
764
830
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
765
831
|
# are specific to the type of dataset used.
|
766
832
|
transform_kwargs: BatchInferenceKwargsTypedDict = dict()
|
767
833
|
|
834
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
835
|
+
|
768
836
|
if isinstance(dataset, DataFrame):
|
769
837
|
self._deps = self._batch_inference_validate_snowpark(
|
770
838
|
dataset=dataset,
|
@@ -777,6 +845,9 @@ class LGBMClassifier(BaseTransformer):
|
|
777
845
|
drop_input_cols = self._drop_input_cols,
|
778
846
|
expected_output_cols_type="float",
|
779
847
|
)
|
848
|
+
expected_output_cols = self._align_expected_output_names(
|
849
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
850
|
+
)
|
780
851
|
|
781
852
|
elif isinstance(dataset, pd.DataFrame):
|
782
853
|
transform_kwargs = dict(
|
@@ -795,7 +866,7 @@ class LGBMClassifier(BaseTransformer):
|
|
795
866
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
796
867
|
inference_method=inference_method,
|
797
868
|
input_cols=self.input_cols,
|
798
|
-
expected_output_cols=
|
869
|
+
expected_output_cols=expected_output_cols,
|
799
870
|
**transform_kwargs
|
800
871
|
)
|
801
872
|
return output_df
|
@@ -841,7 +912,7 @@ class LGBMClassifier(BaseTransformer):
|
|
841
912
|
transform_kwargs = dict(
|
842
913
|
session=dataset._session,
|
843
914
|
dependencies=["snowflake-snowpark-python"] + self._deps,
|
844
|
-
score_sproc_imports=['lightgbm'],
|
915
|
+
score_sproc_imports=['lightgbm', 'sklearn'],
|
845
916
|
)
|
846
917
|
elif isinstance(dataset, pd.DataFrame):
|
847
918
|
# pandas_handler.score() does not require any extra kwargs.
|
@@ -942,50 +1013,84 @@ class LGBMClassifier(BaseTransformer):
|
|
942
1013
|
)
|
943
1014
|
return output_df
|
944
1015
|
|
1016
|
+
|
1017
|
+
|
1018
|
+
def to_lightgbm(self) -> Any:
|
1019
|
+
"""Get lightgbm.LGBMClassifier object.
|
1020
|
+
"""
|
1021
|
+
if self._sklearn_object is None:
|
1022
|
+
self._sklearn_object = self._create_sklearn_object()
|
1023
|
+
return self._sklearn_object
|
1024
|
+
|
1025
|
+
def to_sklearn(self) -> Any:
|
1026
|
+
raise exceptions.SnowflakeMLException(
|
1027
|
+
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1028
|
+
original_exception=AttributeError(
|
1029
|
+
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1030
|
+
"to_sklearn()",
|
1031
|
+
"to_lightgbm()"
|
1032
|
+
)
|
1033
|
+
),
|
1034
|
+
)
|
1035
|
+
|
1036
|
+
def to_xgboost(self) -> Any:
|
1037
|
+
raise exceptions.SnowflakeMLException(
|
1038
|
+
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1039
|
+
original_exception=AttributeError(
|
1040
|
+
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1041
|
+
"to_xgboost()",
|
1042
|
+
"to_lightgbm()"
|
1043
|
+
)
|
1044
|
+
),
|
1045
|
+
)
|
945
1046
|
|
946
|
-
def
|
1047
|
+
def _get_dependencies(self) -> List[str]:
|
1048
|
+
return self._deps
|
1049
|
+
|
1050
|
+
|
1051
|
+
def _generate_model_signatures(self, dataset: Union[DataFrame, pd.DataFrame]) -> None:
|
947
1052
|
self._model_signature_dict = dict()
|
948
1053
|
|
949
1054
|
PROB_FUNCTIONS = ["predict_log_proba", "predict_proba", "decision_function"]
|
950
1055
|
|
951
|
-
inputs = list(_infer_signature(dataset[self.input_cols], "input"))
|
1056
|
+
inputs = list(_infer_signature(dataset[self.input_cols], "input", use_snowflake_identifiers=True))
|
952
1057
|
outputs: List[BaseFeatureSpec] = []
|
953
1058
|
if hasattr(self, "predict"):
|
954
1059
|
# keep mypy happy
|
955
|
-
assert self._sklearn_object is not None and hasattr(self._sklearn_object, "_estimator_type")
|
1060
|
+
assert self._sklearn_object is not None and hasattr(self._sklearn_object, "_estimator_type")
|
956
1061
|
# For classifier, the type of predict is the same as the type of label
|
957
|
-
if self._sklearn_object._estimator_type ==
|
958
|
-
|
1062
|
+
if self._sklearn_object._estimator_type == "classifier":
|
1063
|
+
# label columns is the desired type for output
|
959
1064
|
outputs = list(_infer_signature(dataset[self.label_cols], "output", use_snowflake_identifiers=True))
|
960
1065
|
# rename the output columns
|
961
1066
|
outputs = list(model_signature_utils.rename_features(outputs, self.output_cols))
|
962
|
-
self._model_signature_dict["predict"] = ModelSignature(
|
963
|
-
|
964
|
-
|
1067
|
+
self._model_signature_dict["predict"] = ModelSignature(
|
1068
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1069
|
+
)
|
965
1070
|
# For mixture models that use the density mixin, `predict` returns the argmax of the log prob.
|
966
1071
|
# For outlier models, returns -1 for outliers and 1 for inliers.
|
967
|
-
# Clusterer returns int64 cluster labels.
|
1072
|
+
# Clusterer returns int64 cluster labels.
|
968
1073
|
elif self._sklearn_object._estimator_type in ["DensityEstimator", "clusterer", "outlier_detector"]:
|
969
1074
|
outputs = [FeatureSpec(dtype=DataType.INT64, name=c) for c in self.output_cols]
|
970
|
-
self._model_signature_dict["predict"] = ModelSignature(
|
971
|
-
|
972
|
-
|
973
|
-
|
1075
|
+
self._model_signature_dict["predict"] = ModelSignature(
|
1076
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1077
|
+
)
|
1078
|
+
|
974
1079
|
# For regressor, the type of predict is float64
|
975
|
-
elif self._sklearn_object._estimator_type ==
|
1080
|
+
elif self._sklearn_object._estimator_type == "regressor":
|
976
1081
|
outputs = [FeatureSpec(dtype=DataType.DOUBLE, name=c) for c in self.output_cols]
|
977
|
-
self._model_signature_dict["predict"] = ModelSignature(
|
978
|
-
|
979
|
-
|
980
|
-
|
1082
|
+
self._model_signature_dict["predict"] = ModelSignature(
|
1083
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1084
|
+
)
|
1085
|
+
|
981
1086
|
for prob_func in PROB_FUNCTIONS:
|
982
1087
|
if hasattr(self, prob_func):
|
983
1088
|
output_cols_prefix: str = f"{prob_func}_"
|
984
1089
|
output_column_names = self._get_output_column_names(output_cols_prefix)
|
985
1090
|
outputs = [FeatureSpec(dtype=DataType.DOUBLE, name=c) for c in output_column_names]
|
986
|
-
self._model_signature_dict[prob_func] = ModelSignature(
|
987
|
-
|
988
|
-
|
1091
|
+
self._model_signature_dict[prob_func] = ModelSignature(
|
1092
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1093
|
+
)
|
989
1094
|
|
990
1095
|
# Output signature names may still need to be renamed, since they were not created with `_infer_signature`.
|
991
1096
|
items = list(self._model_signature_dict.items())
|
@@ -998,10 +1103,10 @@ class LGBMClassifier(BaseTransformer):
|
|
998
1103
|
"""Returns model signature of current class.
|
999
1104
|
|
1000
1105
|
Raises:
|
1001
|
-
|
1106
|
+
SnowflakeMLException: If estimator is not fitted, then model signature cannot be inferred
|
1002
1107
|
|
1003
1108
|
Returns:
|
1004
|
-
Dict
|
1109
|
+
Dict with each method and its input output signature
|
1005
1110
|
"""
|
1006
1111
|
if self._model_signature_dict is None:
|
1007
1112
|
raise exceptions.SnowflakeMLException(
|
@@ -1009,35 +1114,3 @@ class LGBMClassifier(BaseTransformer):
|
|
1009
1114
|
original_exception=RuntimeError("Estimator not fitted before accessing property model_signatures!"),
|
1010
1115
|
)
|
1011
1116
|
return self._model_signature_dict
|
1012
|
-
|
1013
|
-
def to_lightgbm(self) -> Any:
|
1014
|
-
"""Get lightgbm.LGBMClassifier object.
|
1015
|
-
"""
|
1016
|
-
if self._sklearn_object is None:
|
1017
|
-
self._sklearn_object = self._create_sklearn_object()
|
1018
|
-
return self._sklearn_object
|
1019
|
-
|
1020
|
-
def to_sklearn(self) -> Any:
|
1021
|
-
raise exceptions.SnowflakeMLException(
|
1022
|
-
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1023
|
-
original_exception=AttributeError(
|
1024
|
-
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1025
|
-
"to_sklearn()",
|
1026
|
-
"to_lightgbm()"
|
1027
|
-
)
|
1028
|
-
),
|
1029
|
-
)
|
1030
|
-
|
1031
|
-
def to_xgboost(self) -> Any:
|
1032
|
-
raise exceptions.SnowflakeMLException(
|
1033
|
-
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1034
|
-
original_exception=AttributeError(
|
1035
|
-
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1036
|
-
"to_xgboost()",
|
1037
|
-
"to_lightgbm()"
|
1038
|
-
)
|
1039
|
-
),
|
1040
|
-
)
|
1041
|
-
|
1042
|
-
def _get_dependencies(self) -> List[str]:
|
1043
|
-
return self._deps
|