Enregistrer ML modèle pour un usage futur
J'ai été l'application de certains algorithmes d'Apprentissage automatique comme la Régression Linéaire, la Régression Logistique, et Naive Bayes pour certaines données, mais j'essayais d'éviter d'utiliser des Rdd et commencer à utiliser DataFrames parce que le Rdd sont plus lents que Dataframes sous pyspark (voir photo 1).
L'autre raison pour laquelle je suis à l'aide de DataFrames est parce que la ml de la bibliothèque dispose d'une classe très utile pour paramétrer les modèles, qui est CrossValidator cette classe renvoie à un modèle après la pose, évidemment, cette méthode a tester plusieurs scénarios, et après qui renvoie un modèle ajusté (avec les meilleures combinaisons de paramètres).
Le cluster-je utiliser n'est pas si grand et que les données sont assez gros et certains raccord prendre des heures si je veux enregistrer ces modèles afin de les réutiliser plus tard, mais je n'ai pas compris, comment, est-il quelque chose que je suis ignorant?
Notes:
- La mllib du modèle de classes ont une méthode save (c'est à dire NaiveBayes), mais mllib n'a pas CrossValidator et l'utilisation RDDs donc je suis pour l'éviter il premeditatedly.
- La version actuelle est spark 1.5.1.
- +1 Bonne question. Je suis dans le même lieu que je suis en train de faire de l'interrupteur de
RDDs
àDataFrames
. Je suis dans1.6.1
, mais je vais avoir le même problème, parce que sauver la fonctionnalité ne semble pas encore être mis en œuvre pourOneVsRest
stackoverflow.com/questions/36243455/...
Vous devez vous connecter pour publier un commentaire.
Étincelle 2.0.0+
Au premier coup d'œil tous les
Transformers
etEstimators
mettre en œuvreMLWritable
avec l'interface suivante:et
MLReadable
avec l'interface suivanteCela signifie que vous pouvez utiliser
save
méthode pour écrire le modèle de disque, par exempleet le lire plus tard:
Des méthodes équivalentes sont également mis en œuvre dans PySpark avec
MLWritable
/JavaMLWritable
etMLReadable
/JavaMLReadable
respectivement:SparkR fournit
écrire.ml
/lire.ml
fonctions, mais à compter d'aujourd'hui, ce ne sont pas compatibles avec d'autres langues prises en charge - SPARK-15572.Noter que le chargeur de classe doit correspondre à la classe de la stockées
PipelineStage
. Par exemple, si vous avez enregistréLogisticRegressionModel
vous devez utiliserLogisticRegressionModel.load
pasLogisticRegression.load
.Si vous utilisez Spark <= 1.6.0 et de l'expérience de quelques problèmes avec le modèle d'économie, je voudrais suggérer version.
En outre à l'Étincelle de méthodes spécifiques il existe un nombre croissant de bibliothèques conçu pour enregistrer et charger Étincelle ML de modèles à l'aide de l'Étincelle de méthodes indépendantes. Voir, par exemple,Comment servir une Étincelle MLlib modèle?.
Spark >= 1.6
Depuis Étincelle 1.6, il est possible d'enregistrer vos modèles à l'aide de la
save
méthode. Parce que presque tous lesmodel
met en œuvre la MLWritable interface. Par exemple, LinearRegressionModel a elle, et, par conséquent, il est possible de sauvegarder votre modèle pour le chemin d'accès souhaité l'utiliser.Spark < 1.6
Je crois que tu vas faire des hypothèses incorrectes ici.
Certaines opérations sur un
DataFrames
peut être optimisé et il se traduit par l'amélioration de la performance par rapport à la plaine deRDDs
.DataFrames
l'efficacité de la mise en cache et SQLish API est sans doute plus facile à comprendre que CA API.ML Pipelines sont extrêmement utiles et des outils comme la croix-validator ou différents évaluateurs sont simplement des must-have dans toute machine pipeline et même si aucun des ci-dessus est particulièrement difficile de faire mettre en œuvre sur le dessus de faible niveau MLlib API, il est beaucoup mieux d'avoir prêt à l'emploi, universelle et relativement bien testé la solution.
C'est très bien, mais il ya quelques problèmes:
DataFrames
commeselect
ouwithColumn
affichage des performances similaires à ses RDD équivalents commemap
,ml.classification.NaiveBayes
sont tout simplement des wrappers autour de sonmllib
API,Je crois qu'à la fin de la journée, ce que vous obtenez en utilisant ML au cours de MLLib est très élégant, haut niveau de l'API. Une chose que vous pouvez faire est de combiner les deux afin de créer un personnalisé multi-étape du pipeline:
MLLib
algorithme,MLLib
modèle en utilisant une méthode de votre choix (Spark modèle ou PMML)Il n'est pas une solution optimale, mais il est le meilleur je pense, donné une API actuelle.
Il me semble que si la fonctionnalité de l'API pour enregistrer un modèle n'est pas mis en œuvre à compter d'aujourd'hui (voir Étincelle issue tracker SPARK-6725).
Une alternative a été posté (Comment enregistrer des modèles de ML Pipeline S3 ou SF?) qui implique simplement de la sérialisation du modèle, mais est un Java approche. Je pense que dans PySpark vous pourriez faire quelque chose de similaire, c'est à dire cornichon le modèle d'écrire sur le disque.