def get_changepoint_BinCheb(self, instances, is_normal=False): cheb = "" if self.is_k: cheb = chebyshev_base(min_size=self.min_winsize, max_window=self.max_winsize, k=self.K) else: cheb = chebyshev_base_e(min_size=self.min_winsize, max_window=self.max_winsize, e=self.E) bin = binning(bin_period=self.Bin_size) change_points = [] temp_bin = [] mean_list = [] # instances = data.get_dataset_test(i) for index, instance in enumerate(instances): is_change = False can_add_bin = bin.can_add_bin() if not can_add_bin: temp_bin.append(bin.get_bin()) mean_bin = mean(bin.get_bin()) mean_list.append(mean_bin) is_change = cheb.add_element(mean_bin) bin = binning(bin_period=self.Bin_size) bin.add_instance(instance) if is_change: if is_normal: for j in range(index - self.Bin_size, index): change_points.append(j) else: change_points.append(index) self.cheb = cheb self.ex = cheb.get_exception() return change_points, mean_list
def get_Changepoint_fix_Bin(bin_size, instances, e, max_window=100): bin = binning(bin_period=bin_size) cheb = cheb_noDY(bin_size=bin_size, e=e, max_window=max_window) change_points = [] for index, instance in enumerate(instances): bin.add_instance(instance) can_add_bin = bin.can_add_bin() if not can_add_bin: mean_bin = mean(bin.get_bin()) bln_change = cheb.add_element(mean_bin) if bln_change: change_points.append(index) bin = binning(bin_period=bin_size) return change_points
def cal_k_tran(data,input_k,input_bin): data.clear_change_points() cheb = chebyshev_base(min_size=60, max_window=60, k=input_k) bin = binning(bin_period=input_bin) for i, file_name in enumerate(data.get_files_test()): change_points = [] instances = data.get_dataset_test(i) for index, instance in enumerate(instances): is_change = False can_add_bin = bin.can_add_bin() if can_add_bin: bin.add_instance(instance) else: mean_bin = mean(bin.get_bin()) is_change = cheb.add_element(mean_bin) bin.reset_bin() # if is_change: # change_points.append(index) if is_change: for j in range(index - bin_period + 1, index + 1): change_points.append(j) data.set_change_points(change_points) return data
def gen_dataBin(instances, input_bin): mean_list = [] bin = binning(bin_period=input_bin) for index_in , instance in enumerate(instances): can_add_bin = bin.can_add_bin() if not can_add_bin: mean_bin = bin.get_mean_bin() for i in range(input_bin): mean_list.append(mean_bin) bin = binning(bin_period=input_bin) bin.add_instance(instance) if bin.current_size()>0: mean_bin = bin.get_mean_bin() for i in range(bin.current_size()): mean_list.append(mean_bin) return mean_list
def convert_databin(bin_size, instances): bin = binning(bin_period=bin_size) data_after_bin = [] for index, instance in enumerate(instances): can_add_bin = bin.can_add_bin() if not can_add_bin: mean_bin = mean(bin.get_bin()) for i in range(bin_size): data_after_bin.append(mean_bin) bin = binning(bin_period=bin_size) bin.add_instance(instance) if index == len(instances) - 1: if len(bin.get_bin()) >= 0: mean_bin = mean(bin.get_bin()) for i in range(len(bin.get_bin())): data_after_bin.append(mean_bin) return data_after_bin
def get_changepoint_skmethod(self, instances, is_normal=False): change_points = [] ks = sk_detection(k=self.K) bin = binning(bin_period=self.Bin_size) for index, instance in enumerate(instances): is_change = False can_add_bin = bin.can_add_bin() if not can_add_bin: is_change = ks.add_element(bin) bin = binning(bin_period=self.Bin_size) bin.add_instance(instance) if is_change: if is_normal: for j in range(index - self.Bin_size, index): change_points.append(j) else: change_points.append(index) return change_points
def __init__(self, max_window=100, k=3, bin_size=3): super().__init__() self.window = [] self.sample_count = None self._width = 0 self.k = k self._variance = None self.max_size = max_window self.count_detect = 0 self.reset() self.mean_list = [] self.std_low_list = [] self.std_high_list = [] self.bin_size = bin_size self.bin = binning(bin_period=bin_size)
def reset(self): """ reset Resets the change detector parameters. """ super().reset() self.sample_count = 1 # self.mean = 1.0 self._variance = 0.0 self._width = 0 self.window = [] self.mean_list = [] self.std_low_list = [] self.std_high_list = [] self.bin_size = 3 self.bin = binning(bin_period=self.bin_size)
def __init__(self, max_window=100, k=3, bin_size=3): super().__init__() self.window = [] self.sample_count = None self._width = 0 self.k = k self._total = None # self._mean = None self._variance = None self.max_size = max_window # self.warning_level = warning_level # self.out_control_level = out_control_level self.count_detect = 0 self.mean_list = [] self.std_low_list = [] self.std_high_list = [] self.bin_size = bin_size self.bin = binning(bin_period=bin_size)
def get_changepoint_kalmanBinCheb(self, instances, inpput_x=10, input_var=10000, model_mean=0, model_variance=0.01): x_start = inpput_x x_var_start = input_var model_mean = model_mean model_variance = model_variance cheb = chebyshev_base(min_size=self.min_winsize, max_window=self.max_winsize, k=self.K) bin = binning(bin_period=self.Bin_size) change_points = [] measurements = instances # xs = np.zeros((len(measurements), 2)) # ps = np.zeros((len(measurements), 2)) x = x_start x_var = x_var_start for index, measurement in enumerate(measurements): x, x_var = kalman.update(x, x_var, measurement, model_variance) # xs[i] = x, x_var x, x_var = kalman.predict(x, x_var, model_mean, model_variance) # ps[i] = x, x_var is_change = False can_add_bin = bin.can_add_bin() if not can_add_bin: mean_bin = mean(bin.get_bin()) is_change = cheb.add_element(mean_bin) bin.reset_bin() bin.add_instance(x) if is_change: for j in range(index - self.bin_period + 1, index + 1): change_points.append(j) return change_points
def add_element(self, value): bln_change = False self.bin.add_instance(value) can_add_bin = self.bin.can_add_bin() if not can_add_bin: if len(self.window) > 0: last_bin = self.window[-1] mean_pre = last_bin.get_mean_bin() std_pre = last_bin.get_std_bin() mean_cur = self.bin.get_mean_bin() std_cur = self.bin.get_std_bin() kstar = abs(mean_pre - mean_cur) / (std_pre + std_cur) if kstar >= self.k: bln_change = True self.window.append(self.bin) self.in_concept_change = bln_change self.bin = binning(bin_period=self.bin_size) if len(self.window) > self.max_size: self.window.pop(0) return bln_change
def cal_k_tran(data, input_k, input_bin): x_start = 10 x_var_start = 10000 model_mean = 0 model_variance = 0.01 data.clear_change_points() cheb = chebyshev_base(min_size=60, max_window=60, k=input_k) bin = binning(bin_period=input_bin) for i, file_name in enumerate(data.get_files_test()): change_points = [] measurements = data.get_dataset_test(i) xs = np.zeros((len(measurements), 2)) ps = np.zeros((len(measurements), 2)) x = x_start x_var = x_var_start for index, measurement in enumerate(measurements): x, x_var = kalman.update(x, x_var, measurement, model_variance) xs[i] = x, x_var x, x_var = kalman.predict(x, x_var, model_mean, model_variance) ps[i] = x, x_var is_change = False can_add_bin = bin.can_add_bin() if not can_add_bin: mean_bin = mean(bin.get_bin()) is_change = cheb.add_element(mean_bin) bin.reset_bin() bin.add_instance(x) if is_change: for j in range(index - bin_period + 1, index + 1): change_points.append(j) data.set_change_points(change_points) return data
# interval=I) data = data_stream(path='D:\\git_project\\data stream\\lightcurve_benchmark\\{}'.format(data_type), type=type, pattern=pattern, len=L, interval=I) data.load_data_fromfile() # binning process cheb = chebyshev_base(min_size=60,max_window=60,k=k) for i,file_name in enumerate(data.get_files_test()): change_points = [] measurements = data.get_dataset_test(i) xs = np.zeros((len(measurements), 2)) ps = np.zeros((len(measurements), 2)) bin = binning(bin_period=bin_period) x = x_start x_var = x_var_start for index, measurement in enumerate(measurements): x, x_var = kalman.update(x, x_var, measurement, model_variance) xs[i] = x, x_var x, x_var = kalman.predict(x, x_var, model_mean, model_variance) ps[i] = x, x_var is_change = False can_add_bin = bin.can_add_bin() if can_add_bin: bin.add_instance(x) else: mean_bin = mean(bin.get_bin())
def resetTempBin(self): self.bin = binning(bin_period=self.binSize)
def reset(self): super().reset() self.bin = binning(bin_period=self.binSize)
def __init__(self, initialBin=3, windowSize=100): super().__init__(initialBin, windowSize) self.bin = binning(bin_period=self.binSize)