class_docstr: Performs scaling of linear variables according to Friedman et alpha_l. 2005 Sec 5
  
  Each variable is first Winsorized l->l*, then standardised as 0.4 x l* / std(l*)
  Warning: this class should not be used directly.
code: def train(self, X):
      # get multipliers
      if self.winsorizer != None:
          X_trimmed = self.winsorizer.trim(X)
      else:
          X_trimmed = X
  
      scale_multipliers = np.ones(X.shape[1])
      for i_col in np.arange(X.shape[1]):
          num_uniq_vals = len(np.unique(X[:, i_col]))
          if (
              num_uniq_vals > 2
          ):  # don't scale binary variables which are effectively already rules
              scale_multipliers[i_col] = 0.4 / (
                  1.0e-12 + np.std(X_trimmed[:, i_col])
              )
      self.scale_multipliers = scale_multipliers
  
file_path: imodels/imodels/util/transforms.py
imports: import numpy
label_desc: Use image node_id 2 for calling the FriedScale obj's underlying member method code with example usage: obj.train(X) without return types