001 /*
002 * JNI_SVM-light - A Java Native Interface for SVM-light
003 *
004 * Copyright (C) 2005
005 * Tom Crecelius & Martin Theobald
006 * Max-Planck Institute for Computer Science
007 *
008 * This program is free software; you can redistribute it and/or modify it under
009 * the terms of the GNU General Public License as published by the Free Software
010 * Foundation.
011 *
012 * This program is distributed in the hope that it will be useful, but WITHOUT
013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
014 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
015 * details.
016 *
017 * You should have received a copy of the GNU General Public License along with
018 * this program; if not, write to the Free Software Foundation, Inc., 51
019 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021
022 package jnisvmlight;
023
024 /**
025 * A radial base kernel.
026 *
027 * @author Tom Crecelius & Martin Theobald
028 */
029 public class RadialBaseKernel extends Kernel {
030
031 private double m_width;
032
033 protected RadialBaseKernel() {
034 this(new LinearKernel(), 1.0);
035 }
036
037 public RadialBaseKernel(Kernel nestedKernel, double width) {
038 super(nestedKernel);
039 this.m_width = width;
040 }
041
042 public double evaluate(FeatureVector v1, FeatureVector v2) {
043 return Math.exp(-Math.abs(2.0 * m_kernel.evaluate(v1, v2)
044 - m_kernel.evaluate(v1, v1) - m_kernel.evaluate(v2, v2))
045 / (2.0 * m_width * m_width));
046 }
047
048 public double getWidth() {
049 return m_width;
050 }
051
052 public void setWidth(double width) {
053 this.m_width = width;
054 }
055
056 public String toString() {
057 return "Radial base kernel K(x, k) = exp(-abs(k(x,x) - k(y,y)) / (2*"
058 + m_width + "^2)" + "; k = " + m_kernel.toString();
059 }
060 }