⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kullbackleiblerdistancecalculator.java

📁 java实现的隐马尔科夫模型
💻 JAVA
字号:
/* jahmm package - v0.3.1 *//* *  Copyright (c) 2004, Jean-Marc Francois. * *  This file is part of Jahmm. *  Jahmm 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 2 of the License, or *  (at your option) any later version. * *  Jahmm 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 Jahmm; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */package be.ac.ulg.montefiore.run.jahmm.toolbox;import java.util.*;import be.ac.ulg.montefiore.run.jahmm.*;/** * Computes the distance between HMMs. * <p> * The distance metric is similar to the Kullback-Leibler distance defined * on distributions.  More information can be found in * <i>A Probabilistic Distance Measure For HMMs</i> by * <i>Rabiner</i> and <i>Juang</i> (AT&T Technical Journal, vol. 64, Feb. 1985, * pages 391-408). * <p> * This distance measure is not symetric: <code>distance(hmm1, hmm2)</code> * is not necessary equal to <code>distance(hmm2, hmm1)</code>.  To get a * symetric distance definition, compute * <code>(distance(hmm1, hmm2) + distance(hmm2, hmm1)) / 2</code>. */public class KullbackLeiblerDistanceCalculator {        private double distance;    private final int generatedSequencesLength = 10000;            /**     * Computes the Kullback-Leibler distance between two HMMs.     *     * @param hmm1 The first HMM against which the distance is computed.     *             The distance is mesured with regard to this HMM (this must     *             be defined since the Kullback-Leibler distance is not     *             symetric).     * @param hmm2 The second HMM against which the distance is computed.     */    public KullbackLeiblerDistanceCalculator(Hmm hmm1, Hmm hmm2) {	distance = KLCompute(hmm1, hmm2);    }            private double KLCompute(Hmm hmm1, Hmm hmm2) {	Vector oseq = new MarkovGenerator(hmm1).	    observationSequence(generatedSequencesLength);		return 	    (new ForwardBackwardScaledCalculator(oseq, hmm1).lnProbability() -	     new ForwardBackwardScaledCalculator(oseq, hmm2).lnProbability()) /	    generatedSequencesLength;    }            /**     * Returns the distance between <code>hmm1</code> and <code>hmm2</code> with     * regard to <code>hmm1</code>, where <code>hmm1</code> and     * <code>hmm2</code> are the HMM given to      * {@link #KullbackLeiblerDistanceCalculator(Hmm, Hmm) contructor}.     *     * @return The distance between the HMMs.     */    public double distance() {	 return distance;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -