2017-01-08 3 views
2

私は航空会社の遅延を予測するためのWebアプリケーションを作成しようとしています。私は自分のコンピュータ上でモデルをオフラインで訓練しましたが、今はユーザーの入力に基づいて予測を行うFlaskアプリケーションを作成しようとしています。簡単にするために、私のモデルにUNIQUE_CARRIER、ORIGIN、DESTINATIONという3つのカテゴリ変数があるとします。トレーニングしながら、私はパンダを使用して、すべての3のダミー変数を作成します。ユーザー入力からの予測のためのダミー変数の作成方法(1つのレコードのみ)?

df = pd.concat([df, pd.get_dummies(df['UNIQUE_CARRIER'], drop_first=True, prefix="UNIQUE_CARRIER")], axis=1) 
df = pd.concat([df, pd.get_dummies(df['ORIGIN'], drop_first=True, prefix="ORIGIN")], axis=1) 
df = pd.concat([df, pd.get_dummies(df['DEST'], drop_first=True, prefix="DEST")], axis=1) 
df.drop(['UNIQUE_CARRIER', 'ORIGIN', 'DEST'], axis=1, inplace=True) 

はだから今、私の特徴ベクトルが297の長さである(100の異なるユニークなキャリアと私のデータでは100種類の空港があると仮定した場合)。私はpickleを使用してモデルを保存しましたが、今はユーザーの入力に基づいて予測しようとしています。これで、ユーザー入力は3つの変数(起点、宛先、キャリア)の形式になりました。

明らかに、各ユーザーの入力に対してpd.get_dummies(3つのフィールドすべてに1つの固有の値があるため)を使用することはできません。モデルの特徴ベクトルにユーザ入力を変換する最も効率的な方法は何ですか?

+0

を、あなたは上記のようにdf' 'の頭は、あなたが処理した後にどのように見えるかを投稿することができますか? – AlexG

+1

'get_dummies'の代わりに[scikit-learnの' OneHotEncoder'(http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder)を使うことをお勧めします。このメソッドでは、新しいデータを変換するために使用できるオブジェクトを作成します。 – AlexG

+0

提案をありがとう! – RRC

答えて

0

パンダのダミーを使用しているため、密なベクトルを作成するため、新しいベクトルを作成する良い方法は、用語辞書を作成し、それに応じて次の行に沿ってゼロベクトルを挿入することですあなたは新しいフライトがある場合

index_dict = dict(zip(df.columns,range(df.shape[1]))) 

は今:

new_vector = np.zeroes(297) 
try: 
    new_vector[index_dict[origin]] = 1 
except: 
    pass 
try: 
    new_vector[index_dict[destination]] = 1 
except: 
    pass 
try: 
    new_vector[index_dict[carrier]] = 1 
except: 
    pass 
関連する問題