hmm 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/hmm.gemspec +5 -2
  4. data/lib/hmm.rb +16 -3
  5. data/test/test_hmm.rb +8 -0
  6. metadata +12 -2
data/Rakefile CHANGED
@@ -12,6 +12,7 @@ begin
12
12
  gem.authors = ["David Tresner-Kirsch"]
13
13
  gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
14
  gem.add_development_dependency "narray", ">= 0"
15
+ gem.add_dependency "narray", ">= 0"
15
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
17
  end
17
18
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hmm}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Tresner-Kirsch"]
12
- s.date = %q{2009-12-02}
12
+ s.date = %q{2010-03-08}
13
13
  s.description = %q{This project is a Ruby gem ('hmm') for machine learning that natively implements a (somewhat) generalized Hidden Markov Model classifier.}
14
14
  s.email = %q{dwkirsch@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -45,13 +45,16 @@ Gem::Specification.new do |s|
45
45
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
46
46
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
47
47
  s.add_development_dependency(%q<narray>, [">= 0"])
48
+ s.add_runtime_dependency(%q<narray>, [">= 0"])
48
49
  else
49
50
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
50
51
  s.add_dependency(%q<narray>, [">= 0"])
52
+ s.add_dependency(%q<narray>, [">= 0"])
51
53
  end
52
54
  else
53
55
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
54
56
  s.add_dependency(%q<narray>, [">= 0"])
57
+ s.add_dependency(%q<narray>, [">= 0"])
55
58
  end
56
59
  end
57
60
 
data/lib/hmm.rb CHANGED
@@ -309,6 +309,15 @@ class HMM
309
309
  alpha
310
310
  end
311
311
 
312
+ def log_likelihood(sequence)
313
+ alpha = forward_probability(sequence)
314
+ log_add(alpha[-1, true])
315
+ end
316
+
317
+ def likelihood(sequence)
318
+ exp(log_likelihood(sequence))
319
+ end
320
+
312
321
  def log_add(values)
313
322
  x = values.max
314
323
  if x > -Infinity
@@ -407,9 +416,13 @@ class HMM
407
416
  end
408
417
  end
409
418
 
410
- def exp(array)
411
- # e to the power of each element
412
- array.collect{|n| Math::E ** n}
419
+ def exp(subject)
420
+ if subject.is_a?(Array) or subject.is_a?(NArray)
421
+ # e to the power of each element
422
+ subject.collect{|n| Math::E ** n}
423
+ else
424
+ return Math::E ** subject
425
+ end
413
426
  end
414
427
 
415
428
  def argmax(narray)
@@ -46,6 +46,14 @@ class TestHmm < Test::Unit::TestCase
46
46
  assert close_enough(expected_beta, \
47
47
  @simple_model.backward_probability(["A","B","A"]).collect{|x| Math::E**x})
48
48
  end
49
+
50
+ should "compute sequence likelihoods" do
51
+ assert @simple_model.likelihood(["A", "A"]) \
52
+ +@simple_model.likelihood(["A", "B"]) \
53
+ +@simple_model.likelihood(["B", "B"]) \
54
+ +@simple_model.likelihood(["B", "A"]) \
55
+ == 1
56
+ end
49
57
 
50
58
  should "compute xi" do
51
59
  @simple_model.gamma(@simple_model.xi(["A","B","A"]))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hmm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Tresner-Kirsch
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-02 00:00:00 -05:00
12
+ date: 2010-03-08 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,16 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: "0"
34
34
  version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: narray
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
35
45
  description: This project is a Ruby gem ('hmm') for machine learning that natively implements a (somewhat) generalized Hidden Markov Model classifier.
36
46
  email: dwkirsch@gmail.com
37
47
  executables: []