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    }