2017-08-07 17 views
1

私はオートエンコーダーとKerasを使用して不正を検出しようとしています。私はNotebookとして、次のコードを書いている:私はおそらく何かが欠けているKeras - オートエンコーダーの精度がゼロに固定

import numpy as np # linear algebra 
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) 
from sklearn.preprocessing import StandardScaler 
from keras.layers import Input, Dense 
from keras.models import Model 
import matplotlib.pyplot as plt 

data = pd.read_csv('../input/creditcard.csv') 
data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1)) 
data = data.drop(['Time','Amount'],axis=1) 

data = data[data.Class != 1] 
X = data.loc[:, data.columns != 'Class'] 

encodingDim = 7 
inputShape = X.shape[1] 
inputData = Input(shape=(inputShape,)) 

X = X.as_matrix() 

encoded = Dense(encodingDim, activation='relu')(inputData) 
decoded = Dense(inputShape, activation='sigmoid')(encoded) 
autoencoder = Model(inputData, decoded) 
encoder = Model(inputData, encoded) 
encodedInput = Input(shape=(encodingDim,)) 
decoderLayer = autoencoder.layers[-1] 
decoder = Model(encodedInput, decoderLayer(encodedInput)) 

autoencoder.summary() 

autoencoder.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) 
history = autoencoder.fit(X, X, 
       epochs=10, 
       batch_size=256, 
       validation_split=0.33) 

print(history.history.keys()) 
# summarize history for accuracy 
plt.plot(history.history['acc']) 
plt.plot(history.history['val_acc']) 
plt.title('model accuracy') 
plt.ylabel('accuracy') 
plt.xlabel('epoch') 
plt.legend(['train', 'test'], loc='upper left') 
plt.show() 
# summarize history for loss 
plt.plot(history.history['loss']) 
plt.plot(history.history['val_loss']) 
plt.title('model loss') 
plt.ylabel('loss') 
plt.xlabel('epoch') 
plt.legend(['train', 'test'], loc='upper left') 
plt.show() 

、私の精度は0に貼り付けると、私のテスト損失は私の列車の損失よりも低くなっています。

どれInsightは、オートエンコーダの

+0

自動エンコーダーは通常回帰を行いますが、回帰問題に精度を使用することについては何の意味もありません。 –

答えて

1

精度は特に不正検出アルゴリズムに、ほとんど意味を持っているappericiatedされるだろう。これが意味するのは、回帰タスクで精度が明確に定義されていないということです。例えば、0.1は0.11と同じです。ケラスアルゴリズムの場合はそうではありません。あなたのアルゴリズムがデータをいかにうまく複製しているかを知りたければ、私はMSEまたはデータそのものを見ることを提案します。多くのオートエンコーダは、損失関数としてMSEを使用します。

あなたが監視しなければならない測定基準は、良い例の訓練の損失と不正な例の検証の損失です。実際の例を不正なものよりも密接に適合させることができ、アルゴリズムが実際にどの程度うまく機能するかを簡単に確認できます。

私がしてはいけないもう1つの設計選択肢は、オートエンコーダーでreluです。 ReLUは、消滅/爆発の勾配に対抗するそのシンプルさと有効性のため、より深いモデルでうまく機能します。しかし、これらの懸念事項の両方は、自動エンコーダーでの要因ではなく、自動エンコーダーでのデータの喪失もありません。私はあなたの中間活性化機能としてtanhを使用することをお勧めします。

+0

鮮やかな返信、知識ありがとうございます。 –

関連する問題