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 linear kernel. Computes the scalar (inner) product of two feature vectors

026     * and is the default inner kernel of all the other kernel implementations.

027     * 

028     * @author Tom Crecelius & Martin Theobald

029     */

030    public class LinearKernel extends Kernel {

031    

032      public double evaluate(FeatureVector v1, FeatureVector v2) {

033        int i = 0, j = 0;

034        double result = 0.0;

035        while (i < v1.size() && j < v2.size()) {

036          if (v1.getDimAt(i) > v2.getDimAt(j))

037            j++;

038          else if (v1.getDimAt(i) < v2.getDimAt(j))

039            i++;

040          else

041            result += (v1.getValueAt(i++) * v2.getValueAt(j++));

042        }

043        return result;

044      }

045    }