def __init__(self, estimator_list, n_iterations=20, local_region_size=30, local_max_features=1.0, n_bins=10, random_state=42, contamination=0.1): super(LSCP, self).__init__(contamination=contamination) self.estimator_list = estimator_list self.n_clf = len(self.estimator_list) self.n_iterations = n_iterations self.local_region_size = local_region_size self.local_region_min = 30 self.local_region_max = 100 self.local_max_features = local_max_features self.local_min_features = 0.5 self.local_region_iterations = 20 self.local_region_threshold = int(self.local_region_iterations / 2) self.n_bins = n_bins self.n_selected = 1 self.random_state = random_state assert len(estimator_list) > 1, "The estimator list has less than 2 estimators." if self.n_bins >= self.n_clf: warnings.warn("Number of histogram bins greater than number of classifiers, reducing n_bins to n_clf.") self.n_bins = self.n_clf for estimator in self.estimator_list: check_detector(estimator)
def fit(self, X, y=None): """Fit detector. y is ignored in unsupervised methods. Parameters ---------- X : numpy array of shape (n_samples, n_features) The input samples. y : Ignored Not used, present for API consistency by convention. Returns ------- self : object Fitted estimator. """ # check detector_list if len(self.detector_list) < 2: raise ValueError("The detector list has less than 2 detectors.") for detector in self.detector_list: check_detector(detector) # check random state and input self.random_state = check_random_state(self.random_state) X = check_array(X) self._set_n_classes(y) self.n_features_ = X.shape[1] # normalize input data self.X_train_norm_ = X train_scores = np.zeros([self.X_train_norm_.shape[0], self.n_clf]) # fit each base detector and calculate standardized train scores for k, detector in enumerate(self.detector_list): detector.fit(self.X_train_norm_) train_scores[:, k] = detector.decision_scores_ self.train_scores_ = train_scores # set decision scores and threshold self.decision_scores_ = self._get_decision_scores(X) self._process_decision_scores() return self
def fit(self, X, y=None): """ Fit LSCP using X as training data Parameters ---------- X : numpy array, shape (n_samples, n_features) Training data y : None, optional (default=None) Labels not necessary for unsupervised method Returns ------- None """ # check detector_list if len(self.detector_list) < 2: raise ValueError("The detector list has less than 2 detectors.") for detector in self.detector_list: check_detector(detector) # check random state and input self.random_state = check_random_state(self.random_state) X = check_array(X) self._set_n_classes(y) self.n_features_ = X.shape[1] # normalize input data self.X_train_norm_ = X train_scores = np.zeros([self.X_train_norm_.shape[0], self.n_clf]) # fit each base detector and calculate standardized train scores for k, detector in enumerate(self.detector_list): detector.fit(self.X_train_norm_) train_scores[:, k] = detector.decision_scores_ self.train_scores_ = train_scores # set decision scores and threshold self.decision_scores_ = self._get_decision_scores(X) self._process_decision_scores() return
def fit(self, X, y=None): """Fit detector. y is optional for unsupervised methods. Parameters ---------- X : numpy array of shape (n_samples, n_features) The input samples. y : numpy array of shape (n_samples,), optional (default=None) The ground truth of the input samples (labels). """ # check detector_list if len(self.detector_list) < 2: raise ValueError("The detector list has less than 2 detectors.") for detector in self.detector_list: check_detector(detector) # check random state and input self.random_state = check_random_state(self.random_state) X = check_array(X) self._set_n_classes(y) self.n_features_ = X.shape[1] # normalize input data self.X_train_norm_ = X train_scores = np.zeros([self.X_train_norm_.shape[0], self.n_clf]) # fit each base detector and calculate standardized train scores for k, detector in enumerate(self.detector_list): detector.fit(self.X_train_norm_) train_scores[:, k] = detector.decision_scores_ self.train_scores_ = train_scores # set decision scores and threshold self.decision_scores_ = self._get_decision_scores(X) self._process_decision_scores() return self
def test_check_detector_negative(self): with assert_raises(AttributeError): check_detector(self.detector_negative)
def test_check_detector_positive(self): check_detector(self.detector_positive)