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
@@ -33,6 +33,15 @@ from snowflake.ml.modeling._internal.transformer_protocols import (
|
|
33
33
|
BatchInferenceKwargsTypedDict,
|
34
34
|
ScoreKwargsTypedDict
|
35
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
|
+
)
|
36
45
|
|
37
46
|
from snowflake.ml.modeling._internal.model_transformer_builder import ModelTransformerBuilder
|
38
47
|
|
@@ -43,16 +52,6 @@ from snowflake.ml.modeling._internal.estimator_utils import (
|
|
43
52
|
validate_sklearn_args,
|
44
53
|
)
|
45
54
|
|
46
|
-
from snowflake.ml.model.model_signature import (
|
47
|
-
DataType,
|
48
|
-
FeatureSpec,
|
49
|
-
ModelSignature,
|
50
|
-
_infer_signature,
|
51
|
-
_rename_signature_with_snowflake_identifiers,
|
52
|
-
BaseFeatureSpec,
|
53
|
-
)
|
54
|
-
from snowflake.ml.model._signatures import utils as model_signature_utils
|
55
|
-
|
56
55
|
_PROJECT = "ModelDevelopment"
|
57
56
|
# Derive subproject from module name by removing "sklearn"
|
58
57
|
# and converting module name from underscore to CamelCase
|
@@ -279,12 +278,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
279
278
|
)
|
280
279
|
return selected_cols
|
281
280
|
|
282
|
-
|
283
|
-
project=_PROJECT,
|
284
|
-
subproject=_SUBPROJECT,
|
285
|
-
custom_tags=dict([("autogen", True)]),
|
286
|
-
)
|
287
|
-
def fit(self, dataset: Union[DataFrame, pd.DataFrame]) -> "MultiTaskLassoCV":
|
281
|
+
def _fit(self, dataset: Union[DataFrame, pd.DataFrame]) -> "MultiTaskLassoCV":
|
288
282
|
"""Fit MultiTaskLasso model with coordinate descent
|
289
283
|
For more details on this function, see [sklearn.linear_model.MultiTaskLassoCV.fit]
|
290
284
|
(https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskLassoCV.html#sklearn.linear_model.MultiTaskLassoCV.fit)
|
@@ -311,12 +305,14 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
311
305
|
|
312
306
|
self._snowpark_cols = dataset.select(self.input_cols).columns
|
313
307
|
|
314
|
-
|
308
|
+
# If we are already in a stored procedure, no need to kick off another one.
|
315
309
|
if SNOWML_SPROC_ENV in os.environ:
|
316
310
|
statement_params = telemetry.get_function_usage_statement_params(
|
317
311
|
project=_PROJECT,
|
318
312
|
subproject=_SUBPROJECT,
|
319
|
-
function_name=telemetry.get_statement_params_full_func_name(
|
313
|
+
function_name=telemetry.get_statement_params_full_func_name(
|
314
|
+
inspect.currentframe(), MultiTaskLassoCV.__class__.__name__
|
315
|
+
),
|
320
316
|
api_calls=[Session.call],
|
321
317
|
custom_tags=dict([("autogen", True)]) if self._autogenerated else None,
|
322
318
|
)
|
@@ -337,7 +333,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
337
333
|
)
|
338
334
|
self._sklearn_object = model_trainer.train()
|
339
335
|
self._is_fitted = True
|
340
|
-
self.
|
336
|
+
self._generate_model_signatures(dataset)
|
341
337
|
return self
|
342
338
|
|
343
339
|
def _batch_inference_validate_snowpark(
|
@@ -413,7 +409,9 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
413
409
|
# when it is classifier, infer the datatype from label columns
|
414
410
|
if expected_type_inferred == "" and 'predict' in self.model_signatures:
|
415
411
|
# Batch inference takes a single expected output column type. Use the first columns type for now.
|
416
|
-
label_cols_signatures = [
|
412
|
+
label_cols_signatures = [
|
413
|
+
row for row in self.model_signatures['predict'].outputs if row.name in self.output_cols
|
414
|
+
]
|
417
415
|
if len(label_cols_signatures) == 0:
|
418
416
|
error_str = f"Output columns {self.output_cols} do not match model signatures {self.model_signatures['predict'].outputs}."
|
419
417
|
raise exceptions.SnowflakeMLException(
|
@@ -421,25 +419,22 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
421
419
|
original_exception=ValueError(error_str),
|
422
420
|
)
|
423
421
|
|
424
|
-
expected_type_inferred = convert_sp_to_sf_type(
|
425
|
-
label_cols_signatures[0].as_snowpark_type()
|
426
|
-
)
|
422
|
+
expected_type_inferred = convert_sp_to_sf_type(label_cols_signatures[0].as_snowpark_type())
|
427
423
|
|
428
424
|
self._deps = self._batch_inference_validate_snowpark(dataset=dataset, inference_method=inference_method)
|
429
|
-
assert isinstance(
|
425
|
+
assert isinstance(
|
426
|
+
dataset._session, Session
|
427
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
430
428
|
|
431
429
|
transform_kwargs = dict(
|
432
|
-
session
|
433
|
-
dependencies
|
434
|
-
drop_input_cols
|
435
|
-
expected_output_cols_type
|
430
|
+
session=dataset._session,
|
431
|
+
dependencies=self._deps,
|
432
|
+
drop_input_cols=self._drop_input_cols,
|
433
|
+
expected_output_cols_type=expected_type_inferred,
|
436
434
|
)
|
437
435
|
|
438
436
|
elif isinstance(dataset, pd.DataFrame):
|
439
|
-
transform_kwargs = dict(
|
440
|
-
snowpark_input_cols = self._snowpark_cols,
|
441
|
-
drop_input_cols = self._drop_input_cols
|
442
|
-
)
|
437
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
443
438
|
|
444
439
|
transform_handlers = ModelTransformerBuilder.build(
|
445
440
|
dataset=dataset,
|
@@ -479,7 +474,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
479
474
|
Transformed dataset.
|
480
475
|
"""
|
481
476
|
super()._check_dataset_type(dataset)
|
482
|
-
inference_method="transform"
|
477
|
+
inference_method = "transform"
|
483
478
|
|
484
479
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
485
480
|
# are specific to the type of dataset used.
|
@@ -516,17 +511,14 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
516
511
|
assert isinstance(dataset._session, Session) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
517
512
|
|
518
513
|
transform_kwargs = dict(
|
519
|
-
session
|
520
|
-
dependencies
|
521
|
-
drop_input_cols
|
522
|
-
expected_output_cols_type
|
514
|
+
session=dataset._session,
|
515
|
+
dependencies=self._deps,
|
516
|
+
drop_input_cols=self._drop_input_cols,
|
517
|
+
expected_output_cols_type=expected_dtype,
|
523
518
|
)
|
524
519
|
|
525
520
|
elif isinstance(dataset, pd.DataFrame):
|
526
|
-
transform_kwargs = dict(
|
527
|
-
snowpark_input_cols = self._snowpark_cols,
|
528
|
-
drop_input_cols = self._drop_input_cols
|
529
|
-
)
|
521
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
530
522
|
|
531
523
|
transform_handlers = ModelTransformerBuilder.build(
|
532
524
|
dataset=dataset,
|
@@ -545,7 +537,11 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
545
537
|
return output_df
|
546
538
|
|
547
539
|
@available_if(original_estimator_has_callable("fit_predict")) # type: ignore[misc]
|
548
|
-
def fit_predict(
|
540
|
+
def fit_predict(
|
541
|
+
self,
|
542
|
+
dataset: Union[DataFrame, pd.DataFrame],
|
543
|
+
output_cols_prefix: str = "fit_predict_",
|
544
|
+
) -> Union[DataFrame, pd.DataFrame]:
|
549
545
|
""" Method not supported for this class.
|
550
546
|
|
551
547
|
|
@@ -570,7 +566,9 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
570
566
|
)
|
571
567
|
output_result, fitted_estimator = model_trainer.train_fit_predict(
|
572
568
|
drop_input_cols=self._drop_input_cols,
|
573
|
-
expected_output_cols_list=
|
569
|
+
expected_output_cols_list=(
|
570
|
+
self.output_cols if self.output_cols else self._get_output_column_names(output_cols_prefix)
|
571
|
+
),
|
574
572
|
)
|
575
573
|
self._sklearn_object = fitted_estimator
|
576
574
|
self._is_fitted = True
|
@@ -587,6 +585,62 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
587
585
|
assert self._sklearn_object is not None
|
588
586
|
return self._sklearn_object.embedding_
|
589
587
|
|
588
|
+
|
589
|
+
def _get_output_column_names(self, output_cols_prefix: str, output_cols: Optional[List[str]] = None) -> List[str]:
|
590
|
+
""" Returns the list of output columns for predict_proba(), decision_function(), etc.. functions.
|
591
|
+
Returns a list with output_cols_prefix as the only element if the estimator is not a classifier.
|
592
|
+
"""
|
593
|
+
output_cols_prefix = identifier.resolve_identifier(output_cols_prefix)
|
594
|
+
# The following condition is introduced for kneighbors methods, and not used in other methods
|
595
|
+
if output_cols:
|
596
|
+
output_cols = [
|
597
|
+
identifier.concat_names([output_cols_prefix, identifier.resolve_identifier(c)])
|
598
|
+
for c in output_cols
|
599
|
+
]
|
600
|
+
elif getattr(self._sklearn_object, "classes_", None) is None:
|
601
|
+
output_cols = [output_cols_prefix]
|
602
|
+
elif self._sklearn_object is not None:
|
603
|
+
classes = self._sklearn_object.classes_
|
604
|
+
if isinstance(classes, numpy.ndarray):
|
605
|
+
output_cols = [f'{output_cols_prefix}{str(c)}' for c in classes.tolist()]
|
606
|
+
elif isinstance(classes, list) and len(classes) > 0 and isinstance(classes[0], numpy.ndarray):
|
607
|
+
# If the estimator is a multioutput estimator, classes_ will be a list of ndarrays.
|
608
|
+
output_cols = []
|
609
|
+
for i, cl in enumerate(classes):
|
610
|
+
# For binary classification, there is only one output column for each class
|
611
|
+
# ndarray as the two classes are complementary.
|
612
|
+
if len(cl) == 2:
|
613
|
+
output_cols.append(f'{output_cols_prefix}{i}_{cl[0]}')
|
614
|
+
else:
|
615
|
+
output_cols.extend([
|
616
|
+
f'{output_cols_prefix}{i}_{c}' for c in cl.tolist()
|
617
|
+
])
|
618
|
+
else:
|
619
|
+
output_cols = []
|
620
|
+
|
621
|
+
# Make sure column names are valid snowflake identifiers.
|
622
|
+
assert output_cols is not None # Make MyPy happy
|
623
|
+
rv = [identifier.rename_to_valid_snowflake_identifier(c) for c in output_cols]
|
624
|
+
|
625
|
+
return rv
|
626
|
+
|
627
|
+
def _align_expected_output_names(
|
628
|
+
self, method: str, dataset: DataFrame, expected_output_cols_list: List[str], output_cols_prefix: str
|
629
|
+
) -> List[str]:
|
630
|
+
# in case the inferred output column names dimension is different
|
631
|
+
# we use one line of snowpark dataframe and put it into sklearn estimator using pandas
|
632
|
+
output_df_pd = getattr(self, method)(dataset.limit(1).to_pandas(), output_cols_prefix)
|
633
|
+
output_df_columns = list(output_df_pd.columns)
|
634
|
+
output_df_columns_set: Set[str] = set(output_df_columns) - set(dataset.columns)
|
635
|
+
if self.sample_weight_col:
|
636
|
+
output_df_columns_set -= set(self.sample_weight_col)
|
637
|
+
# if the dimension of inferred output column names is correct; use it
|
638
|
+
if len(expected_output_cols_list) == len(output_df_columns_set):
|
639
|
+
return expected_output_cols_list
|
640
|
+
# otherwise, use the sklearn estimator's output
|
641
|
+
else:
|
642
|
+
return sorted(list(output_df_columns_set), key=lambda x: output_df_columns.index(x))
|
643
|
+
|
590
644
|
@available_if(original_estimator_has_callable("predict_proba")) # type: ignore[misc]
|
591
645
|
@telemetry.send_api_usage_telemetry(
|
592
646
|
project=_PROJECT,
|
@@ -617,24 +671,28 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
617
671
|
# are specific to the type of dataset used.
|
618
672
|
transform_kwargs: BatchInferenceKwargsTypedDict = dict()
|
619
673
|
|
674
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
675
|
+
|
620
676
|
if isinstance(dataset, DataFrame):
|
621
677
|
self._deps = self._batch_inference_validate_snowpark(
|
622
678
|
dataset=dataset,
|
623
679
|
inference_method=inference_method,
|
624
680
|
)
|
625
|
-
assert isinstance(
|
681
|
+
assert isinstance(
|
682
|
+
dataset._session, Session
|
683
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
626
684
|
transform_kwargs = dict(
|
627
685
|
session=dataset._session,
|
628
686
|
dependencies=self._deps,
|
629
|
-
drop_input_cols
|
687
|
+
drop_input_cols=self._drop_input_cols,
|
630
688
|
expected_output_cols_type="float",
|
631
689
|
)
|
690
|
+
expected_output_cols = self._align_expected_output_names(
|
691
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
692
|
+
)
|
632
693
|
|
633
694
|
elif isinstance(dataset, pd.DataFrame):
|
634
|
-
transform_kwargs = dict(
|
635
|
-
snowpark_input_cols = self._snowpark_cols,
|
636
|
-
drop_input_cols = self._drop_input_cols
|
637
|
-
)
|
695
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
638
696
|
|
639
697
|
transform_handlers = ModelTransformerBuilder.build(
|
640
698
|
dataset=dataset,
|
@@ -646,7 +704,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
646
704
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
647
705
|
inference_method=inference_method,
|
648
706
|
input_cols=self.input_cols,
|
649
|
-
expected_output_cols=
|
707
|
+
expected_output_cols=expected_output_cols,
|
650
708
|
**transform_kwargs
|
651
709
|
)
|
652
710
|
return output_df
|
@@ -676,7 +734,8 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
676
734
|
Output dataset with log probability of the sample for each class in the model.
|
677
735
|
"""
|
678
736
|
super()._check_dataset_type(dataset)
|
679
|
-
inference_method="predict_log_proba"
|
737
|
+
inference_method = "predict_log_proba"
|
738
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
680
739
|
|
681
740
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
682
741
|
# are specific to the type of dataset used.
|
@@ -687,18 +746,20 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
687
746
|
dataset=dataset,
|
688
747
|
inference_method=inference_method,
|
689
748
|
)
|
690
|
-
assert isinstance(
|
749
|
+
assert isinstance(
|
750
|
+
dataset._session, Session
|
751
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
691
752
|
transform_kwargs = dict(
|
692
753
|
session=dataset._session,
|
693
754
|
dependencies=self._deps,
|
694
|
-
drop_input_cols
|
755
|
+
drop_input_cols=self._drop_input_cols,
|
695
756
|
expected_output_cols_type="float",
|
696
757
|
)
|
758
|
+
expected_output_cols = self._align_expected_output_names(
|
759
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
760
|
+
)
|
697
761
|
elif isinstance(dataset, pd.DataFrame):
|
698
|
-
transform_kwargs = dict(
|
699
|
-
snowpark_input_cols = self._snowpark_cols,
|
700
|
-
drop_input_cols = self._drop_input_cols
|
701
|
-
)
|
762
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
702
763
|
|
703
764
|
transform_handlers = ModelTransformerBuilder.build(
|
704
765
|
dataset=dataset,
|
@@ -711,7 +772,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
711
772
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
712
773
|
inference_method=inference_method,
|
713
774
|
input_cols=self.input_cols,
|
714
|
-
expected_output_cols=
|
775
|
+
expected_output_cols=expected_output_cols,
|
715
776
|
**transform_kwargs
|
716
777
|
)
|
717
778
|
return output_df
|
@@ -737,30 +798,34 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
737
798
|
Output dataset with results of the decision function for the samples in input dataset.
|
738
799
|
"""
|
739
800
|
super()._check_dataset_type(dataset)
|
740
|
-
inference_method="decision_function"
|
801
|
+
inference_method = "decision_function"
|
741
802
|
|
742
803
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
743
804
|
# are specific to the type of dataset used.
|
744
805
|
transform_kwargs: BatchInferenceKwargsTypedDict = dict()
|
745
806
|
|
807
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
808
|
+
|
746
809
|
if isinstance(dataset, DataFrame):
|
747
810
|
self._deps = self._batch_inference_validate_snowpark(
|
748
811
|
dataset=dataset,
|
749
812
|
inference_method=inference_method,
|
750
813
|
)
|
751
|
-
assert isinstance(
|
814
|
+
assert isinstance(
|
815
|
+
dataset._session, Session
|
816
|
+
) # mypy does not recognize the check in _batch_inference_validate_snowpark()
|
752
817
|
transform_kwargs = dict(
|
753
818
|
session=dataset._session,
|
754
819
|
dependencies=self._deps,
|
755
|
-
drop_input_cols
|
820
|
+
drop_input_cols=self._drop_input_cols,
|
756
821
|
expected_output_cols_type="float",
|
757
822
|
)
|
823
|
+
expected_output_cols = self._align_expected_output_names(
|
824
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
825
|
+
)
|
758
826
|
|
759
827
|
elif isinstance(dataset, pd.DataFrame):
|
760
|
-
transform_kwargs = dict(
|
761
|
-
snowpark_input_cols = self._snowpark_cols,
|
762
|
-
drop_input_cols = self._drop_input_cols
|
763
|
-
)
|
828
|
+
transform_kwargs = dict(snowpark_input_cols=self._snowpark_cols, drop_input_cols=self._drop_input_cols)
|
764
829
|
|
765
830
|
transform_handlers = ModelTransformerBuilder.build(
|
766
831
|
dataset=dataset,
|
@@ -773,7 +838,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
773
838
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
774
839
|
inference_method=inference_method,
|
775
840
|
input_cols=self.input_cols,
|
776
|
-
expected_output_cols=
|
841
|
+
expected_output_cols=expected_output_cols,
|
777
842
|
**transform_kwargs
|
778
843
|
)
|
779
844
|
return output_df
|
@@ -802,12 +867,14 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
802
867
|
Output dataset with probability of the sample for each class in the model.
|
803
868
|
"""
|
804
869
|
super()._check_dataset_type(dataset)
|
805
|
-
inference_method="score_samples"
|
870
|
+
inference_method = "score_samples"
|
806
871
|
|
807
872
|
# This dictionary contains optional kwargs for batch inference. These kwargs
|
808
873
|
# are specific to the type of dataset used.
|
809
874
|
transform_kwargs: BatchInferenceKwargsTypedDict = dict()
|
810
875
|
|
876
|
+
expected_output_cols = self._get_output_column_names(output_cols_prefix)
|
877
|
+
|
811
878
|
if isinstance(dataset, DataFrame):
|
812
879
|
self._deps = self._batch_inference_validate_snowpark(
|
813
880
|
dataset=dataset,
|
@@ -820,6 +887,9 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
820
887
|
drop_input_cols = self._drop_input_cols,
|
821
888
|
expected_output_cols_type="float",
|
822
889
|
)
|
890
|
+
expected_output_cols = self._align_expected_output_names(
|
891
|
+
inference_method, dataset, expected_output_cols, output_cols_prefix
|
892
|
+
)
|
823
893
|
|
824
894
|
elif isinstance(dataset, pd.DataFrame):
|
825
895
|
transform_kwargs = dict(
|
@@ -838,7 +908,7 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
838
908
|
output_df: DATAFRAME_TYPE = transform_handlers.batch_inference(
|
839
909
|
inference_method=inference_method,
|
840
910
|
input_cols=self.input_cols,
|
841
|
-
expected_output_cols=
|
911
|
+
expected_output_cols=expected_output_cols,
|
842
912
|
**transform_kwargs
|
843
913
|
)
|
844
914
|
return output_df
|
@@ -985,50 +1055,84 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
985
1055
|
)
|
986
1056
|
return output_df
|
987
1057
|
|
1058
|
+
|
1059
|
+
|
1060
|
+
def to_sklearn(self) -> Any:
|
1061
|
+
"""Get sklearn.linear_model.MultiTaskLassoCV object.
|
1062
|
+
"""
|
1063
|
+
if self._sklearn_object is None:
|
1064
|
+
self._sklearn_object = self._create_sklearn_object()
|
1065
|
+
return self._sklearn_object
|
1066
|
+
|
1067
|
+
def to_xgboost(self) -> Any:
|
1068
|
+
raise exceptions.SnowflakeMLException(
|
1069
|
+
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1070
|
+
original_exception=AttributeError(
|
1071
|
+
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1072
|
+
"to_xgboost()",
|
1073
|
+
"to_sklearn()"
|
1074
|
+
)
|
1075
|
+
),
|
1076
|
+
)
|
1077
|
+
|
1078
|
+
def to_lightgbm(self) -> Any:
|
1079
|
+
raise exceptions.SnowflakeMLException(
|
1080
|
+
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1081
|
+
original_exception=AttributeError(
|
1082
|
+
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1083
|
+
"to_lightgbm()",
|
1084
|
+
"to_sklearn()"
|
1085
|
+
)
|
1086
|
+
),
|
1087
|
+
)
|
988
1088
|
|
989
|
-
def
|
1089
|
+
def _get_dependencies(self) -> List[str]:
|
1090
|
+
return self._deps
|
1091
|
+
|
1092
|
+
|
1093
|
+
def _generate_model_signatures(self, dataset: Union[DataFrame, pd.DataFrame]) -> None:
|
990
1094
|
self._model_signature_dict = dict()
|
991
1095
|
|
992
1096
|
PROB_FUNCTIONS = ["predict_log_proba", "predict_proba", "decision_function"]
|
993
1097
|
|
994
|
-
inputs = list(_infer_signature(dataset[self.input_cols], "input"))
|
1098
|
+
inputs = list(_infer_signature(dataset[self.input_cols], "input", use_snowflake_identifiers=True))
|
995
1099
|
outputs: List[BaseFeatureSpec] = []
|
996
1100
|
if hasattr(self, "predict"):
|
997
1101
|
# keep mypy happy
|
998
|
-
assert self._sklearn_object is not None and hasattr(self._sklearn_object, "_estimator_type")
|
1102
|
+
assert self._sklearn_object is not None and hasattr(self._sklearn_object, "_estimator_type")
|
999
1103
|
# For classifier, the type of predict is the same as the type of label
|
1000
|
-
if self._sklearn_object._estimator_type ==
|
1001
|
-
|
1104
|
+
if self._sklearn_object._estimator_type == "classifier":
|
1105
|
+
# label columns is the desired type for output
|
1002
1106
|
outputs = list(_infer_signature(dataset[self.label_cols], "output", use_snowflake_identifiers=True))
|
1003
1107
|
# rename the output columns
|
1004
1108
|
outputs = list(model_signature_utils.rename_features(outputs, self.output_cols))
|
1005
|
-
self._model_signature_dict["predict"] = ModelSignature(
|
1006
|
-
|
1007
|
-
|
1109
|
+
self._model_signature_dict["predict"] = ModelSignature(
|
1110
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1111
|
+
)
|
1008
1112
|
# For mixture models that use the density mixin, `predict` returns the argmax of the log prob.
|
1009
1113
|
# For outlier models, returns -1 for outliers and 1 for inliers.
|
1010
|
-
# Clusterer returns int64 cluster labels.
|
1114
|
+
# Clusterer returns int64 cluster labels.
|
1011
1115
|
elif self._sklearn_object._estimator_type in ["DensityEstimator", "clusterer", "outlier_detector"]:
|
1012
1116
|
outputs = [FeatureSpec(dtype=DataType.INT64, name=c) for c in self.output_cols]
|
1013
|
-
self._model_signature_dict["predict"] = ModelSignature(
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1117
|
+
self._model_signature_dict["predict"] = ModelSignature(
|
1118
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1119
|
+
)
|
1120
|
+
|
1017
1121
|
# For regressor, the type of predict is float64
|
1018
|
-
elif self._sklearn_object._estimator_type ==
|
1122
|
+
elif self._sklearn_object._estimator_type == "regressor":
|
1019
1123
|
outputs = [FeatureSpec(dtype=DataType.DOUBLE, name=c) for c in self.output_cols]
|
1020
|
-
self._model_signature_dict["predict"] = ModelSignature(
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1124
|
+
self._model_signature_dict["predict"] = ModelSignature(
|
1125
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1126
|
+
)
|
1127
|
+
|
1024
1128
|
for prob_func in PROB_FUNCTIONS:
|
1025
1129
|
if hasattr(self, prob_func):
|
1026
1130
|
output_cols_prefix: str = f"{prob_func}_"
|
1027
1131
|
output_column_names = self._get_output_column_names(output_cols_prefix)
|
1028
1132
|
outputs = [FeatureSpec(dtype=DataType.DOUBLE, name=c) for c in output_column_names]
|
1029
|
-
self._model_signature_dict[prob_func] = ModelSignature(
|
1030
|
-
|
1031
|
-
|
1133
|
+
self._model_signature_dict[prob_func] = ModelSignature(
|
1134
|
+
inputs, ([] if self._drop_input_cols else inputs) + outputs
|
1135
|
+
)
|
1032
1136
|
|
1033
1137
|
# Output signature names may still need to be renamed, since they were not created with `_infer_signature`.
|
1034
1138
|
items = list(self._model_signature_dict.items())
|
@@ -1041,10 +1145,10 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
1041
1145
|
"""Returns model signature of current class.
|
1042
1146
|
|
1043
1147
|
Raises:
|
1044
|
-
|
1148
|
+
SnowflakeMLException: If estimator is not fitted, then model signature cannot be inferred
|
1045
1149
|
|
1046
1150
|
Returns:
|
1047
|
-
Dict
|
1151
|
+
Dict with each method and its input output signature
|
1048
1152
|
"""
|
1049
1153
|
if self._model_signature_dict is None:
|
1050
1154
|
raise exceptions.SnowflakeMLException(
|
@@ -1052,35 +1156,3 @@ class MultiTaskLassoCV(BaseTransformer):
|
|
1052
1156
|
original_exception=RuntimeError("Estimator not fitted before accessing property model_signatures!"),
|
1053
1157
|
)
|
1054
1158
|
return self._model_signature_dict
|
1055
|
-
|
1056
|
-
def to_sklearn(self) -> Any:
|
1057
|
-
"""Get sklearn.linear_model.MultiTaskLassoCV object.
|
1058
|
-
"""
|
1059
|
-
if self._sklearn_object is None:
|
1060
|
-
self._sklearn_object = self._create_sklearn_object()
|
1061
|
-
return self._sklearn_object
|
1062
|
-
|
1063
|
-
def to_xgboost(self) -> Any:
|
1064
|
-
raise exceptions.SnowflakeMLException(
|
1065
|
-
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1066
|
-
original_exception=AttributeError(
|
1067
|
-
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1068
|
-
"to_xgboost()",
|
1069
|
-
"to_sklearn()"
|
1070
|
-
)
|
1071
|
-
),
|
1072
|
-
)
|
1073
|
-
|
1074
|
-
def to_lightgbm(self) -> Any:
|
1075
|
-
raise exceptions.SnowflakeMLException(
|
1076
|
-
error_code=error_codes.METHOD_NOT_ALLOWED,
|
1077
|
-
original_exception=AttributeError(
|
1078
|
-
modeling_error_messages.UNSUPPORTED_MODEL_CONVERSION.format(
|
1079
|
-
"to_lightgbm()",
|
1080
|
-
"to_sklearn()"
|
1081
|
-
)
|
1082
|
-
),
|
1083
|
-
)
|
1084
|
-
|
1085
|
-
def _get_dependencies(self) -> List[str]:
|
1086
|
-
return self._deps
|