La réutilisation d'un Modèle Construit en R
Lors de la construction d'un modèle dans R, comment voulez-vous enregistrer les caractéristiques du modèle telle que vous pouvez la réutiliser sur de nouvelles données? Disons que je construire une régression logistique sur des données historiques, mais de ne pas avoir de nouvelles observations jusqu'au mois prochain. Quelle est la meilleure approche?
Choses que j'ai pensé:
- Sauver le modèle objet et le chargement dans une nouvelle session
- Je sais que certains modèles peuvent être exportés avec PMML, mais je n'ai pas vraiment vu quelque chose au sujet de l'importation de PMML
Simplement, je suis en train d'essayer de se faire une idée de ce que vous faites lorsque vous avez besoin d'utiliser votre modèle dans une nouvelle session.
Merci d'avance.
- Eh bien, vous pouvez toujours vous "sauver" un modèle de la formule, et de fournir des données à jour dans
data
argument... en supposant que je vous ai bien compris... - Hmm, qu'entendez-vous par la réutilisation? Prévoir pour les nouvelles observations ou de mise à jour de l'ajustement du modèle à utiliser les nouvelles observations plus anciennes?
- Que diriez -
formula()
? - Je veux utiliser le modèle que j'ai développé pour prédire les nouvelles valeurs sur les données que je n'ai pas encore et n'auraient pas pendant un certain temps.
- OK, alors la section d'ouverture de ma réponse est ce que je ferais. Enregistrement du modèle d'objet sur le disque est plus qu'acceptable, mais il est important de sauver la R code/script utilisé pour générer le modèle, en premier lieu, de sorte que votre recherche/modélisation est reproductible.
Vous devez vous connecter pour publier un commentaire.
La réutilisation d'un modèle permettant de prédire de nouvelles observations
Si le modèle n'est pas coûteux en termes de calcul, j'ai tendance à documenter l'ensemble de la construction d'un modèle dans un processus de R script que j'exécute à nouveau en cas de besoin. Si un élément aléatoire est impliqué dans l'ajustement du modèle, j'ai assurez-vous de définir un connu aléatoire.
Si le modèle de calcul est coûteux à calculer, puis-je encore utiliser un script comme ci-dessus, mais de sauver le modèle d'objets à l'aide de
save()
en rda et de l'objet. J'ai alors tendance à modifier le script de telle sorte que si l'sauvé objet existe, la charger, ou si pas de, remettre le modèle, à l'aide d'un simpleif()...else
clause enroulé autour de l'parties pertinentes du code.Lors du chargement de votre modèle enregistré objet, assurez-vous de recharger tout les paquets requis, bien que, dans votre cas, le modèle logit ont été ajustés via
glm()
il n'y aura pas de paquets supplémentaires à charge au-delà de R.Voici un exemple:
Si voulant automatiser cela, alors je serais probablement effectuer les opérations suivantes dans un script:
Bien sûr, la génération de données de code devrait être remplacé par le code de chargement de vos données réelles.
Mise à jour précédemment modèle ajusté avec de nouvelles observations
Si vous voulez remonter le modèle à l'aide de nouvelles observations. Puis
update()
est une fonction utile. Il n'est de remonter le modèle avec un ou plusieurs des modèles les arguments mis à jour. Si vous souhaitez inclure de nouvelles observations dans les données utilisées pour l'ajustement du modèle, ajouter les nouvelles observations de la trame de données transmise à l'argument'data'
, et puis effectuez les opérations suivantes:où
m1
est l'original, enregistré d'ajustement du modèle,. ~ .
est le modèle de la formule de changements, qui dans ce cas signifie inclure toutes les variables sur les deux côtés gauche et droit de~
(en d'autres termes, n'apporter aucun changement au modèle de la formule), etdf
est la trame de données utilisées pour le modèle d'origine, élargi pour inclure ces nouvelles observations disponibles.Ici est un exemple:
D'autres ont mentionné dans les commentaires
formula()
, qui extrait de la formule à partir d'un modèle ajusté:Toutefois, si l'ajustement du modèle implique des arguments supplémentaires, comme
'family'
, ou'subset'
arguments en plus complexe de l'ajustement du modèle de fonctions. Siupdate()
méthodes sont disponibles pour votre modèle de raccord de la fonction (ce qu'ils sont pour beaucoup de communes de côté fonctions, commeglm()
), il constitue un moyen simple de mettre à jour un modèle ajustement de les extraire et de réutiliser le modèle de la formule.Si vous avez l'intention de faire le tout de la modélisation et de prédiction de l'avenir dans R, il ne semble pas vraiment beaucoup de point en faisant abstraction de la modèle via PMML ou similaire.
update
de moitransform()
: C'est une fonction de commodité prévu pour une utilisation interactive. Pour la programmation, il est préférable d'utiliser la norme subsetting de fonctions mathématiques, et en particulier du non-standard de l'évaluation de l'argumenttransform
peut avoir des conséquences imprévues.Si vous utilisez le même nom de le dataframe et variables, vous pouvez (au moins pour
lm()
etglm()
) utiliser la fonctionupdate
sur le modèle enregistré :C'est bien sûr sans aucune préparation des données et ainsi de suite. Il a juste réutilise le modèle de spécifications. Sachez que si vous modifiez le contraste dans l'intervalle, le nouveau modèle est mis à jour avec la nouvelle contrastes, pas l'ancien.
Ainsi, l'utilisation d'un script est dans la plupart des cas, la meilleure réponse. On pourrait inclure toutes les étapes dans une fonction de commodité qui prend juste le dataframe, de sorte que vous pouvez source du script, puis utiliser la fonction sur tout nouveau jeu de données. Voir aussi la réponse de Gavin pour que.