2016-01-11 10 views
0

Я использовал пример, заданный h2o для обнаружения аномалии ЭКГ. При попытке вычислить вручную MSE, я получил разные результаты. Чтобы продемонстрировать разницу, я использовал последний тестовый пример , но все 23 случая отличаются. Прилагается полный код:MSE с использованием h2o для обнаружения аномалии

Thanks, Eli.

suppressMessages(library(h2o)) 
localH2O = h2o.init(max_mem_size = '6g', # use 6GB of RAM of *GB available 
       nthreads = -1) # use all CPUs (8 on my personal computer :3) 

# Download and import ECG train and test data into the H2O cluster 
train_ecg <- h2o.importFile(path = "http://h2o-public-test-data.s3.amazonaws.com/smalldata/anomaly/ecg_discord_train.csv", 
          header = FALSE, 
          sep = ",") 
test_ecg <- h2o.importFile(path = "http://h2o-public-test-data.s3.amazonaws.com/smalldata/anomaly/ecg_discord_test.csv", 
         header = FALSE, 
         sep = ",") 
# Train deep autoencoder learning model on "normal" 
# training data, y ignored 
anomaly_model <- h2o.deeplearning(x = names(train_ecg), 
           training_frame = train_ecg, 
           activation = "Tanh", 
           autoencoder = TRUE, 
           hidden = c(50,20,50), 
           l1 = 1e-4, 
           epochs = 100) 

# Compute reconstruction error with the Anomaly 
# detection app (MSE between output layer and input layer) 
recon_error <- h2o.anomaly(anomaly_model, test_ecg) 

# Pull reconstruction error data into R and 
# plot to find outliers (last 3 heartbeats) 
recon_error <- as.data.frame(recon_error) 
recon_error 
plot.ts(recon_error) 
test_recon <- h2o.predict(anomaly_model, test_ecg) 

t <- as.vector(test_ecg[23,]) 
r <- as.vector(test_recon[23,]) 
mse.23 <- sum((t-r)^2)/length(t) 
mse.23 
recon_error[23,] 

> mse.23 
[1] 2.607374 
> recon_error[23,] 
[1] 8.264768 
+0

Любые идеи ?? Благодарю. – eli

+0

не могли бы вы рассказать, как мы можем применить это в данных, где есть 2 столбца даты и времени? –

ответ

0

Для автоассоциатор в H2O, математике MSE выполняется в нормированном пространстве, чтобы избежать численных проблем масштабирования. Например, если у вас есть категориальные функции или очень большие числа, автонаблюдатель нейронной сети не может напрямую работать с этими номерами, но вместо этого он сначала делает манекенную горячую кодировку и нормализацию числовых функций, тогда она выполняет функцию fwd/back распространение и вычисление ошибок реконструкции (в нормализованном и расширенном пространстве). Вы можете вручную разделить каждый столбец по диапазону (max-min) сначала для чисто числовых данных, и ваши результаты должны совпадать.

Вот JUnit, что делает эту проверку явно (в тот же набор данных): https://github.com/h2oai/h2o-3/blob/master/h2o-algos/src/test/java/hex/deeplearning/DeepLearningAutoEncoderTest.java#L86-L104

Вы также можете увидеть https://0xdata.atlassian.net/browse/PUBDEV-2078 для получения дополнительной информации.

 Смежные вопросы

  • Нет связанных вопросов^_^