class_docstr: Histogram- based outlier detection (HBOS) is an efficient unsupervised
  method. It assumes the feature independence and calculates the degree
  of outlyingness by building histograms. See :cite:`goldstein2012histogram`
  for details.    
  
  Two versions of HBOS are supported:        
  - Static number of bins: uses a static number of bins for all features.
  - Automatic number of bins: every feature uses a number of bins deemed to 
    be optimal according to the Birge-Rozenblac method
    (:cite:`birge2006many`).
    
  Parameters
  ----------
  n_bins : int or string, optional (default=10)
      The number of bins. "auto" uses the birge-rozenblac method for
      automatic selection of the optimal number of bins for each feature.
  
  alpha : float in (0, 1), optional (default=0.1)
      The regularizer for preventing overflow.
  
  tol : float in (0, 1), optional (default=0.5)
      The parameter to decide the flexibility while dealing
      the samples falling outside the bins.
  
  contamination : float in (0., 0.5), optional (default=0.1)
      The amount of contamination of the data set,
      i.e. the proportion of outliers in the data set. Used when fitting to
      define the threshold on the decision function.
  
  Attributes
  ----------
  bin_edges_ : numpy array of shape (n_bins + 1, n_features )
      The edges of the bins.
  
  hist_ : numpy array of shape (n_bins, n_features)
      The density of each histogram.
  
  decision_scores_ : numpy array of shape (n_samples,)
      The outlier scores of the training data.
      The higher, the more abnormal. Outliers tend to have higher
      scores. This value is available once the detector is fitted.
  
  threshold_ : float
      The threshold is based on ``contamination``. It is the
      ``n_samples * contamination`` most abnormal samples in
      ``decision_scores_``. The threshold is calculated for generating
      binary outlier labels.
  
  labels_ : int, either 0 or 1
      The binary labels of the training data. 0 stands for inliers
      and 1 for outliers/anomalies. It is generated by applying
      ``threshold_`` on ``decision_scores_``.
class_docstr_tok: ["Histogram-","based","outlier","detection","(","HBOS",")","is","an","efficient","unsupervised","method",".","It","assumes","the","feature","independence","and","calculates","the","degree","of","outlyingness","by","building","histograms",".","See",":","cite",":","`","goldstein2012histogram","`","for","details",".","Two","versions","of","HBOS","are","supported",":","-","Static","number","of","bins",":","uses","a","static","number","of","bins","for","all","features",".","-","Automatic","number","of","bins",":","every","feature","uses","a","number","of","bins","deemed","to","be","optimal","according","to","the","Birge-Rozenblac","method","(",":","cite",":","`","birge2006many","`",")",".","Parameters","--","--","--","--","--","n_bins",":","int","or","string",",","optional","(","default=10",")","The","number","of","bins",".","``","auto","''","uses","the","birge-rozenblac","method","for","automatic","selection","of","the","optimal","number","of","bins","for","each","feature",".","alpha",":","float","in","(","0",",","1",")",",","optional","(","default=0.1",")","The","regularizer","for","preventing","overflow",".","tol",":","float","in","(","0",",","1",")",",","optional","(","default=0.5",")","The","parameter","to","decide","the","flexibility","while","dealing","the","samples","falling","outside","the","bins",".","contamination",":","float","in","(","0.",",","0.5",")",",","optional","(","default=0.1",")","The","amount","of","contamination","of","the","data","set",",","i.e",".","the","proportion","of","outliers","in","the","data","set",".","Used","when","fitting","to","define","the","threshold","on","the","decision","function",".","Attributes","--","--","--","--","--","bin_edges_",":","numpy","array","of","shape","(","n_bins","+","1",",","n_features",")","The","edges","of","the","bins",".","hist_",":","numpy","array","of","shape","(","n_bins",",","n_features",")","The","density","of","each","histogram",".","decision_scores_",":","numpy","array","of","shape","(","n_samples",",",")","The","outlier","scores","of","the","training","data",".","The","higher",",","the","more","abnormal",".","Outliers","tend","to","have","higher","scores",".","This","value","is","available","once","the","detector","is","fitted",".","threshold_",":","float","The","threshold","is","based","on","``","contamination","``",".","It","is","the","``","n_samples","*","contamination","``","most","abnormal","samples","in","``","decision_scores_","``",".","The","threshold","is","calculated","for","generating","binary","outlier","labels",".","labels_",":","int",",","either","0","or","1","The","binary","labels","of","the","training","data",".","0","stands","for","inliers","and","1","for","outliers\/anomalies",".","It","is","generated","by","applying","``","threshold_","``","on","``","decision_scores_","``","."]
docstr: 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.
docstr_tok: ["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","."]
code: 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.
      """
      # validate inputs X and y (optional)
      X = check_array(X)
      self._set_n_classes(y)
  
      _, n_features = X.shape[0], X.shape[1]
  
      if isinstance(self.n_bins, str) and self.n_bins.lower() == "auto":
          # Uses the birge rozenblac method for automatic histogram size per feature
          self.hist_ = []
          self.bin_edges_ = []
  
          # build the histograms for all dimensions
          for i in range(n_features):
              n_bins = get_optimal_n_bins(X[:, i])
              hist, bin_edges = np.histogram(
                  X[:, i], bins=n_bins, density=True
              )
              self.hist_.append(hist)
              self.bin_edges_.append(bin_edges)
              # the sum of (width * height) should equal to 1
              assert np.isclose(
                  1, np.sum(hist * np.diff(bin_edges)), atol=0.1
              )
  
          outlier_scores = _calculate_outlier_scores_auto(
              X, self.bin_edges_, self.hist_, self.alpha, self.tol
          )
  
      elif check_parameter(self.n_bins, low=2, high=np.inf):
          self.hist_ = np.zeros([self.n_bins, n_features])
          self.bin_edges_ = np.zeros([self.n_bins + 1, n_features])
  
          # build the histograms for all dimensions
          for i in range(n_features):
              self.hist_[:, i], self.bin_edges_[:, i] = np.histogram(
                  X[:, i], bins=self.n_bins, density=True
              )
              # the sum of (width * height) should equal to 1
              assert np.isclose(
                  1,
                  np.sum(
                      self.hist_[:, i] * np.diff(self.bin_edges_[:, i])
                  ),
                  atol=0.1,
              )
  
          outlier_scores = _calculate_outlier_scores(
              X,
              self.bin_edges_,
              self.hist_,
              self.n_bins,
              self.alpha,
              self.tol,
          )
  
      # invert decision_scores_. Outliers comes with higher outlier scores
      self.decision_scores_ = invert_order(
          np.sum(outlier_scores, axis=1)
      )
      self._process_decision_scores()
      return self
  
file_path: pyod/pyod/models/hbos.py
imports: from __future__ import division
  from __future__ import print_function
  import numpy
  from numba import njit
  from sklearn.utils import check_array
  from sklearn.utils.validation import check_is_fitted
  from .base import BaseDetector
  from ..utils.utility import check_parameter
  from ..utils.utility import get_optimal_n_bins
  from ..utils.utility import invert_order
label_desc: Use image node_id 2 for calling the HBOS obj's underlying member method code with example usage: obj.fit(X, y) and returns: self