aiops/AnomalyDetection/model/optimialTrans.py (39 lines of code) (raw):
import numpy as np
import matplotlib.pyplot as plt
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
import scipy as scp
normalize = lambda p: p/np.sum(p)
def opt(N,t,a,b):
vmin = .02
a = normalize(a + (np.max(a)+vmin) * vmin)
b = normalize(b + (np.max(b)+vmin) * vmin)
epsilon = (.03) ** 2
[Y, X] = np.meshgrid(t, t)
K = np.exp(-(X - Y) ** 2 / epsilon)
v = np.ones(N)
niter = 100
Err_p = np.zeros(niter)
Err_q = np.zeros(niter)
for i in range(niter):
u = a / (np.dot(K, v))
r = v * (np.dot(K, u))
Err_q[i] = np.linalg.norm(r - b, ord=1)
v = b / (np.dot(K, u))
s = u * (np.dot(K, v))
Err_p[i] = np.linalg.norm(s - a, ord=1)
P = np.dot(np.dot(np.diag(u), K), np.diag(v))
#plt.figure(figsize=(5, 5))
#plt.imshow(np.log(P + 1e-5))
#plt.axis('off')
#plt.show()
return P
if __name__=="__main__":
N = 200
t = np.arange(0, N)/N
Gaussian = lambda t0, sigma: np.exp(-(t-t0)**2/(2*sigma**2))
sigma = .06
a = Gaussian(.25, sigma)
b = Gaussian(.8, sigma) + 3 * Gaussian(.6, sigma) + Gaussian(0.4, sigma)
plt.figure(figsize = (10,7))
plt.subplot(2, 1, 1)
plt.bar(t, a, width = 1/len(t), color = "darkblue")
plt.subplot(2, 1, 2)
plt.bar(t, b, width = 1/len(t), color = "darkblue")
opt(N,t,a,b)