私は次のように構成され、「予測モデルとして-サービス」であるアプリケーションに取り組んでいます:patsy DesignInfoを永続化する方法は?
- モデルオフライン
- を養成定期的に「予測サーバーにモデルパラメータをアップロード「
- が予測サーバは、入力として1つの観測を取り、予測
を出力し、私はパッツィを使用しようとしますが、次の問題に実行しているよ:単一の予測が入ってくるとき、私は変換しない方法それを正しい形にしてトレーニングデータの行のように見える?
トレーニングデータからDesignInfoがメモリに利用可能であるときパッツィドキュメントは例を提供する: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)
そして出力:この行が同じ形状であることを
[DesignMatrix with shape (1, 3)
Intercept animal[T.dog] animal[T.raccoon]
1 0 1
Terms:
'Intercept' (column 0)
'animal' (columns 1:3)]
お知らせ訓練データとして; animal[T.dog]
の列があります。私のアプリケーションでは、DesignInfoにアクセスして新しいデータのDesignMatrixを構築する方法がありません。具体的には、予測サーバは、どのくらい多くの動物のカテゴリがトレーニングデータにあり、どのような順序であるかを知ることができますか?
は、私はちょうどそれをpickle化できると思っていたが、それは、これはまだサポートされていませんが判明:https://github.com/pydata/patsy/issues/26
私は、単に文字列として行列の列を持続し、そのオンラインから行列を再構築することができますが、これはそう脆弱なビット。
これを行うには良い方法がありますか?
サーバーに 'design_info'を置くことはできますか? (それは自動的に起こるようです)。クライアントはサーバに新しい 'input_data'を送信し、サーバは' new_dmat'と 'make_prediction'行を実行します。または、再トレーニングせずにサーバーをシャットダウンして再起動できる必要がありますか?その場合、元の 'dmats'と' train_model() 'で見つかったパラメータの両方を保存する必要があるように思えます。それはあなたが探しているものですか? –