Est-il possible d'entraîner un modèle XGboost en python et d'utiliser le modèle enregistré pour prédire dans l'environnement Spark? Autrement dit, je veux pouvoir entraîner le modèle XGboost en utilisant sklearn, enregistrer le modèle. Chargez le modèle enregistré dans spark et prédisez dans spark. Est-ce possible?
modifier: Merci à tous pour la réponse, mais ma question est vraiment la suivante. Je vois les problèmes ci-dessous lorsque je m'entraîne et que je prédis différentes liaisons de XGBoost.
Pendant l'entraînement, j'utiliserais XGBoost en python, et lors de la prédiction, j'utiliserais XGBoost dans mllib.
Je dois charger le modèle enregistré à partir de XGBoost python (par exemple: fichier XGBoost.model) pour être prédit dans spark, ce modèle serait-il compatible pour être utilisé avec la fonction prédire dans le mllib
< / li>Les formats d'entrée de données de XGBoost en python et de XGBoost dans spark mllib sont différents. Spark prend le format assemblé vectoriel, mais avec python, nous pouvons alimenter le dataframe en tant que tel. Alors, comment alimenter les données lorsque j'essaie de prédire en étincelle avec un modèle formé en python. Puis-je alimenter les données sans assembleur vectoriel? Est-ce que XGboost prédire la fonction dans Spark mllib prendrait des données assemblées non vectorielles en entrée?
3 Réponses :
Vous pouvez exécuter votre script python sur spark en utilisant la commande spark-submit
afin de compiler votre code python sur spark et ensuite vous pouvez prédire la valeur dans spark.
Mais quand j'utilise un script python sur spark-submit, je devrai utiliser spark mllib, non? Je veux m'entraîner avec sklean et prédire avec mllib.
Proposez-vous que nous puissions exécuter du code python dans un environnement Spark à l'aide de spark-submit?
vous pouvez
Tout cela peut être dans un seul script, vous soumettez l'étincelle, mais pour rendre les choses plus concises, je recommanderai la division train / test en deux scripts.
Étant donné que l'étape 2,3 se déroule au niveau du pilote, n'utilisant aucune ressource de cluster, votre worker ne fait rien
Merci pour la réponse. Je vais essayer. Mais encore une fois, je veux que quelqu'un confirme vraiment que c'est possible. le XGBoost dans spark prend le format de données assemblées vectorielles. et en python, nous alimenterons le dataframe en tant que tel. Comment Spark traiterait-il cette variation des formats d'entrée?
Je vois, votre liaison xgboost est en scala mais vous voulez vous entraîner localement en python? deux questions, si votre scala mllib a déjà une liaison xgboost, pourquoi ne pas entraîner l'utilisation distribuée scala pyspark.mllib? pourquoi voulez-vous prédire en utilisant la version distribuée, vous pouvez toujours réaliser une formation distribuée en utilisant le modèle entraîné?
Ma précision d'entraînement de XGboost dans mllib est vraiment faible, et je ne suis pas en mesure de comprendre pourquoi. le test auc est python à 90% alors qu'il est à environ 80% en étincelle. :)
la formation distribuée n’est tout simplement pas encore arrivée à maturité. je l'ai aussi beaucoup vu. Dans ce cas, entraînez-vous sur le pilote, préparez pyspark RDD, chaque partition est un sous-ensemble de vos données, diffusez votre xgboost sur chaque partition, utilisez la partition de la carte pour combiner les données à une matrice, puis prédisez l'utilisation du modèle
Voici une implémentation similaire de ce que vous recherchez. J'ai un message SO expliquant les détails alors que j'essaie de résoudre les erreurs décrites dans l'article pour que le code du bloc-notes fonctionne.
XGBoost Spark One Model Per Worker Integration
L'idée est de s'entraîner en utilisant xgboost
puis via spark
d'orchestrer chaque modèle pour qu'il s'exécute sur un spark worker
et ensuite les prédictions peuvent être appliquées via xgboost
predict_proba ()
ou spark ml
predict ()
.
Donc, vous voulez entraîner le modèle XGBoost à l'aide de spark mllib ou sklearn.
Modifié la question. Vérifiez.
vous pouvez utiliser
spark
comme système d'orchestration pour former et prédire les modèlessklearn
via le modulespark-sklearn
. il poussera les itérations de chaque modèle vers différents exécuteursspark
.