DiscretePredictors is a collection of algorithms for online discrete sequence prediction. It provides a common API to various discrete sequence prediction algorithms. My goals with the package are:
- Simple Interface
- Easily Extendable
- Reproducible Research
Installation For Julia 1.0+
] add DiscretePredictors
Development of this package now targets only Julia 1.+. A release for Julia 0.6.x/0.7.0 can be downloaded from here.
p = Predictor{SymbolType}(parameters...)
creates a predictor instancep
with prediction algorithmPredictor
(see choices below) of symbols ofSymbolType
with specified theparameters
add!( p, sym )
adds a symbol to the modelpredict( p )
computes a probability distribution over the symbols seen so far by the model and returns it as dictionary ofDict{SymbolType,Float64}
info_string( p )
returns a human readable string about the predictorp
unique_string( p )
returns a unique string for the predictorp
with parameter configurationget_best_symbol( p )
returns the symbol of typeSymbolType
with highest probability under current contextsize( p )
returns the number of nodes in current prediction modelp.model
- Adaptive MPP (
AdaptiveMPP
) - Active LeZi (
ALZ
) - Dependency Graph (
DG
) - Discounted HEDGE on KOM (
dHedgePPM
) - Error Weighted PPM (
ewPPM
) - K-th Order Markov Model (
KOM
) - LeZi-Update (
LeZiUpdate
) - LeZi78 (
LeZi78
)
# Initialize a predictor
julia> p = KOM{Char}(4)
DiscretePredictors.KOM{Char}([*] (0)
, Char[], 4)
# Add some symbols
julia> add!( p, 'a' )
julia> add!( p, 'b' )
julia> add!( p, 'c' )
julia> add!( p, 'b' )
# Print out the model
julia> p
DiscretePredictors.KOM{Char}([*] (4)
+---[b] (2)
+---[c] (1)
+---[b] (1)
+---[a] (1)
+---[b] (1)
+---[c] (1)
+---[b] (1)
+---[c] (1)
+---[b] (1)
, ['a', 'b', 'c', 'b'], 4)
# Get prediction
julia> predict( p )
Dict{Char,Float64} with 3 entries:
'b' => 0.25
'a' => 0.125
'c' => 0.625
# Get best symbol
julia> get_best_symbol( p )
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
julia> info_string( p )
"KOM(4)"
julia> unique_string( p )
"KOM_04"
julia> size( p )
10
You can contribute to this project in multiple ways:
- Found a bug? Please file an issue.
- Want to see a new predictor implemented? Please file an issue with relevant references. We will make our best effort to implement it.
- Implemented a new algorithm? Great! Go ahead and open a PR.
This package uses a modified version of trie
from
DataStructures.jl.
I sincerely thank the developers of trie.jl.