Class: Newral::ProbabilitySet
- Inherits:
-
Object
- Object
- Newral::ProbabilitySet
- Defined in:
- lib/newral/probability_set.rb
Instance Attribute Summary collapse
-
#history ⇒ Object
readonly
Returns the value of attribute history.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #add(key, other_key, set_value: nil) ⇒ Object
- #and(key, other_key, set_value: nil) ⇒ Object
-
#aposteriori(key, apriori: nil, set_value: nil) ⇒ Object
aposteriori =( Likelihood * Prior )/ marginal likelihood P(A|B) = P(B|A)*P(A)/P(B).
-
#compute(key) ⇒ Object
P(R|H,S) = P(H|R,S)*P(R|S)/P(H|S) P(R|H,!S) = P(H|R,!S)*P(R|!S)/P(H|!S) 0.9*0.01/(0.9*0.01+0.1*0.99) P(R|H) = P(H|R)*P®/P(H) = 0.9*0.01/ =0.097*0.01 P(H) = P 0.5244999999999999.
- #divide(key, other_key, set_value: nil) ⇒ Object
-
#initialize ⇒ ProbabilitySet
constructor
A new instance of ProbabilitySet.
- #multiply(key, other_key, set_value: nil) ⇒ Object
- #not(key, set_value: nil) ⇒ Object
- #or(key, other_key, set_value: nil) ⇒ Object
- #set(key, set_value) ⇒ Object
- #total(key, apriori: nil) ⇒ Object
Constructor Details
#initialize ⇒ ProbabilitySet
Returns a new instance of ProbabilitySet.
5 6 7 8 |
# File 'lib/newral/probability_set.rb', line 5 def initialize( ) @probabilities={} @history = [] end |
Instance Attribute Details
#history ⇒ Object (readonly)
Returns the value of attribute history.
4 5 6 |
# File 'lib/newral/probability_set.rb', line 4 def history @history end |
Instance Method Details
#[](key) ⇒ Object
10 11 12 |
# File 'lib/newral/probability_set.rb', line 10 def []( key ) @probabilities[ key ] || ( @probabilities[key] = compute(key)) end |
#add(key, other_key, set_value: nil) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/newral/probability_set.rb', line 39 def add( key,other_key, set_value: nil ) computed_key_name = "#{key}+#{other_key}" return @probabilities[ computed_key_name] if @probabilities[ computed_key_name ] && set_value.nil? set_value ||= compute( key )+compute( other_key ) set( computed_key_name, set_value ) end |
#and(key, other_key, set_value: nil) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/newral/probability_set.rb', line 60 def and( key,other_key, set_value: nil ) computed_key_name = "#{key}^#{other_key}" return @probabilities[computed_key_name ] if @probabilities[ computed_key_name ] &&set_value.nil? set_value ||= compute("#{key}|#{other_key}")*compute(other_key) set( computed_key_name, set_value ) end |
#aposteriori(key, apriori: nil, set_value: nil) ⇒ Object
aposteriori =( Likelihood * Prior )/ marginal likelihood P(A|B) = P(B|A)*P(A)/P(B)
47 48 49 50 51 52 |
# File 'lib/newral/probability_set.rb', line 47 def aposteriori( key,apriori:nil, set_value: nil ) computed_key_name = "#{key}|#{apriori}" return @probabilities[ computed_key_name ] if @probabilities[ computed_key_name ] &&set_value.nil? set_value ||= compute("#{apriori}|#{key}")*compute(key)/compute(apriori) set( computed_key_name, set_value ) end |
#compute(key) ⇒ Object
P(R|H,S) = P(H|R,S)*P(R|S)/P(H|S) P(R|H,!S) = P(H|R,!S)*P(R|!S)/P(H|!S) 0.9*0.01/(0.9*0.01+0.1*0.99) P(R|H) = P(H|R)*P®/P(H) = 0.9*0.01/ =0.097*0.01 P(H) = P 0.5244999999999999
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/newral/probability_set.rb', line 80 def compute( key ) probability = if @probabilities[key] @probabilities[key] elsif key.start_with?("!") && @probabilities[key.sub("!","")] self.not(key.sub("!",'')) elsif key.match('\|') @history << key unless @history.member?( key ) key,apriori=key.split("|") self.aposteriori( key, apriori: apriori) elsif key.match('\^') @history << key unless @history.member?( key ) key,other_key=key.split("^") self.and(key,other_key) else apriori_key = @probabilities.keys.find{|p| p.split("|")[0]==key && !p.split("|")[1].match('!') } if apriori_key @history << key unless @history.member?( key ) apriori_key = apriori_key.split("|")[1] value = self.total(key,apriori: apriori_key) self.set( key, value) else raise "not found #{key}" end end probability end |
#divide(key, other_key, set_value: nil) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/newral/probability_set.rb', line 25 def divide( key,other_key, set_value: nil ) computed_key_name = "#{key}/#{other_key}" return @probabilities[ computed_key_name ] if @probabilities[ computed_key_name] &&set_value.nil? set_value ||= compute( key )*compute( other_key ) set( computed_key_name, set_value ) end |
#multiply(key, other_key, set_value: nil) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/newral/probability_set.rb', line 18 def multiply( key,other_key, set_value: nil ) computed_key_name = "#{key}*#{other_key}" return @probabilities[computed_key_name] if @probabilities[ computed_key_name ] &&set_value.nil? set_value ||= compute( key )*compute( other_key ) set( computed_key_name, set_value ) end |
#not(key, set_value: nil) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/newral/probability_set.rb', line 32 def not( key, set_value: nil ) computed_key_name = "!#{key}" return @probabilities[ computed_key_name ] if @probabilities[computed_key_name ] &&set_value.nil? set_value ||= 1-compute( key ) set( computed_key_name, set_value ) end |
#or(key, other_key, set_value: nil) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/newral/probability_set.rb', line 67 def or( key,other_key, set_value: nil ) computed_key_name = "#{key}.#{other_key}" return @probabilities[ computed_key_name ] if @probabilities[computed_key_name] &&set_value.nil? set_value ||= compute(key)+compute(other_key)-compute("#{key}^#{other_key}") set( computed_key_name, set_value ) end |
#set(key, set_value) ⇒ Object
14 15 16 |
# File 'lib/newral/probability_set.rb', line 14 def set( key, set_value ) @probabilities[ key ] = set_value end |
#total(key, apriori: nil) ⇒ Object
55 56 57 |
# File 'lib/newral/probability_set.rb', line 55 def total( key, apriori: nil ) aposteriori(key,apriori: apriori)*compute(apriori)+self.aposteriori(key,apriori: "!#{apriori}")*self.not(apriori) end |