Snowpark ML Modeling : modèle de développement ML

Snowpark ML Modeling est une collection d’APIs Python pour le prétraitement des données et l’entraînement des modèles. En utilisant Snowpark ML Modeling pour effectuer ces tâches au sein de Snowflake, vous pouvez :

  • Transformer vos données et d’entraîner vos modèles sans déplacer vos données hors de Snowflake.

  • Travailler avec des APIs similaires à celles que vous connaissez déjà, comme scikit-learn.

  • Faire en sorte que votre pipeline ML fonctionne dans les frameworks de sécurité et de gouvernance de Snowflake.

  • Profiter de la performance et de l’évolutivité des entrepôts de données de Snowflake.

Le paquet Snowpark ML Modeling décrit dans cette rubrique fournit des estimateurs et des transformateurs compatibles avec ceux des bibliothèques scikit-learn, xgboost et lightgbm. Vous pouvez utiliser ces APIs pour développer et entraîner des modèles de machine learning dans Snowflake.

Pour une introduction rapide à Snowpark ML Modeling, consultez notre guide pour faire vos premiers pas.

Note

Cette rubrique suppose que le module Snowpark ML est déjà installé. Si ce n’est pas le cas, consultez Installation de Snowpark ML.

Classes Snowpark ML Modeling

Toutes les classes Snowpark ML Modeling et les classes de prétraitement se trouvent dans l’espace de noms snowflake.ml.modeling. Les modules Snowpark ML portent le même nom que les modules correspondants de l’espace de noms sklearn. Par exemple, le module Snowpark ML correspondant à sklearn.calibration est snowflake.ml.modeling.calibration.

Les modules xgboost et lightgbm correspondent respectivement à snowflake.ml.modeling.xgboost et snowflake.ml.modeling.lightgbm.

Toutes les classes de scikit-learn ne sont pas prises en charge dans Snowpark ML. Le tableau ci-dessous indique les classes prises en charge. Les classes marquées d’un astérisque (*) prennent en charge l’exécution distribuée.

Astuce

Consultez la référence d” API Snowpark ML pour plus de détails sur la modélisation des API.

Nom du module Snowpark ML

Classes

snowflake.ml.modeling.calibration

  • CalibratedClassifierCV

snowflake.ml.modeling.cluster

  • AgglomerativeClustering

  • AffinityPropagation

  • Birch

  • DBSCAN

  • FeatureAgglomeration

  • KMeans

  • MeanShift

  • MiniBatchKMeans

  • OPTICS

  • SpectralBiclustering

  • SpectralClustering

  • SpectralCoclustering

snowflake.ml.modeling.compose

  • ColumnTransformer

  • TransformedTargetRegressor

snowflake.ml.modeling.covariance

  • EllipticEnvelope

  • EmpiricalCovariance

  • GraphicalLasso

  • GraphicalLassoCV

  • LedoitWolf

  • MinCovDet

  • OAS

  • ShrunkCovariance

snowflake.ml.modeling.decomposition

  • DictionaryLearning

  • FactorAnalysis

  • FastICA

  • IncrementalPCA

  • KernelPCA

  • MiniBatchDictionaryLearning

  • MiniBatchSparsePca

  • PCA

  • SparsePCA

  • TruncatedSVD

snowflake.ml.modeling.discriminant_analysis

  • LinearDiscriminantAnalysis

  • QuadraticDiscriminantAnalysis

snowflake.ml.modeling.ensemble

  • AdaBoostClassifier

  • AdaBoostRegressor

  • BaggingClassifier

  • BaggingRegressor

  • ExtraTreesClassifier

  • ExtraTreesRegressor

  • GradientBoostingClassifier

  • GradientBoostingRegressor

  • IsolationForest

  • RandomForestClassifier

  • RandomForestRegressor

  • StackingRegressor

  • VotingClassifier

  • VotingRegressor

