class_docstr: Rotation-based Outlier Detection (ROD), is a robust and parameter-free
  algorithm that requires no statistical distribution assumptions and
  works intuitively in three-dimensional space, where the 3D-vectors,
  representing the data points, are rotated about the geometric median
  two times counterclockwise using Rodrigues rotation formula.
  The results of the rotation are parallelepipeds where their volumes are
  mathematically analyzed as cost functions and used to calculate the
  Median Absolute Deviations to obtain the outlying score.
  For high dimensions > 3, the overall score is calculated by taking the
  average of the overall 3D-subspaces scores, that were resulted from
  decomposing the original data space.
  See :cite:`almardeny2020novel` for details.
  
  Parameters
  ----------
  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.
  
  parallel_execution: bool, optional (default=False).
      If set to True, the algorithm will run in parallel,
      for a better execution time. It is recommended to set
      this parameter to True ONLY for high dimensional data > 10,
      and if a proper hardware is available.
  
  Attributes
  ----------
  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: ["Rotation-based","Outlier","Detection","(","ROD",")",",","is","a","robust","and","parameter-free","algorithm","that","requires","no","statistical","distribution","assumptions","and","works","intuitively","in","three-dimensional","space",",","where","the","3D-vectors",",","representing","the","data","points",",","are","rotated","about","the","geometric","median","two","times","counterclockwise","using","Rodrigues","rotation","formula",".","The","results","of","the","rotation","are","parallelepipeds","where","their","volumes","are","mathematically","analyzed","as","cost","functions","and","used","to","calculate","the","Median","Absolute","Deviations","to","obtain","the","outlying","score",".","For","high","dimensions",">","3",",","the","overall","score","is","calculated","by","taking","the","average","of","the","overall","3D-subspaces","scores",",","that","were","resulted","from","decomposing","the","original","data","space",".","See",":","cite",":","`","almardeny2020novel","`","for","details",".","Parameters","--","--","--","--","--","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",".","parallel_execution",":","bool",",","optional","(","default=False",")",".","If","set","to","True",",","the","algorithm","will","run","in","parallel",",","for","a","better","execution","time",".","It","is","recommended","to","set","this","parameter","to","True","ONLY","for","high","dimensional","data",">","10",",","and","if","a","proper","hardware","is","available",".","Attributes","--","--","--","--","--","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.
      """
      X = check_array(X)
      self._set_n_classes(y)
      # reset learning parameters after each fit
      self.gm_ = None  # geometric median(s)
      self.median_ = None  # MAD median(s)
      self.data_scaler_ = None  # data scaler (in case of d>3)
      self.angles_scaler1_ = None  # scaler(s) of Angles Group 1
      self.angles_scaler2_ = None  # scaler(s) of Angles Group 2
      self.decision_scores_ = self.decision_function(X)
      self._process_decision_scores()
  
      return self
  
imports: from __future__ import division
  from __future__ import print_function
  import multiprocessing
  from itertools import combinations
  from multiprocessing import Pool
  import numba
  import numpy
  from sklearn.preprocessing import MinMaxScaler, RobustScaler
  from sklearn.utils import check_array
  from .base import BaseDetector
label_desc: Use image node_id 2 for calling the ROD obj's underlying member method code with example usage: obj.fit(X, y) and returns: self