sig
  module Svm :
    sig
      module Problem :
        sig
          type t
          val create :
            x:Lacaml.D.mat -> y:Lacaml.D.vec -> Libsvm.Svm.Problem.t
          val create_k :
            k:Lacaml.D.mat -> y:Lacaml.D.vec -> Libsvm.Svm.Problem.t
          val get_n_samples : Libsvm.Svm.Problem.t -> int
          val get_n_feats : Libsvm.Svm.Problem.t -> int
          val get_targets : Libsvm.Svm.Problem.t -> Lacaml.D.vec
          val load : string -> Libsvm.Svm.Problem.t
          val output : Libsvm.Svm.Problem.t -> Pervasives.out_channel -> unit
          val save : Libsvm.Svm.Problem.t -> string -> unit
          val min_max_feats :
            Libsvm.Svm.Problem.t ->
            [ `Min of Lacaml.D.vec ] * [ `Max of Lacaml.D.vec ]
          val scale :
            ?lower:float ->
            ?upper:float ->
            Libsvm.Svm.Problem.t ->
            min_feats:Lacaml.D.vec ->
            max_feats:Lacaml.D.vec -> Libsvm.Svm.Problem.t
          val print : Libsvm.Svm.Problem.t -> unit
        end
      module Model :
        sig
          type t
          val get_svm_type :
            Libsvm.Svm.Model.t ->
            [ `C_SVC | `EPSILON_SVR | `NU_SVC | `NU_SVR | `ONE_CLASS ]
          val get_n_classes : Libsvm.Svm.Model.t -> int
          val get_labels : Libsvm.Svm.Model.t -> int list
          val get_n_sv : Libsvm.Svm.Model.t -> int
          val get_svr_probability : Libsvm.Svm.Model.t -> float
          val save : Libsvm.Svm.Model.t -> string -> unit
          val load : string -> Libsvm.Svm.Model.t
        end
      val train :
        ?svm_type:[ `C_SVC | `EPSILON_SVR | `NU_SVC | `NU_SVR | `ONE_CLASS ] ->
        ?kernel:[ `LINEAR | `POLY | `PRECOMPUTED | `RBF | `SIGMOID ] ->
        ?degree:int ->
        ?gamma:float ->
        ?coef0:float ->
        ?c:float ->
        ?nu:float ->
        ?eps:float ->
        ?cachesize:float ->
        ?tol:float ->
        ?shrinking:[ `off | `on ] ->
        ?probability:bool ->
        ?weights:(int * float) list ->
        ?verbose:bool -> Libsvm.Svm.Problem.t -> Libsvm.Svm.Model.t
      val cross_validation :
        ?svm_type:[ `C_SVC | `EPSILON_SVR | `NU_SVC | `NU_SVR | `ONE_CLASS ] ->
        ?kernel:[ `LINEAR | `POLY | `PRECOMPUTED | `RBF | `SIGMOID ] ->
        ?degree:int ->
        ?gamma:float ->
        ?coef0:float ->
        ?c:float ->
        ?nu:float ->
        ?eps:float ->
        ?cachesize:float ->
        ?tol:float ->
        ?shrinking:[ `off | `on ] ->
        ?probability:bool ->
        ?weights:(int * float) list ->
        ?verbose:bool -> n_folds:int -> Libsvm.Svm.Problem.t -> Lacaml.D.vec
      val predict_one : Libsvm.Svm.Model.t -> x:Lacaml.D.vec -> float
      val predict : Libsvm.Svm.Model.t -> x:Lacaml.D.mat -> Lacaml.D.vec
      val predict_values :
        Libsvm.Svm.Model.t -> x:Lacaml.D.vec -> float array array
      val predict_probability :
        Libsvm.Svm.Model.t -> x:Lacaml.D.vec -> float * float array
      val predict_from_file :
        Libsvm.Svm.Model.t ->
        string ->
        [ `Expected of Lacaml.D.vec ] * [ `Predicted of Lacaml.D.vec ]
    end
  module Stats :
    sig
      val calc_n_correct : Lacaml.D.vec -> Lacaml.D.vec -> int
      val calc_accuracy : Lacaml.D.vec -> Lacaml.D.vec -> float
      val calc_mse : Lacaml.D.vec -> Lacaml.D.vec -> float
      val calc_scc : Lacaml.D.vec -> Lacaml.D.vec -> float
    end
end