snowflake.ml.modeling.feature_selection

  • GenericUnivariateSelect

  • SelectFdr

  • SelectFpr

  • SelectFwe

  • SelectKBest

  • SelectPercentile

  • SequentialFeatureSelector

  • VarianceThreshold

snowflake.ml.modeling.gaussian_process

  • GaussianProcessClassifier

  • GaussianProcessRegressor

snowflake.ml.modeling.impute

  • IterativeImputer

  • KNNImputer

  • MissingIndicator

  • SimpleImputer *

snowflake.ml.modeling.kernel_approximation

  • AdditiveChi2Sampler

  • Nystroem

  • PolynomialCountSketch

  • RBFSampler

  • SkewedChi2Sampler

snowflake.ml.modeling.kernel_ridge

  • KernelRidge

snowflake.ml.modeling.lightgbm

  • LGBMClassifier

  • LGBMRegressor

snowflake.ml.modeling.linear_model

  • ARDRegression

  • BayesianRidge

  • ElasticNet

  • ElasticNetCV

  • GammaRegressor

  • HuberRegressor

  • Lars

  • LarsCV

  • Lasso

  • LassoCV

  • LassoLars

  • LassoLarsCV

  • LassoLarsIC

  • LinearRegression

  • LogisticRegression

  • LogisticRegressionCV

  • MultiTaskElasticNet

  • MultiTaskElasticNetCV

  • MultiTaskLasso

  • MultiTaskLassoCV

  • OrthogonalMatchingPursuit

  • PassiveAggressiveClassifier

  • PassiveAggressiveRegressor

  • Perceptron

  • PoissonRegressor

  • RANSACRegressor

  • Ridge

  • RidgeClassifier

  • RidgeClassifierCV

  • RidgeCV

  • SGDClassifier

  • SGDOneClassSvm

  • SGDRegressor

  • TheilSenRegressor

  • TweedieRegressor

snowflake.ml.modeling.manifold

  • Isomap

  • MDS

  • SpectralEmbedding

  • TSNE

snowflake.ml.modeling.metrics

correlation :

  • correlation *

covariance :

  • covariance *

classification :

  • accuracy_score *

  • confusion_matrix *

  • f1_score

  • fbeta_score

  • log_loss

  • precision_recall_fscore_support

  • precision_score

  • recall_score

ranking :

  • precision_recall_curve

  • roc_auc_score

  • roc_curve

regression :

  • d2_absolute_error_score

  • d2_pinball_score

  • explained_variance_score

  • mean_absolute_error

  • mean_absolute_percentage_error

  • mean_squared_error

  • r2_score *

snowflake.ml.modeling.mixture

  • BayesianGaussianMixture

  • GaussianMixture

snowflake.ml.modeling.model_selection

  • GridSearchCV

  • RandomizedSearchCV

snowflake.ml.modeling.multiclass

  • OneVsOneClassifier

  • OneVsRestClassifier

  • OutputCodeClassifier

snowflake.ml.modeling.naive_bayes

  • BernoulliNB

  • CategoricalNB

  • ComplementNB

  • GaussianNB

  • MultinomialNB

snowflake.ml.modeling.neighbors

  • KernelDensity

  • KNeighborsClassifier

  • KNeighborsRegressor

  • LocalOutlierFactor

  • NearestCentroid

  • NearestNeighbors

  • NeighborhoodComponentsAnalysis

  • RadiusNeighborsClassifier

  • RadiusNeighborsRegressor

snowflake.ml.modeling.neural_network

  • BernoulliRBM

  • MLPClassifier

  • MLPRegressor

snowflake.ml.modeling.preprocessing

  • Binarizer *

  • KBInsDiscretizer *

  • LabelEncoder *

  • MaxAbsScaler *

  • MinMaxScaler *

  • Normalizer *

  • OneHotEncoder *

  • OrdinalEncoder *

  • RobustScaler *

  • StandardScaler *

snowflake.ml.modeling.semi_supervised

  • LabelPropagation

  • LabelSpreading

