| 297 | }; |
| 298 | |
| 299 | Kernel::Kernel(int l, svm_node * const * x_, const svm_parameter& param) |
| 300 | :kernel_type(param.kernel_type), degree(param.degree), |
| 301 | gamma(param.gamma), coef0(param.coef0) |
| 302 | { |
| 303 | switch(kernel_type) |
| 304 | { |
| 305 | case LINEAR: |
| 306 | kernel_function = &Kernel::kernel_linear; |
| 307 | break; |
| 308 | case POLY: |
| 309 | kernel_function = &Kernel::kernel_poly; |
| 310 | break; |
| 311 | case RBF: |
| 312 | kernel_function = &Kernel::kernel_rbf; |
| 313 | break; |
| 314 | case SIGMOID: |
| 315 | kernel_function = &Kernel::kernel_sigmoid; |
| 316 | break; |
| 317 | case PRECOMPUTED: |
| 318 | kernel_function = &Kernel::kernel_precomputed; |
| 319 | break; |
| 320 | } |
| 321 | |
| 322 | clone(x,x_,l); |
| 323 | |
| 324 | if(kernel_type == RBF) |
| 325 | { |
| 326 | x_square = new double[l]; |
| 327 | for(int i=0;i<l;i++) |
| 328 | x_square[i] = dot(x[i],x[i]); |
| 329 | } |
| 330 | else |
| 331 | x_square = 0; |
| 332 | } |
| 333 | |
| 334 | Kernel::~Kernel() |
| 335 | { |