0

10種類のテキストフィーチャと10000のトレーニングセットを使用してSkLearnを使用してRandomForestClassificationモデルを作成しました。次に、予測に使用するためにモデルを漬けました(76mb)。カテゴリのデータでSciKitLearn RandomForestClassificationから予測する

しかし、ランダムフォレストを作成するために、私はLabelEncoderとOneHotEncoderを使用して、カテゴリ/文字列データの最良の結果を得ました。

今、私はpickledモデルをプルアップし、1インスタンスで分類予測を取得したいと思います。しかし、トレーニング全体を読み込まずに、1インスタンスのテキストをエンコードする方法がわからないのですが、&テストデータセットCSV をもう一度実行して、エンコード処理全体を実行してください。

毎回csvファイルを読み込むのは面倒です。私はこれが時間当たり1000xを実行するようにしたいので、それは私のように見えません。

pickleや他の変数/設定で1行のデータをすばやくエンコードする方法はありますか?エンコードは常にすべてのデータを必要としますか?

1行をエンコードするためにすべてのトレーニングデータを読み込む必要がある場合、テーブルに割り当てられた各機能が数値IDで自動インクリメントされ、ユニークキーがオンのデータベースでテキストデータを自分でエンコードすると効果的ですtext/categoricalフィールドは、このIDをRandomForestClassificationに渡しますか?明らかに、私はこの新しいモデルを修正してピックルする必要がありますが、新しい行の(符号化された)数値表現を正確に把握し、単にそれらの値の予測を要求します。

SkLearnやPythonの機能が不足している可能性があります。私は3日前に両方を開始しました。私の馬鹿さを許してください。

+0

LabelEncoderオブジェクトをピックしたはずです... –

答えて

2

Pickleを使用すると、ラベルと1つのホットエンコーダを保存する必要があります。これを毎回読んで、新しいインスタンスを簡単に変換することができます。たとえば、

import cPickle as pickle 
from sklearn.externals import joblib 
from sklearn import preprocessing 

le = preprocessing.LabelEncoder() 
train_x = [0,1,2,6,'true','false'] 
le.fit_transform(train_x) 

# Save your encoding 
joblib.dump(le, '/path/to/save/model') 
# OR 
pickle.dump(le, open('/path/to/model', "wb")) 

# Load those encodings 
le = joblib.load('/path/to/save/model') 
# OR 
le = pickle.load(open('/path/to/model', "rb")) 

# Then use as normal 
new_x = [0,0,0,2,2,2,'false'] 
le.transform(new_x) 
# array([0, 0, 0, 1, 1, 1, 3]) 
関連する問題