snowflake.ml.modeling.svm

  • LinearSVC

  • LinearSVR

  • NuSVC

  • NuSVR

  • SVC

  • SVR

snowflake.ml.modeling.tree

  • DecisionTreeClassifier

  • DecisionTreeRegressor

  • ExtraTreeClassifier

  • ExtraTreeRegressor

snowflake.ml.modeling.xgboost

  • XGBClassifier

  • XGBRegressor

  • XGBRFClassifier

  • XGBRFRegressor

Différences générales entre les API

Astuce

Consultez la référence d” API Snowpark ML pour plus de détails sur la modélisation des API.

Snowpark ML Modeling comprend des algorithmes de prétraitement, de transformation et de prédiction des données basés sur scikit-learn, xgboost et lightgbm. Les classes Python de Snowpark remplacent les classes correspondantes des paquets d’origine, avec des signatures similaires. Cependant, ces APIs sont conçues pour fonctionner avec des DataFrames Snowpark plutôt qu’avec des tableaux NumPy.

Bien que l’API de Snowpark ML Modeling soit similaire à celle de scikit-learn, il existe quelques différences clés. Cette section explique comment appeler les méthodes __init__ (constructeur), fit, et predict pour les classes d’estimateurs et de transformateurs fournies dans Snowpark ML.

  • Le constructeur de toutes les classes Python de Snowpark ML accepte cinq paramètres supplémentaires (input_cols, output_cols, sample_weight_col, label_cols, et drop_input_cols) en plus des paramètres acceptés par les classes équivalentes dans scikit-learn, xgboost ou lightgbm. Il s’agit de chaînes ou de séquences de chaînes qui spécifient les noms des colonnes d’entrée, des colonnes de sortie, de la colonne de poids de l’échantillon et des colonnes de balises dans un DataFrame Snowpark ou Pandas.

  • Les méthodes fit et predict de Snowpark ML acceptent un seul DataFrame plutôt que des tableaux séparés représentant les données d’entrée, les balises et les poids. Avec Snowpark ML, vous spécifiez les noms des colonnes à utiliser à ces fins lorsque vous instanciez la classe ; ces noms sont ensuite utilisés pour trouver les colonnes requises dans le DataFrame que vous transmettez à fit ou predict. Consultez fit et predict.

  • Les méthodes transform et predict de Snowpark ML renvoient un DataFrame contenant toutes les colonnes du DataFrame transmis à la méthode, avec le résultat de la prédiction stocké dans des colonnes supplémentaires. (Vous pouvez effectuer une transformation sur place en spécifiant les mêmes noms de colonnes d’entrée et de sortie, ou supprimer les colonnes d’entrée en transmettant drop_input_cols = True.) Les équivalents scikit-learn, xgboost et lightgbm renvoient des tableaux contenant uniquement les résultats.

  • Les transformateurs Snowpark Python n’ont pas de méthode fit_transform. Cependant, comme avec scikit-learn, la validation des paramètres n’est effectuée que dans la méthode fit . Vous devez donc appeler fit à un moment donné avant transform, même si le transformateur n’effectue aucun ajustement. fit renvoie le transformateur, de sorte que les appels de méthode peuvent être chaînés, par exemple Binarizer(threshold=0.5).fit(df).transform(df).

  • Les transformateurs Snowpark ML n’ont pas de méthode inverse_transform. Cette méthode n’est pas nécessaire avec Snowpark ML, car la représentation d’origine reste disponible dans les colonnes d’entrée du DataFrame d’entrée, qui sont préservées à moins que vous n’effectuiez explicitement une transformation sur place en spécifiant les mêmes noms pour les colonnes d’entrée et de sortie.

Construction d’un modèle

En plus des paramètres acceptés par les classes de modèles scikit-learn individuelles, toutes les classes Snowpark ML Modeling acceptent cinq paramètres supplémentaires, répertoriés dans le tableau suivant, lors de l’instanciation.

