Browse Source

add feature_dim detection for LSTMOD

master
lhenry15 4 years ago
parent
commit
b9e295d7dc
1 changed files with 21 additions and 14 deletions
  1. +21
    -14
      tods/detection_algorithm/core/LSTMOD.py

+ 21
- 14
tods/detection_algorithm/core/LSTMOD.py View File

@@ -25,8 +25,8 @@ class LSTMOutlierDetector(CollectiveBaseDetector):
epochs=10,
batch_size=8,
dropout_rate=0.0,
feature_dim=1,
hidden_dim=8,
feature_dim=9,
hidden_dim=1,
n_hidden_layer=0,
activation=None,
diff_group_method='average'
@@ -51,19 +51,22 @@ class LSTMOutlierDetector(CollectiveBaseDetector):
self.hidden_dim = hidden_dim
self.n_hidden_layer = n_hidden_layer
self.diff_group_method = diff_group_method
self.activation = activation


self.model_ = Sequential()
self.model_.add(LSTM(units=hidden_dim, input_shape=(feature_dim, 1),
dropout=dropout_rate, activation=activation))
def _build_model(self):
model_ = Sequential()
model_.add(LSTM(units=self.hidden_dim, input_shape=(self.feature_dim, 1),
dropout=self.dropout_rate, activation=self.activation))

for layer_idx in range(n_hidden_layer):
self.model_.add(LSTM(units=hidden_dim, input_shape=(hidden_dim, 1),
dropout=dropout_rate, activation=activation))
for layer_idx in range(self.n_hidden_layer):
model_.add(LSTM(units=self.hidden_dim, input_shape=(self.hidden_dim, 1),
dropout=self.dropout_rate, activation=self.activation))

self.model_.add(Dense(units=feature_dim, input_shape=(hidden_dim, 1), activation=None))
model_.add(Dense(units=self.feature_dim, input_shape=(self.hidden_dim, 1), activation=None))

self.model_.compile(loss=self.loss, optimizer=self.optimizer)
model_.compile(loss=self.loss, optimizer=self.optimizer)
return model_

def fit(self, X: np.array, y=None) -> object:
"""Fit detector. y is ignored in unsupervised methods.
@@ -84,6 +87,8 @@ class LSTMOutlierDetector(CollectiveBaseDetector):
X = check_array(X).astype(np.float)
self._set_n_classes(None)
X_buf, y_buf = self._get_sub_matrices(X)
self.feature_dim = X_buf.shape[1]
self.model_ = self._build_model()

# fit the LSTM model
self.model_.fit(X_buf, y_buf, epochs=self.epochs, batch_size=self.batch_size)
@@ -209,15 +214,14 @@ class LSTMOutlierDetector(CollectiveBaseDetector):
return pred_score, relative_error_left_inds, relative_error_right_inds



if __name__ == "__main__": # pragma: no cover
def main():
X_train = np.asarray(
[3., 4., 8., 16, 18, 13., 22., 36., 59., 128, 62, 67, 78, 100]).reshape(-1, 1)

X_test = np.asarray(
[3., 4., 8.6, 13.4, 22.5, 17, 19.2, 36.1, 127, -23, 59.2]).reshape(-1,1)
[3., 4., 8., 16.1, 18.2, 36.2, 57.1, -10.3, 17, 19.2, 36.1, 127, -23, 59.2]).reshape(-1,1)

# print(X_train.shape, X_test.shape)
print(X_train.shape, X_test.shape)

clf = LSTMOutlierDetector(contamination=0.1)
clf.fit(X_train)
@@ -231,3 +235,6 @@ if __name__ == "__main__": # pragma: no cover

# print('pred_scores: ',pred_scores)
print('pred_labels: ',pred_labels)

if __name__ == "__main__": # pragma: no cover
main()

Loading…
Cancel
Save