Responder a: Autoencoder para anomalias

#29008

Essa construção que fiz estaria correta para a detecção de anomalias com o autoencoder usando tensorflow/keras?

————————————————

# Preparação para autoencoder

tamanho = treino.shape[1]
tamanho

# Construção das camadas

input = layers.Input(shape=(tamanho, ))

encoder = layers.Dense(int(tamanho/2), activation=”relu”)(input)
encoder = layers.Dense(int(tamanho/5), activation=”relu”)(encoder)
encoder = layers.Dense(int(tamanho/9), activation=”relu”)(encoder)

latent = layers.Dense(int(tamanho/12), activation=”relu”)(encoder)

decoder = layers.Dense(int(tamanho/9), activation=”relu”)(latent)
decoder = layers.Dense(int(tamanho/5), activation=”relu”)(decoder)
decoder = layers.Dense(int(tamanho/2), activation=”relu”)(decoder)

output = layers.Dense(int(tamanho), activation=”sigmoid”)(decoder)

 

# Criação do modelo

autoencoder = Model(input, output)
autoencoder.compile(optimizer=”adam”, loss=”mse”)       ################# usar o MSE seria adequado?

 

# Treinamento do modelo

treinamento = autoencoder.fit(treino, treino, epochs=100, batch_size=256, verbose=False, validation_split=0.15)

 

# Reconstrução da base

reconstrucao = autoencoder.predict(treino)
train_loss = tf.keras.losses.mse(reconstrucao, treino)
plt.hist(train_loss, bins=50)

 

# Determinação do threshold para identificação de anomalias

threshold = np.mean(train_loss) + np.std(train_loss)
threshold

 

# Atribuição da perda MSE

dados[“MSE”] = tf.keras.losses.mse(reconstrucao, treino)

 

# Classificação do outlier

dados[“Outlier”] = 0
dados.loc[dados[“MSE”] > threshold, “Outlier”] = 1

<hr />

 

Obrigado !