/* * SVM.NET Library * Copyright (C) 2008 Matthew Johnson * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using System; using System.Collections.Generic; namespace SVM { /// /// Contains all of the types of SVM this library can model. /// public enum SvmType { /// /// C-SVC. /// C_SVC, /// /// nu-SVC. /// NU_SVC, /// /// one-class SVM /// ONE_CLASS, /// /// epsilon-SVR /// EPSILON_SVR, /// /// nu-SVR /// NU_SVR }; /// /// Contains the various kernel types this library can use. /// public enum KernelType { /// /// Linear: u'*v /// LINEAR, /// /// Polynomial: (gamma*u'*v + coef0)^degree /// POLY, /// /// Radial basis function: exp(-gamma*|u-v|^2) /// RBF, /// /// Sigmoid: tanh(gamma*u'*v + coef0) /// SIGMOID, /// /// Precomputed kernel /// PRECOMPUTED, }; /// /// This class contains the various parameters which can affect the way in which an SVM /// is learned. Unless you know what you are doing, chances are you are best off using /// the default values. /// [Serializable] public class Parameter : ICloneable { private SvmType _svmType; private KernelType _kernelType; private int _degree; private double _gamma; private double _coef0; private double _cacheSize; private double _C; private double _eps; private Dictionary _weights; private double _nu; private double _p; private bool _shrinking; private bool _probability; /// /// Default Constructor. Gives good default values to all parameters. /// public Parameter() { _svmType = SvmType.C_SVC; _kernelType = KernelType.RBF; _degree = 3; _gamma = 0; // 1/k _coef0 = 0; _nu = 0.5; _cacheSize = 40; _C = 1; _eps = 1e-3; _p = 0.1; _shrinking = true; _probability = false; _weights = new Dictionary(); } /// /// Type of SVM (default C-SVC) /// public SvmType SvmType { get { return _svmType; } set { _svmType = value; } } /// /// Type of kernel function (default Polynomial) /// public KernelType KernelType { get { return _kernelType; } set { _kernelType = value; } } /// /// Degree in kernel function (default 3). /// public int Degree { get { return _degree; } set { _degree = value; } } /// /// Gamma in kernel function (default 1/k) /// public double Gamma { get { return _gamma; } set { _gamma = value; } } /// /// Zeroeth coefficient in kernel function (default 0) /// public double Coefficient0 { get { return _coef0; } set { _coef0 = value; } } /// /// Cache memory size in MB (default 100) /// public double CacheSize { get { return _cacheSize; } set { _cacheSize = value; } } /// /// Tolerance of termination criterion (default 0.001) /// public double EPS { get { return _eps; } set { _eps = value; } } /// /// The parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1) /// public double C { get { return _C; } set { _C = value; } } /// /// Contains custom weights for class labels. Default weight value is 1. /// public Dictionary Weights { get { return _weights; } } /// /// The parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5) /// public double Nu { get { return _nu; } set { _nu = value; } } /// /// The epsilon in loss function of epsilon-SVR (default 0.1) /// public double P { get { return _p; } set { _p = value; } } /// /// Whether to use the shrinking heuristics, (default True) /// public bool Shrinking { get { return _shrinking; } set { _shrinking = value; } } /// /// Whether to train an SVC or SVR model for probability estimates, (default False) /// public bool Probability { get { return _probability; } set { _probability = value; } } #region ICloneable Members /// /// Creates a memberwise clone of this parameters object. /// /// The clone (as type Parameter) public object Clone() { return base.MemberwiseClone(); } #endregion } }