Browse Source

basic detection with respect antisegments

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
acb1188d2a
  1. 50
      server/src/services/analytic_service/pattern_detector.rs

50
server/src/services/analytic_service/pattern_detector.rs

@ -59,41 +59,47 @@ impl PatternDetector {
let mut results = Vec::new();
// let mut i = 0;
// let m = &self.learning_results.model;
// // TODO: here we ignoring gaps in data
// while i < ts.len() - self.learning_results.model.len() {
// let mut backet = Vec::<f64>::new();
// for j in 0..m.len() {
// backet.push(nan_to_zero(ts[j + i].1));
// }
// let c = PatternDetector::corr_aligned(&backet, &m);
// if c >= CORR_THRESHOLD {
// let from = ts[i].0;
// let to = ts[i + backet.len() - 1].0;
// results.push((from, to));
// }
// i += m.len();
// }
let pt = &self.learning_results.patterns;
let apt = &self.learning_results.anti_patterns;
for i in 0..ts.len() {
let mut pattern_match_score = 0f64;
let mut pattern_match_len = 0usize;
let mut anti_pattern_match_score = 0f64;
for p in pt {
if i + p.len() < ts.len() {
let mut backet = Vec::<f64>::new();
for j in 0..p.len() {
backet.push(nan_to_zero(ts[i + j].1));
}
if PatternDetector::corr_aligned(p, &backet) >= CORR_THRESHOLD {
results.push((ts[i].0, ts[i + p.len() - 1].0));
let score = PatternDetector::corr_aligned(p, &backet);
if score > pattern_match_score {
pattern_match_score = score;
pattern_match_len = p.len();
}
}
}
for p in apt {
if i + p.len() < ts.len() {
let mut backet = Vec::<f64>::new();
for j in 0..p.len() {
backet.push(nan_to_zero(ts[i + j].1));
}
let score = PatternDetector::corr_aligned(p, &backet);
if score > anti_pattern_match_score {
anti_pattern_match_score = score;
}
}
}
if pattern_match_score > anti_pattern_match_score && pattern_match_score >= CORR_THRESHOLD {
results.push((ts[i].0, ts[i + pattern_match_len - 1].0));
}
}
return results;

Loading…
Cancel
Save