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

surfreta
surfreta New Altair Community Member
edited November 5 in Community Q&A
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.
Tagged:

Answers

  • MariusHelf
    MariusHelf New Altair Community Member
    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
  • surfreta
    surfreta New Altair Community Member
    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.