module Prolly::RandVar::Entropy
Public Instance Methods
entropy()
click to toggle source
Entropy
doesn’t take hashes (for now?) If it did, I’m not sure what H(color=green) means at all.
# File lib/prolly/rand_var/entropy.rb, line 8 def entropy if !@spec_rv.empty? raise "Cannot use entropy with specified random variables" else #puts "H(#{@rv} | #{@gv})" if @uspec_gv.empty?# and @spec_gv.empty? entropy_rv else entropy_rv_gv end end end
Private Instance Methods
entropy_rv()
click to toggle source
H(color) H(color, size) H(color | size=small) H(color, size | texture=smooth) H(color | size=small, texture=smooth)
# File lib/prolly/rand_var/entropy.rb, line 30 def entropy_rv distr = pdf distr.inject(0) do |t, kv| name, pn = kv t += -pn * (pn == 0 ? 0.0 : Math.log(pn)) / Math.log(10) end end
entropy_rv_gv()
click to toggle source
H(color | size) H(color, weight | size, texture = smooth) H(color | size, texture = smooth)
# File lib/prolly/rand_var/entropy.rb, line 41 def entropy_rv_gv ::Ps.uniq_vals(@uspec_gv).inject(0) do |t, gv_vals| uspec_gv_speced = Hash[*@uspec_gv.zip(gv_vals).flatten] gv = @spec_gv.merge(uspec_gv_speced) pn = Ps.rv(gv).given(@spec_gv).prob hn = Ps.rv(*@uspec_rv).given(gv).entropy #puts "P(#{gv} | #{@spec_gv}) = #{pn}" #puts "H(#{@uspec_rv} | #{gv}) = #{hn}" #puts " #{Ps.rv(*@uspec_rv).given(gv).prob}" t += (pn * hn) end end