hmm 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []