예제 #1
0
    def concept_drift_detection(self, X, Y):
        if self.init_drift_detection:
            if self.drift_detector == "KSWIN":
                self.cdd = [KSWIN(w_size = 100, stat_size = 30, alpha=self.confidence) for elem in X.T]
            if self.drift_detector == "ADWIN":
                self.cdd = [ADWIN() for elem in X.T]
            if self.drift_detector == "DDM":
                self.cdd = [DDM() for elem in X.T]
            if self.drift_detector == "EDDM":
                self.cdd = [EDDM() for elem in X.T]
            if self.drift_detector == "KSVEC":
                self.cdd = KSVEC(vec_size=X.shape[1])
            self.init_drift_detection = False
        self.drift_detected = False

        if not self.init_drift_detection:
            if self.drift_detector == "KSVEC":
                self.cdd.add_element(X)
                if self.cdd.detected_change():
                    self.drift_detected = True
            else:
                for elem, detector in zip(X.T, self.cdd):
                    for e in elem:
                        detector.add_element(e)
                        if detector.detected_change():
                            self.drift_detected = True
                            self.n_detections = self.n_detections +1

        return self.drift_detected
예제 #2
0
    def concept_drift_detection(self, X, Y):
        if self.init_drift_detection:
            if self.drift_detector == "KSWIN":
                self.cdd = [
                    KSWIN(w_size=100, stat_size=30, alpha=self.confidence)
                    for elem in X.T
                ]
            if self.drift_detector == "ADWIN":
                self.cdd = [ADWIN() for elem in X.T]
            if self.drift_detector == "DDM":
                self.cdd = [DDM() for elem in X.T]
            if self.drift_detector == "EDDM":
                self.cdd = [EDDM() for elem in X.T]
            self.init_drift_detection = False
        self.drift_detected = False

        if not self.init_drift_detection:
            for elem, detector in zip(X.T, self.cdd):
                for e in elem:
                    detector.add_element(e)
                    if detector.detected_change():
                        self.drift_detected = True
                        self.n_detections = self.n_detections + 1

        return self.drift_detected


# if name=="__main__":
#     from skmultiflow import
def make_detector(warn=False, s=1e-5, drift_detector='adwin'):
    sensitivity = s * 10 if warn else s
    if drift_detector == 'adwin':
        return ADWIN(delta=sensitivity)
    if drift_detector == 'EDDM':
        return EDDM()
    if drift_detector == 'DDM':
        return DDM()
예제 #4
0
    def __init__(self,
                 list_drifts_detectors = [[ADWIN(delta=0.5), ADWIN(delta=0.05)],
                                          [DDM(min_num_instances=100, warning_level=2.0, out_control_level=3.0)],
                                          [PageHinkley(min_instances=100, delta=0.05, threshold=50, alpha=0.9999), PageHinkley(min_instances=100, delta=0.05, threshold=100, alpha=0.9999)]],
                                          # [SeqDrift2ChangeDetector(delta=0.5, block_size=100), SeqDrift2ChangeDetector(delta=0.05, block_size=100)]],
                 list_names_drifts_detectors = ['ADWIN','DDM','PH'],
                 stream = BernoulliStream(drift_period = 1000, n_drifts = 50, widths_drifts = [1], mean_errors = [0.1,0.9]),
                 n_runs = 1,
                 name_file = None):

        self.name_file = name_file
        if (self.name_file == None) or not(isinstance(self.name_file, str)) :
            raise ValueError("Attribute 'name_file' must be specified and must be a string, passed {}".format(type(self.name_file)))

        self.list_drifts_detectors = list_drifts_detectors
        self.list_names_drifts_detectors = list_names_drifts_detectors
        self.stream = stream
        self.n_runs = n_runs

        self.lenght_stream = stream.n_samples
        self.true_positions = stream.list_positions

        self.n_drift_detectors = len(self.list_drifts_detectors)
예제 #5
0
def tst():
    ddm = DDM()
    data_stream = np.random.randint(2, size=2000)
    average_prediciton = []
    for i in range(1000, 1200):
        data_stream[i] = 1
    for i in range(1500, 1700):
        data_stream[i] = 1
    for i in range(2000):
        ddm.add_element(data_stream[i])
        if ddm.detected_warning_zone():
            print('Warning zone has been detected in data: ' +
                  str(data_stream[i]) + ' - of index: ' + str(i))
        if ddm.detected_change():
            print('Change has been detected in data: ' + str(data_stream[i]) +
                  ' - of index: ' + str(i))
        average_prediciton.append(ddm.miss_prob)

        # print('X', hddm.X_, ' ', 'Z', hddm.Z_)
        # print('X_e', hddm.X_epsilon, ' ', 'Z', hddm.Z_epsilon)
    showPlot(average_prediciton)
 [PageHinkley(min_instances=30, delta=0.005, threshold=0.5, alpha=0.999), PageHinkley(min_instances=30, delta=0.005, threshold=1.5, alpha=0.999)],
 [PageHinkley(min_instances=30, delta=0.005, threshold=0.5, alpha=0.9), PageHinkley(min_instances=30, delta=0.005, threshold=1.5, alpha=0.9)],
 [PageHinkley(min_instances=30, delta=0.05, threshold=1.5, alpha=0.999), PageHinkley(min_instances=30, delta=0.05, threshold=2.5, alpha=0.999)],
 [PageHinkley(min_instances=30, delta=0.05, threshold=1.5, alpha=0.9), PageHinkley(min_instances=30, delta=0.05, threshold=2.5, alpha=0.9)],
 [PageHinkley(min_instances=30, delta=0.05, threshold=0.5, alpha=0.999), PageHinkley(min_instances=30, delta=0.05, threshold=1.5, alpha=0.999)],
 [PageHinkley(min_instances=30, delta=0.05, threshold=0.5, alpha=0.9), PageHinkley(min_instances=30, delta=0.05, threshold=1.5, alpha=0.9)],
 [ADWIN(delta=0.5), ADWIN(delta=0.05)],
 [ADWIN(delta=0.4), ADWIN(delta=0.04)],
 [ADWIN(delta=0.3), ADWIN(delta=0.03)],
 [ADWIN(delta=0.2), ADWIN(delta=0.02)],
 [ADWIN(delta=0.1), ADWIN(delta=0.01)],
 [ADWIN(delta=0.05), ADWIN(delta=0.005)],
 [ADWIN(delta=0.02), ADWIN(delta=0.002)],
 [ADWIN(delta=0.01), ADWIN(delta=0.001)],
 [ADWIN(delta=0.001), ADWIN(delta=0.0001)],
 [DDM(min_num_instances=15, warning_level=0.5, out_control_level=1.0)],
 [DDM(min_num_instances=15, warning_level=0.75, out_control_level=1.25)],
 [DDM(min_num_instances=15, warning_level=1, out_control_level=1.5)],
 [DDM(min_num_instances=15, warning_level=1.25, out_control_level=1.75)],
 [DDM(min_num_instances=15, warning_level=1.5, out_control_level=2.0)],
 [DDM(min_num_instances=30, warning_level=0.5, out_control_level=1.0)],
 [DDM(min_num_instances=30, warning_level=0.75, out_control_level=1.25)],
 [DDM(min_num_instances=30, warning_level=1, out_control_level=1.5)],
 [DDM(min_num_instances=30, warning_level=1.25, out_control_level=1.75)],
 [DDM(min_num_instances=30, warning_level=1.5, out_control_level=2.0)],
 [SeqDrift2ChangeDetector(delta=0.5, block_size=100), SeqDrift2ChangeDetector(delta=0.05, block_size=100)],
 [SeqDrift2ChangeDetector(delta=0.4, block_size=100), SeqDrift2ChangeDetector(delta=0.04, block_size=100)],
 [SeqDrift2ChangeDetector(delta=0.3, block_size=100), SeqDrift2ChangeDetector(delta=0.03, block_size=100)],
 [SeqDrift2ChangeDetector(delta=0.2, block_size=100), SeqDrift2ChangeDetector(delta=0.02, block_size=100)],
 [SeqDrift2ChangeDetector(delta=0.1, block_size=100), SeqDrift2ChangeDetector(delta=0.01, block_size=100)],
 [SeqDrift2ChangeDetector(delta=0.05, block_size=100), SeqDrift2ChangeDetector(delta=0.005, block_size=100)],
예제 #7
0
 def __init__(self):
     """Inicjalizacja klasy algorytmu DDM"""
     self.name = 'DDM'
     self.model = DDM()
     self.change_indexes = []
     self.warning_zones_indexes = []
예제 #8
0
        ######################## CURIE ###################

        lst_dim = [n_bins] * n_feats
        curie = CA_VonNeumann_Classifier(bins=[],
                                         bins_margin=bins_margin,
                                         dimensions=lst_dim,
                                         cells=empties(lst_dim))
        limits_automata = list(np.zeros(1))
        #ca_names=['CURIE']
        mutants_time = empty_mutant(curie.dimensions)

        ######################## LEARNERS ###################
        learners_ref = [HoeffdingTree(), KNN(), NaiveBayes()]
        ######################## DETECTORS ###################
        detectores_ref = [DDM(), EDDM(), ADWIN(), PageHinkley(), curie]

        n_pasos = len(datasets) * len(tipos) * len(learners_ref) * len(
            detectores_ref)

        SCORES_LER = []
        TIMES_LER = []
        RAMS_LER = []
        DETECTIONS_LER = []

        for ler in range(len(learners_ref)):

            learner = deepcopy(learners_ref[ler])

            SCORES_DET = []
            TIMES_DET = []
예제 #9
0
 def reset_model(self):
     self.model = DDM()
     self.change_indexes = []
     self.warning_zones_indexes = []