Ces paramètres sont tous techniquement facultatifs, mais vous souhaiterez souvent spécifier input_cols, output_cols, ou les deux. label_cols et sample_weight_col sont nécessaires dans les situations spécifiques indiquées dans la table, mais peuvent être omis dans d’autres cas.

Paramètre

Description

input_cols

Chaîne ou liste de chaînes représentant les noms des colonnes qui contiennent des fonctions.

Si vous omettez ce paramètre, toutes les colonnes du DataFrame d’entrée, à l’exception des colonnes spécifiées par les paramètres label_cols et sample-weight_col , sont considérées comme des colonnes d’entrée.

label_cols

Chaîne ou liste de chaînes représentant les noms de colonnes qui contiennent des balises.

Vous devez spécifier des colonnes de balises pour les estimateurs, car l’inférence de ces colonnes n’est pas possible. Si vous omettez ce paramètre, le modèle est considéré comme un transformateur et est ajusté sans balise.

output_cols

Chaîne ou liste de chaînes représentant les noms des colonnes qui stockeront la sortie des opérations predict et transform. La longueur de output_cols doit correspondre au nombre prévu de colonnes de sortie de la classe du prédicateur ou du transformateur spécifique utilisée.

Si vous omettez ce paramètre, les noms des colonnes de sortie sont dérivés en ajoutant un préfixe OUTPUT_ aux noms des colonnes de balises. Ces noms de colonnes de sortie déduits fonctionnent pour les prédicteurs, mais output_cols doit être défini explicitement pour les transformateurs. Il est plus clair de spécifier explicitement les noms des colonnes de sortie, surtout si vous ne spécifiez pas les noms des colonnes d’entrée.

Pour la transformation en place, transmettez les mêmes noms pour input_cols et output_cols.

sample_weight_col

Chaîne représentant le nom de la colonne contenant les poids des exemples.

Cet argument est nécessaire pour les ensembles de données pondérés.

drop_input_cols

Valeur booléenne indiquant si les colonnes d’entrée sont supprimées du résultat DataFrame. La valeur par défaut est False.

Exemple

Le constructeur DecisionTreeClassifier n’a pas d’arguments obligatoires dans scikit-learn ; tous les arguments ont des valeurs par défaut. Ainsi, dans scikit-learn, vous pourriez écrire :

from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier()
Copy

Dans Snowpark ML, vous devez spécifier les noms des colonnes (ou accepter les valeurs par défaut en ne les spécifiant pas). Dans cet exemple, ils sont explicitement spécifiés.

Vous pouvez initialiser un Snowpark ML DecisionTreeClassifier en transmettant les arguments directement au constructeur ou en les définissant comme attributs du modèle après l’instanciation. (Les attributs peuvent être modifiés à tout moment.)

  • En tant qu’arguments du constructeur :

    from snowflake.ml.modeling.tree import DecisionTreeClassifier
    
    model = DecisionTreeClassifier(
        input_cols=feature_column_names, label_cols=label_column_names, sample_weight_col=weight_column_name,
        output_cols=expected_output_column_names
    )
    
    Copy
  • En définissant des attributs du modèle :

    from snowflake.ml.modeling.tree import DecisionTreeClassifier
    
    model = DecisionTreeClassifier()
    model.set_input_cols(feature_column_names)
    model.set_label_cols(label_column_names)
    model.set_sample_weight_col(weight_column_name)
    model.set_output_cols(output_column_names)
    
    Copy

fit

La méthode fit d’un classificateur Snowpark ML prend un seul DataFrame Snowpark ou Pandas contenant toutes les colonnes, y compris les fonctions, les balises et les poids. Cela diffère de la méthode fit de scikit-learn, qui prend des entrées séparées pour les fonctions, les balises et les poids.

Dans scikit-learn, l’appel à la méthode DecisionTreeClassifier.fit ressemble à ceci :

model.fit(
    X=df[feature_column_names], y=df[label_column_names], sample_weight=df[weight_column_name]
)
Copy

