Sto lavorando a un'applicazione che è un "predittiva-model-as-a-service", strutturato come segue:Come si può persistere con Patsy DesignInfo?
- treno un modello in linea
- caricare periodicamente i parametri del modello ad un "server previsione "
- server previsione prende in input una singola osservazione, ed emette una previsione
sto cercando di usare Patsy, ma in esecuzione nel seguente problema: quando un solo pronostico entra, come faccio a convertire alla forma giusta tale che esso sembra una fila di dati di allenamento?
La documentazione patsy fornisce un esempio quando la DesignInfo da dati di addestramento è disponibile in memoria: http://patsy.readthedocs.io/en/latest/library-developers.html#predictions
# offline model training
import patsy
data = {'animal': ['cat','cat','dog','raccoon'],'cuteness': [3,6,10,4]}
eq_string = "cuteness ~ animal"
dmats = patsy.dmatrices(eq_string,data)
design_info = dmats[1].design_info
train_model(dmats)
# online predictions
input_data = {'animal': ['raccoon']}
# if the DesignInfo were available, I could do this:
new_dmat = build_design_matrices([design_info],
input_data)
make_prediction(new_dmat, trained_model)
E allora l'uscita:
[DesignMatrix with shape (1, 3)
Intercept animal[T.dog] animal[T.raccoon]
1 0 1
Terms:
'Intercept' (column 0)
'animal' (columns 1:3)]
noti che questa riga è la stessa forma come i dati di allenamento; ha una colonna per animal[T.dog]
. Nella mia applicazione, non ho un modo per accedere a DesignInfo per costruire DesignMatrix per i nuovi dati. Concretamente, in che modo il server di previsione saprà quante altre categorie di animali sono presenti nei dati di addestramento e in quale ordine?
ho pensato che avrei potuto solo salamoia, ma si scopre che non è ancora supportato: https://github.com/pydata/patsy/issues/26
potrei anche semplicemente persistere delle colonne della matrice come una stringa e ricostruire la matrice da quella on-line, ma questo sembra un un po 'fragile
C'è un buon modo per farlo?
È possibile conservare 'design_info' nel server? (Sembra che ciò accada automaticamente.) Quindi il client invierà semplicemente al server il nuovo 'input_data', e il server eseguirà le righe' new_dmat' e 'make_prediction'. O hai bisogno di essere in grado di spegnere e riavviare il server senza riqualificarlo? In questo caso, sembra che avresti bisogno di salvare sia il 'dmats' originale che i parametri trovati da' train_model() '. E 'quello che stai cercando? –