Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
pro
CRDiS
Commits
72fd6315
Commit
72fd6315
authored
7 years ago
by
Kamil Jurek
Browse files
Options
Download
Email Patches
Plain Diff
review
parent
53cbed55
master
alternative_rules
refactored
rules
No related merge requests found
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
detectors/adwin_detector.py
+11
-0
detectors/adwin_detector.py
detectors/cusum_detector.py
+1
-1
detectors/cusum_detector.py
detectors/entropy_detector.py
+36
-17
detectors/entropy_detector.py
detectors/page_hinkley_detector.py
+5
-4
detectors/page_hinkley_detector.py
detectors/zscore_rules.py
+9
-1
detectors/zscore_rules.py
test_adwin_detector.py
+3
-2
test_adwin_detector.py
test_cusum_detector.py
+5
-4
test_cusum_detector.py
test_ddm_detector.py
+3
-2
test_ddm_detector.py
test_entropy_detector.py
+1
-1
test_entropy_detector.py
test_mean_detector.py
+27
-0
test_mean_detector.py
test_pagehinkley_detector.py
+5
-4
test_pagehinkley_detector.py
test_zscore_detector.py
+2
-3
test_zscore_detector.py
with
108 additions
and
39 deletions
+108
-39
detectors/adwin_detector.py
View file @
72fd6315
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
detectors/cusum_detector.py
View file @
72fd6315
...
...
@@ -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
)
...
...
This diff is collapsed.
Click to expand it.
detectors/entropy_detector.py
View file @
72fd6315
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
detectors/page_hinkley_detector.py
View file @
72fd6315
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
detectors/zscore_rules.py
View file @
72fd6315
...
...
@@ -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
)
This diff is collapsed.
Click to expand it.
test_adwin_detector.py
View file @
72fd6315
...
...
@@ -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
)
...
...
This diff is collapsed.
Click to expand it.
test_cusum_detector.py
View file @
72fd6315
...
...
@@ -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
)
...
...
This diff is collapsed.
Click to expand it.
test_ddm_detector.py
View file @
72fd6315
...
...
@@ -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
=
15
0
)
detector
=
DDMDetector
(
lambd
=
2
0
)
simulator
=
OnlineSimulator
(
detector
,
signal
)
simulator
.
run
()
...
...
This diff is collapsed.
Click to expand it.
test_entropy_detector.py
View file @
72fd6315
...
...
@@ -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
()
...
...
This diff is collapsed.
Click to expand it.
test_mean_detector.py
0 → 100644
View file @
72fd6315
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
)))
This diff is collapsed.
Click to expand it.
test_pagehinkley_detector.py
View file @
72fd6315
...
...
@@ -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
=
10
0
,
alpha
=
0.99
)
detector
=
PageHinkleyDetector
(
delta
=
0.001
,
lambd
=
2
0
,
alpha
=
0.99
)
simulator
=
OnlineSimulator
(
detector
,
signal
)
simulator
.
run
()
...
...
This diff is collapsed.
Click to expand it.
test_zscore_detector.py
View file @
72fd6315
...
...
@@ -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]
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help