Dans Snowpark ML, il vous suffit de transmettre le DataFrame. Vous avez déjà défini les noms des colonnes d’entrée, de balise et de poids lors de l’initialisation ou à l’aide des méthodes setter, comme indiqué dans Construction d’un modèle.

model.fit(df)
Copy

predict

La méthode predict d’une classe Snowpark ML prend également un seul DataFrame Snowpark ou Pandas contenant toutes les colonnes de fonctions. Le résultat est un DataFrame qui contient toutes les colonnes du DataFrame d’entrée inchangées et les colonnes de sortie ajoutées. Vous devez extraire les colonnes de sortie de ce DataFrame. Cette méthode est différente de la méthode predict de scikit-learn, qui ne renvoie que les résultats.

Exemple

Dans scikit-learn, predict ne renvoie que les résultats de la prédiction :

prediction_results = model.predict(X=df[feature_column_names])
Copy

Pour obtenir uniquement les résultats de la prédiction dans Snowpark ML, extrayez les colonnes de sortie du DataFrame renvoyé. Ici, output_column_names est une liste contenant les noms des colonnes de sortie :

prediction_results = model.predict(df)[output_column_names]
Copy

Déploiement et exécution de votre modèle

Le résultat de l’entraînement d’un modèle est un objet de modèle Python Snowpark ML. Vous pouvez utiliser le modèle entraîné pour faire des prédictions en appelant la méthode predict du modèle. Cela crée une fonction temporaire définie par l’utilisateur pour exécuter le modèle dans votre entrepôt virtuel Snowflake. Cette fonction est automatiquement supprimée à la fin de votre session Snowpark ML (par exemple, lorsque votre script se termine, ou lorsque vous fermez votre Jupyter Notebook).

Pour conserver la fonction définie par l’utilisateur après la fin de votre session, vous pouvez la créer manuellement. Consultez les guide de démarrage rapide sur le thème pour plus d’informations.

Le registre des modèles de Snowpark ML, une fonction à venir, prend également en charge les modèles persistants et facilite leur recherche et leur déploiement. Pour un accès anticipé à la documentation sur cette fonction, contactez votre représentant Snowflake.

Pipeline pour les transformations multiples

Avec scikit-learn, il est courant d’exécuter une série de transformations en utilisant un pipeline. Les pipelines scikit-learn ne fonctionnent pas avec les classes Snowpark ML, c’est pourquoi Snowpark ML fournit une version Snowpark Python de sklearn.pipeline.Pipeline pour exécuter une série de transformations. Cette classe se trouve dans le paquet snowflake.ml.modeling.pipeline et fonctionne de la même manière que la version scikit-learn.

Limites connues

  • Les estimateurs et transformateurs de Snowpark ML ne prennent actuellement pas en charge les entrées ou les réponses clairsemées. Si vous disposez de données clairsemées, convertissez-les dans un format dense avant de les transmettre aux estimateurs ou transformateurs de Snowpark ML.

  • Le paquet Snowpark ML ne prend actuellement pas en charge les types de données matricielles. Toute opération sur les estimateurs et les transformateurs qui produirait une matrice comme résultat échoue.

  • Il n’est pas garanti que l’ordre des lignes dans les données de résultat corresponde à l’ordre des lignes dans les données d’entrée.

Dépannage

Ajout de plus de détails à l’enregistrement

Snowpark ML utilise la journalisation de Snowpark Python. Par défaut, Snowpark ML enregistre les messages de niveau INFO sur la sortie standard. Pour obtenir des journaux qui sont plus détaillés, qui peuvent vous aider à résoudre les problèmes avec Snowpark ML, vous pouvez changer le niveau pour l’un des niveaux pris en charge par.

DEBUG produit les journaux les plus détaillés. Pour définir le niveau de journalisation sur DEBUG :

import logging, sys

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
Copy

Solutions aux problèmes courants

Le tableau suivant fournit quelques fournisseurs pour résoudre les problèmes éventuels liés à Snowflake ML Modeling.

Problème ou message d’erreur

Cause possible

Résolution

NameError, comme « name x is not defined », ImportError, ou ModuleNotFoundError

Erreur typographique dans le nom du module ou de la classe, ou Snowpark ML n’est pas installé

Reportez-vous au tableau des classes de Snowpark ML Modeling pour connaître le nom correct du module et de la classe. Assurez-vous que le module Snowpark ML est installé (voir Installation de Snowpark ML).

KeyError (« not in index » ou « none of [Index[..]] are in the [columns] »)

Nom de colonne incorrect.

Vérifiez et corrigez le nom de la colonne.

SnowparkSQLException, « does not exist or not authorize »

La table n’existe pas ou vous ne disposez pas de privilèges suffisants sur la table.

Assurez-vous que la table existe et que le rôle de l’utilisateur dispose des privilèges appropriés.

SnowparkSQLException, « invalid identifier PETALLENGTH »

Nombre de colonnes incorrect (généralement une colonne manquante).

Vérifiez le nombre de colonnes spécifié lors de la création de la classe de modèle et assurez-vous que vous transmettez le bon nombre.

InvalidParameterError

Un type ou une valeur inapproprié(e) a été transmis(e) en tant que paramètre.

Vérifiez l’aide de la classe ou de la méthode à l’aide de la fonction help dans une session interactive Python et corrigez les valeurs.

TypeError, « unexpected keyword argument »

Erreur typographique dans l’argument nommé.

Vérifiez l’aide de la classe ou de la méthode à l’aide de la fonction help dans une session interactive Python et corrigez le nom de l’argument.

ValueError, « array with 0 sample(s) »

L’ensemble de données transmis est vide.

Assurez-vous que l’ensemble de données n’est pas vide.

SnowparkSQLException, « authentication token has expired »

La session a expiré.

Si vous utilisez un Jupyter notebook, redémarrez le noyau pour créer une nouvelle session.

ValueError comme « cannot convert string to float »

Inadéquation du type de données.

Vérifiez l’aide de la classe ou de la méthode à l’aide de la fonction help dans une session interactive Python et corrigez les valeurs.

SnowparkSQLException, « cannot create temporary table »

Une classe de modèle est utilisée dans une procédure stockée qui ne s’exécute pas avec les droits de l’appelant.

Créez la procédure stockée avec les droits de l’appelant au lieu des droits du propriétaire.

SnowparkSQLException, « function available memory exceeded »

Votre ensemble de données est supérieur à 5 GB dans un entrepôt standard.

Passez à un entrepôt optimisé pour Snowpark.

OSError, « no space left on device »

Votre modèle est supérieur à environ 500 MB dans un entrepôt standard.

Passez à un entrepôt optimisé pour Snowpark.

Version incompatible de xgboost ou erreur lors de l’importation de xgboost

Vous avez effectué l’installation en utilisant pip, qui ne gère pas bien les dépendances.

Mettez à jour le paquet ou revenez à une version antérieure comme le demande le message d’erreur.

AttributeError impliquant to_sklearn, to_xgboost, ou to_lightgbm

Tentative d’utilisation de l’une de ces méthodes sur un modèle d’un autre type.

Utilisez to_sklearn avec des modèles basés sur scikit-learn, etc.

Autres lectures

Consultez la documentation des bibliothèques d’origine pour obtenir des informations complètes sur leurs fonctionnalités.

Reconnaissance

Certaines parties de ce document sont dérivées de la documentation Scikit-learn, qui est sous licence BSD-3 « New » ou « Revised » et sous Copyright © 2007-2023 The scikit-learn developers. Tous droits réservés.

Certaines parties de ce document sont dérivées de la documentation de XGboost, qui est couverte par la licence Apache 2.0, janvier 2004 et qui est sous Copyright © 2019. Tous droits réservés.

Certaines parties de ce document sont dérivées de la documentation LightGBM, qui est sous licence MIT et sous copyright © Microsoft Corp. Tous droits réservés.