Commit 72fd6315 authored by Kamil Jurek's avatar Kamil Jurek
Browse files

review

No related merge requests found
Showing with 108 additions and 39 deletions
+108 -39
......@@ -41,6 +41,17 @@ class AdwinDetector(ChangeDetector):
self.rules_triggered = False
if self.checkDrift():
self.rules_triggered = True
self.bucketList = AdWinList(self.MAXBUCKETS)
self.mintTime=0.0;
self.mintClock=self.MINTCLOCK;
self.mdblError=0.0;
self.mdblWidth=0.0;
self.lastBucketRow=0;
self.sum_ = 0.0;
self.W_ = 0.0;
self.var = 0.0;
self.bucketNumber=0;
self.est_ = 0
def printInfo(self):
it = self.bucketList.tail
......
......@@ -10,7 +10,7 @@ class CusumDetector(ChangeDetector):
self.mean_ = 0
self.sum_ = 0
self.n = 0
self.p_x_ = 0
#self.p_x_ = 0
def update(self, new_signal_value):
super(CusumDetector, self).update(new_signal_value)
......
......@@ -34,7 +34,7 @@ class EntropyDetector(ChangeDetector):
else:
self.freqList[x] = 1
self.entropy_ = scp.stats.entropy(self.sig)
#self.entropy_ = scp.stats.entropy(self.sig)
# self.oldEntropy = self.entropy_
# for f in self.freqList:
# p_x = float(self.signal.count(x))/self.signal_size
......@@ -44,36 +44,55 @@ class EntropyDetector(ChangeDetector):
# #print(self.entropy_)
# self.sum_ = self.sum_ + self.entropy_ - self.oldEntropy;
##############
# qkw = [self.freqList[self.sig[i]] / self.window_size for i in np.arange(len(self.window))]
qkw = [0.1 for i in np.arange(len(self.window))]
self.kl_window_ = scp.stats.entropy(self.window, qkw)
freqList2={}
for i in self.window:
if i in freqList2:
freqList2[i] += 1
else:
freqList2[1] = 1
mod = mode(self.sig)
qkw = [v/self.window_size for k, v in freqList2.items()]
print(qkw)
#qkw = [0.1 for i in np.arange(len(self.window))]
#print(qkw)
#self.kl_window_ = scp.stats.entropy(self.window)
#mod = mode(self.sig)
# qk = [self.freqList[self.sig[i]] / self.sigSize for i in np.arange(self.sigSize)]
qk = [0.1 for i in np.arange(self.sigSize)]
# print(qk)
# #qk = [0.1 for i in np.arange(self.sigSize)]
# #
# # for i in np.arange(self.sigSize):
# # if self.sig[i] == mod:
# # qk[i] = 0.9
#self.kl_ = scp.stats.entropy(qk)
#
self.w2g_ = scp.stats.entropy(qkw)
#print(self.kl_)
for i in np.arange(self.sigSize):
if self.sig[i] == mod:
qk[i] = 0.9
self.kl_ = scp.stats.entropy(self.sig, qk)
# if self.sigSize % 100 == 0:
# print(self.freqList)
qk = [v/self.sigSize for k, v in self.freqList.items()]
#qk = [self.freqList[self.sig[i]] / self.sigSize for i in np.arange(self.sigSize)]
print(qk, '\n')
self.kl_ = scp.stats.entropy(qk)
self.w2g_ = self.kl_window_ / self.kl_
#print(self.kl_)
def check_stopping_rules(self, new_signal_value):
self.rules_triggered = False
#print("entropy:", self.entropy_)
#if self.entropy_ > self.threshold:
# if self.w2g_ > 5000000:
# self.rules_triggered = True
# if self.kl_ > 0.5:
# self.rules_triggered = True
# self.sigSize = 0
# self.sig = []
# self.freqList = {}
# self.entropy_ = 0
# self.sig = []
# self.sigSize = 0
# self.window = []
# self.sigSize = 0
# self.freqList = {}
# self.sum_ = 0
def entrop(self, data):
entropy = 0
......
......@@ -23,9 +23,9 @@ class PageHinkleyDetector(ChangeDetector):
self.sig.append(new_signal_value)
self.signa.append(new_signal_value)
self.n += 1
if self.n % 10 == 0:
self.sig = sp.signal.medfilt(self.sig,5).tolist()
self.signa = sp.signal.medfilt(self.signa,5).tolist()
#if self.n % 10 == 0:
# self.sig = sp.signal.medfilt(self.sig,5).tolist()
# self.signa = sp.signal.medfilt(self.signa,5).tolist()
x = np.mean(new_signal_value)
self.x_mean_ = self.x_mean_ + (x - self.x_mean_) / self.n
......@@ -34,7 +34,8 @@ class PageHinkleyDetector(ChangeDetector):
def check_stopping_rules(self, new_signal_value):
self.rules_triggered = False
if self.n % 5 == 0 and np.abs(self.sum_) > self.lambd:
#if self.n % 5 == 0 and np.abs(self.sum_) > self.lambd:
if np.abs(self.sum_) > self.lambd:
self.rules_triggered = True
plt.plot(self.sig)
self.n = 0
......
......@@ -71,13 +71,21 @@ class ZScoreDetectorRules(ChangeDetector):
prev = 0 if len(self.stops) == 0 else self.stops[-1][1]
self.stops.append((prev, self.signal_size, int(round(self.g_mean_))))
#print(self.stops)
vals = [stop[2] for stop in self.stops[:-1]]
vals_len = [stop[1] -stop[0] for stop in self.stops[:-1]]
for i in range(1, len(self.stops)-1):
rhs = vals[i:]
rhsL = vals_len[i:]
lhs = vals[:i]
lhsL = vals_len[:i]
rule = (rhs, lhs)
print(lhs, "==>", rhs)
print(lhs, "====>", rhs)
#print(lhsL, "==>", rhsL)
print([str(lhsL[i]) + " * " + str(lhs[i]) for i in range(len(lhs))], "==>",
[str(rhsL[i]) + " * " + str(rhs[i]) for i in range(len(rhs))])
self.reset(new_signal_value)
......@@ -11,7 +11,8 @@ from adwin_detector import AdwinDetector
#Numerical data
df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
#df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
signal = np.array(df['attr_1'])
# Symbolic data
......@@ -20,7 +21,7 @@ signal = np.array(df['attr_1'])
# signal = en.encode(signal)
#Filtered data
signal = sp.signal.medfilt(signal,21)
#signal = sp.signal.medfilt(signal,21)
detector = AdwinDetector(delta = 0.01)
simulator = OnlineSimulator(detector, signal)
......
......@@ -10,12 +10,13 @@ from cusum_detector import CusumDetector
#Numerical data
# df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
# signal = np.array(df['attr_1'])
df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
signal = np.array(df['attr_1'])
# Symbolic data
df = pd.read_csv('sequences/sequence_2017_11_22-19.35.27.csv')
signal = np.array(df['day_of_week'])
signal = en.encode(signal)
#df = pd.read_csv('sequences/sequence_2017_11_22-19.35.27.csv')
#signal = np.array(df['day_of_week'])
#signal = en.encode(signal)
#signal = sp.signal.medfilt(signal,21)
detector = CusumDetector(delta=0.005, lambd=20)
......
......@@ -11,7 +11,8 @@ from ddm_detector import DDMDetector
#Numerical data
df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
#df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
signal = np.array(df['attr_1'])
# Symbolic data
......@@ -22,7 +23,7 @@ signal = np.array(df['attr_1'])
#Filtered data
#signal = sp.signal.medfilt(signal,21)
detector = DDMDetector(lambd=150)
detector = DDMDetector(lambd=20)
simulator = OnlineSimulator(detector, signal)
simulator.run()
......
......@@ -18,7 +18,7 @@ signal = np.array(df['attr_1'])
# signal = en.encode(signal)
#signal = sp.signal.medfilt(signal,21)
detector = EntropyDetector(threshold=6)
detector = EntropyDetector(threshold=5)
simulator = OnlineSimulator(detector, signal)
simulator.run()
......
import matplotlib.pyplot as plt
import numpy as np
import sys; sys.path.append('./detectors/')
import pandas as pd
import encoders as en
from detector import ChangeDetector
from detector import OnlineSimulator
from mean_detector import MeanDetector
#Numerical data
# df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
signal = np.array(df['attr_1'])
# Symbolic data
#df = pd.read_csv('sequences/sequence_2017_11_22-19.35.27.csv')
#signal = np.array(df['day_of_week'])
#signal = en.encode(signal)
#signal = sp.signal.medfilt(signal,21)
detector = MeanDetector(threshold=0.5)
simulator = OnlineSimulator(detector, signal)
simulator.run()
stops = simulator.get_detected_changes()
print(np.array(stops)- int(2/3 * len(signal)))
......@@ -13,12 +13,13 @@ def runningMean(x, N):
return np.convolve(x, np.ones((N,))/N)[(N-1):]
#Numerical data
df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
#df = pd.read_csv('sequences/sequence_2017_11_24-20.16.00.csv')
df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
signal = np.array(df['attr_1'])
#b, a = sp.signal.butter(3, 0.5)
#signal = sp.signal.filtfilt(b, a, signal, padlen=150)
#########
filtered = sp.signal.medfilt(signal,21)
#filtered = sp.signal.medfilt(signal,21)
#########
#signal = pd.rolling_mean(signal,5).tolist()
#########
......@@ -31,7 +32,7 @@ filtered = sp.signal.medfilt(signal,21)
#win = sp.signal.hann(51)
#filtered = sp.signal.convolve(signal, win, mode='full') / sum(win)
plt.plot(signal, 'b.')
#plt.plot(signal, 'b.')
#plt.plot(filtered, 'r.')
# Symbolic data
......@@ -40,7 +41,7 @@ plt.plot(signal, 'b.')
# signal = en.encode(signal)
detector = PageHinkleyDetector(delta=0.001, lambd=100, alpha=0.99)
detector = PageHinkleyDetector(delta=0.001, lambd=20, alpha=0.99)
simulator = OnlineSimulator(detector, signal)
simulator.run()
......
......@@ -13,9 +13,9 @@ def myround(x, base=10):
#Numerical data
#df = pd.read_csv('sequences/sequence_2017_11_22-19.55.44.csv')
#df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
df = pd.read_csv('sequences/sequence_2017_11_28-18.07.57.csv')
#df = pd.read_csv('sequences/sequence_2017_12_01-22.11.54.csv')
df = pd.read_csv('sequences/sequence_2018_01_15-19.44.57.csv')
#df = pd.read_csv('sequences/sequence_2018_01_15-19.44.57.csv')
sequence = np.array(df['attr_1'])
# Symbolic data
......@@ -34,7 +34,6 @@ simulator.run()
# stops = simulator.get_detected_changes()
# print(np.array(stops)- int(2/3 * len(sequence)))
# print(np.array(stops))
#
# subseqs = []
# indexes = []
# gcd_ = stops[0]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment