issue of setting up C=0 when using Libsvm operator in Rapidminer

surfretasurfreta Member Posts: 3 Contributor I
edited November 2018 in Help
When using libsvm operator, I can set up C = 0. However,when I study the source code of Rapidminer, the Svm.java implements the setting up function as this
              if (svm_type == svm_parameter.C_SVC || svm_type == svm_parameter.EPSILON_SVR || svm_type == svm_parameter.NU_SVR) {
                    if (param.C < 0)
                          return "C < 0";
                    if (param.C == 0.0d) {
                          Kernel kernel = getGenericKernel(prob, param);
                  double c = 0.0d;
                  for (int i = 0; i < prob.l; i++) {
                      c += kernel.kernel_function(i, i);
                  }
                  c = prob.l / c;
                  param.C = c;
                    }
              }

Looks like Rapidminer transforms 'C=0' to some other values base on the above implementation. I would like to know the underlying reason of doing this kind of transformation. SVM should allow us to setup C=0, why Rapidminer changes this to another value.

Answers

  • MariusHelfMariusHelf RapidMiner Certified Expert, Member Posts: 1,869   Unicorn
    Hi, thanks for reporting!

    Does a C value of exactly 0 make sense at all?

    Anyway, as far as I know in RapidMiner a value of C=0 is a "magic value", and C is replaced by 1/(number of examples in training set) . I will create an internal issue requesting to think about this magic value and at least document it better.

    Best regards,
    Marius
  • surfretasurfreta Member Posts: 3 Contributor I
    After searching the forum, the following post
    http://rapid-i.com/rapidforum/index.php?topic=1962.0
    discussed the same question as mine. However, I cannot find the exact reference that Ingo mentioned, which is authored by
    Hastie and Tibshirani (and Friedman?)

    Thank you for investigating this issue.
Sign In or Register to comment.