Ignore:
Timestamp:
07/07/11 09:32:31 (13 years ago)
Author:
sherbold
Message:
  • extended PPM to enforce a minimum markov order
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/PredictionByPartialMatch.java

    r102 r109  
    2828         */ 
    2929        private static final long serialVersionUID = 1L; 
     30 
     31        /** 
     32         * <p> 
     33         * Minimum order of the Markov model. 
     34         * </p> 
     35         */ 
     36        private int minOrder; 
    3037 
    3138        /** 
     
    6774         */ 
    6875        public PredictionByPartialMatch(int markovOrder, Random r, double probEscape) { 
     76                this(markovOrder, 0, r, probEscape); 
     77        } 
     78 
     79        /** 
     80         * <p> 
     81         * Creates a new PredictionByPartialMatch model with a given Markov order 
     82         * and escape probability. 
     83         * </p> 
     84         *  
     85         * @param markovOrder 
     86         *            Markov order of the model 
     87         * @param minOrder 
     88         *            minimum order of the model; if this order is reached, there is 
     89         *            no escape 
     90         * @param r 
     91         *            random number generator used by probabilistic methods of the 
     92         *            class 
     93         * @param probEscape 
     94         *            escape probability used by the model 
     95         */ 
     96        public PredictionByPartialMatch(int markovOrder, int minOrder, Random r, 
     97                        double probEscape) { 
    6998                super(markovOrder, r); 
    7099                this.probEscape = probEscape; 
     100                this.minOrder = minOrder; 
    71101        } 
    72102 
     
    97127         * <p> 
    98128         * Calculates the probability of the next event based on the formula:<br> 
    99          * P_{PPM}(X_n|X_{n-1},...,X_{n-k}) = \sum_{i=k}^1 escape^{i-1} 
    100          * P_{MM^i}(X_n|X_{n-1},...,X_{n-i})(1-escape)<br> 
     129         * P_{PPM}(X_n|X_{n-1},...,X_{n-k}) = \sum_{i=k}^min escape^{k-i} 
     130         * P_{MM^i}(X_n 
     131         * |X_{n-1},...,X_{n-i})(1-escape)+escape^(k-min)P(X_n|X_{n-i},... 
     132         * ,X_{n-min})<br> 
    101133         * P_{MM^i} denotes the probability in an i-th order Markov model. 
    102134         * </p> 
     
    124156 
    125157                int countSymbol = trie.getCount(contextCopy, symbol); // N(s\sigma) 
    126                 if (contextCopy.size() == 0) { 
    127                         resultCurrentContex = ((double) countSymbol) / sumCountFollowers; 
     158                if (sumCountFollowers == 0) { 
     159                        resultCurrentContex = 0.0; 
    128160                } else { 
    129                         if (sumCountFollowers == 0) { 
    130                                 resultCurrentContex = 0.0; 
    131                         } else { 
    132                                 resultCurrentContex = ((double) countSymbol / sumCountFollowers) 
    133                                                 * (1 - probEscape); 
    134                         } 
     161                        resultCurrentContex = (double) countSymbol / sumCountFollowers; 
     162                } 
     163                if (contextCopy.size() != minOrder) { 
     164                        resultCurrentContex *= (1 - probEscape); 
    135165                        contextCopy.remove(0); 
    136                         double probSuffix = getProbability(contextCopy, symbol); 
    137                         if (followers.size() == 0) { 
    138                                 resultShorterContex = probSuffix; 
    139                         } else { 
    140                                 resultShorterContex = probEscape * probSuffix; 
     166                        if (contextCopy.size() >= minOrder) { 
     167                                double probSuffix = getProbability(contextCopy, symbol); 
     168 
     169                                if (followers.size() == 0) { 
     170                                        resultShorterContex = probSuffix; 
     171                                } else { 
     172                                        resultShorterContex = probEscape * probSuffix; 
     173                                } 
    141174                        } 
    142175                } 
Note: See TracChangeset for help on using the changeset viewer.