def test_invert_order(self): target = np.array([-0.1, -0.3, -0.5, -0.7, -0.2, -0.1]).ravel() scores1 = invert_order(self.scores1) assert_allclose(scores1, target) scores2 = invert_order(self.scores2) assert_allclose(scores2, target) target = np.array([0.6, 0.4, 0.2, 0, 0.5, 0.6]).ravel() scores2 = invert_order(self.scores2, method='subtraction') assert_allclose(scores2, target)
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. sample_weight : array-like, shape (n_samples,) Per-sample weights. Rescale C per sample. Higher weights force the classifier to put more emphasis on these points. Returns ------- self : object Fitted estimator. """ # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) self.detector_ = GaussianMixture( n_components=self.n_components, covariance_type=self.covariance_type, tol=self.tol, reg_covar=self.reg_covar, max_iter=self.max_iter, n_init=self.n_init, init_params=self.init_params, weights_init=self.weights_init, means_init=self.means_init, precisions_init=self.precisions_init, random_state=self.random_state, warm_start=self.warm_start, ) self.detector_.fit(X=X, y=y) # invert decision_scores_. Outliers comes with higher outlier scores self.decision_scores_ = invert_order(self.detector_.score_samples(X)) self._process_decision_scores() return self
def decision_function(self, X): """Predict raw anomaly score of X using the fitted detector. The anomaly score of an input sample is computed based on different detector algorithms. For consistency, outliers are assigned with larger anomaly scores. Parameters ---------- X : numpy array of shape (n_samples, n_features) The training input samples. Sparse matrices are accepted only if they are supported by the base estimator. Returns ------- anomaly_scores : numpy array of shape (n_samples,) The anomaly score of the input samples. """ check_is_fitted(self, ["decision_scores_", "threshold_", "labels_"]) # Invert outlier scores. Outliers come with higher outlier scores return invert_order(self.detector_.score_samples(X))