Class: RailsDataExplorer::Statistics::RngCategory
- Inherits:
-
Object
- Object
- RailsDataExplorer::Statistics::RngCategory
- Defined in:
- lib/rails-data-explorer/statistics/rng_category.rb
Instance Method Summary collapse
- #compute_category_order ⇒ Object
-
#initialize(categories, category_probabilities = nil, rng = lambda { Kernel.rand }) ⇒ RngCategory
constructor
A new instance of RngCategory.
- #normalize_category_probabilities ⇒ Object
- #rand ⇒ Object
Constructor Details
#initialize(categories, category_probabilities = nil, rng = lambda { Kernel.rand }) ⇒ RngCategory
Returns a new instance of RngCategory.
5 6 7 8 9 10 |
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 5 def initialize(categories, category_probabilities = nil, rng = lambda { Kernel.rand }) @categories, @category_probabilities, @rng = categories, category_probabilities, rng @category_probabilities ||= @categories.map { |e| @rng.call } @category_probabilities = normalize_category_probabilities @category_order = compute_category_order end |
Instance Method Details
#compute_category_order ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 25 def compute_category_order category_order = [] running_sum = 0 @categories.each_with_index { |e, idx| running_sum += @category_probabilities[idx] category_order << { category: e, threshold: running_sum } } category_order end |
#normalize_category_probabilities ⇒ Object
20 21 22 23 |
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 20 def normalize_category_probabilities total = @category_probabilities.inject(0) { |m,e| m += e } @category_probabilities.map { |e| e / total.to_f } end |
#rand ⇒ Object
12 13 14 15 16 17 18 |
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 12 def rand r_v = @rng.call rnd = @category_order.detect { |e| e[:threshold] >= r_v } rnd[:category] end |