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 __init__(
      self,
      c_k=0,
      sor_omega=1.0,
      threshold=1e-6,
      lambda_param=1.0,
      max_iteration=500,
  ):
      super(MLClassifierBase, self).__init__()
      self.max_iteration = max_iteration
      self.threshold = threshold
      self.lambda_param = lambda_param  # TODO: possibility to add different lambda to different labels
      self.c_k = c_k
      self.sor_omega = sor_omega
      self.copyable_attrs = [
          "c_k",
          "sor_omega",
          "lambda_param",
          "threshold",
          "max_iteration",
      ]
  
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 1 to create a new MLTSVM object from inherited base classes: MLClassifierBase with example: obj = MLTSVM(c_k, sor_omega, threshold, lambda_param, max_iteration)