in aiops/ContraLSP/switchstate/switchgenerator.py [0:0]
def create_signal(sig_len, gp_params, mean, cov):
signal = None
state_local = []
y = []
importance = []
y_logits = []
previous = np.random.binomial(1, P_S0)[0]
previous_label = None
delta_state = 1
# Sample for "previous" state (this is current state now)
imp_sig = np.zeros(SIG_NUM)
imp_sig[imp_feature[previous]] = 1
importance.append(imp_sig)
state_local.append(previous)
for ii in range(1, sig_len):
next_st = next_state(previous, delta_state)
state_n = next_st
imp_sig = np.zeros(SIG_NUM)
if previous != state_n:
# this samples labels+samples until current point - before state change at next time point
gp_vec = [ts.signals.GaussianProcess(lengthscale=g, mean=m, variance=0.1) for g, m in
zip(gp_params, mean[previous])]
sample_ii = np.array([gp.sample_vectorized(time_vector=np.array(range(delta_state))) for gp in gp_vec])
# print(sample_ii.shape)
# sample_ii = np.random.multivariate_normal(mean[state_n], cov[state_n])
if signal is not None:
signal = np.hstack((signal, sample_ii))
else:
signal = sample_ii
# signal.extend(sample_ii)
# sample_ii = (sample_ii).reshape((1, -1))
# y_probs = state_n * generate_linear_labels(sample_ii[:, imp_feature[state_n]]) + \
# (1 - state_n) * generate_linear_labels(sample_ii[:, imp_feature[state_n]])
y_probs = generate_linear_labels(sample_ii.T[:, imp_feature[previous]])
y_logit = [yy[1] for yy in y_probs]
y_label = [np.random.binomial(1, yy) for yy in y_logit]
# y_logit_past = y_logit
y.extend(y_label)
y_logits.extend(y_logit)
delta_state = 1
imp_sig[imp_feature[state_n]] = 1
imp_sig[-1] = 1
else:
delta_state += 1
importance.append(imp_sig)
# previous_label = y_label
state_local.append(state_n)
previous = state_n
# sample points in the last state-change
gp_vec = [ts.signals.GaussianProcess(lengthscale=g, mean=m, variance=0.1) for g, m in
zip(gp_params, mean[previous])]
sample_ii = np.array([gp.sample_vectorized(time_vector=np.array(range(delta_state))) for gp in gp_vec])
# sometimes only one state is ever sampled
if signal is not None:
signal = np.hstack((signal, sample_ii))
else:
signal = sample_ii
y_probs = generate_linear_labels(sample_ii.T[:, imp_feature[previous]])
y_logit = [yy[1] for yy in y_probs]
y_label = [np.random.binomial(1, yy) for yy in y_logit]
y.extend(y_label)
y_logits.extend(y_logit)
# signal = signal
y = np.array(y)
importance = np.array(importance)
# print(signal.shape, y.shape, len(state_local), importance.shape, len(y_logits))
return signal, y, state_local, importance, y_logits