class_docstr: Twin multi-Label Support Vector Machines
  
  Parameters
  ----------
  c_k : int
      the empirical risk penalty parameter that determines the trade-off between the loss terms
  sor_omega: float (default is 1.0)
      the smoothing parameter
  threshold : int (default is 1e-6)
          threshold above which a label should be assigned
  lambda_param : float (default is 1.0)
          the regularization parameter
  max_iteration : int (default is 500)
          maximum number of iterations to use in successive overrelaxation
  
  
  References
  ----------
  
  If you use this classifier please cite the original paper introducing the method:
  
  .. code :: bibtex
  
      @article{chen2016mltsvm,
        title={MLTSVM: a novel twin support vector machine to multi-label learning},
        author={Chen, Wei-Jie and Shao, Yuan-Hai and Li, Chun-Na and Deng, Nai-Yang},
        journal={Pattern Recognition},
        volume={52},
        pages={61--74},
        year={2016},
        publisher={Elsevier}
      }
  
  
  Examples
  --------
  
  Here's a very simple example of using MLTSVM with a fixed number of neighbors:
  
  .. code :: python
  
      from skmultilearn.adapt import MLTSVM
  
      classifier = MLTSVM(c_k = 2**-1)
  
      # train
      classifier.fit(X_train, y_train)
  
      # predict
      predictions = classifier.predict(X_test)
  
  
  You can also use :class:`~sklearn.model_selection.GridSearchCV` to find an optimal set of parameters:
  
  .. code :: python
  
      from skmultilearn.adapt import MLTSVM
      from sklearn.model_selection import GridSearchCV
  
      parameters = {'c_k': [2**i for i in range(-5, 5, 2)]}
      score = 'f1-macro
  
      clf = GridSearchCV(MLTSVM(), parameters, scoring=score)
      clf.fit(X, y)
  
      print (clf.best_params_, clf.best_score_)
  
      # output
      {'c_k': 0.03125} 0.347518217573
code: def predict(self, X):
      X_with_bias = _hstack(X, np.ones((X.shape[0], 1), dtype=X.dtype))
      wk_norms_multiplicated = self.wk_norms[
          np.newaxis, :
      ]  # change to form [[wk1, wk2, ..., wkk]]
      all_distances = (
          -X_with_bias.dot(self.wk_bk.T)
      ) / wk_norms_multiplicated
      predicted_y = np.where(all_distances < self.treshold, 1, 0)
      # TODO: It's possible to add condition to: add label if no labels is in row.
      return predicted_y
  
file_path: scikit-multilearn/skmultilearn/adapt/mltsvm.py
imports: from skmultilearn.base import MLClassifierBase
  import numpy
  import scipy.sparse
  from scipy.linalg import norm
  from scipy.sparse.linalg import inv
  from scipy.linalg import inv
label_desc: Use image node_id 3 for calling the MLTSVM obj's underlying member method code with example usage: obj.predict(X) and returns: predicted_y