Class: Evoc::InterestingnessMeasureAggregator
- Inherits:
-
Object
- Object
- Evoc::InterestingnessMeasureAggregator
- Defined in:
- lib/evoc/interestingness_measure_aggregator.rb
Instance Attribute Summary collapse
-
#max ⇒ Object
Returns the value of attribute max.
-
#mid ⇒ Object
Returns the value of attribute mid.
-
#min ⇒ Object
Returns the value of attribute min.
-
#size ⇒ Object
Returns the value of attribute size.
-
#type ⇒ Object
Returns the value of attribute type.
-
#values ⇒ Object
Returns the value of attribute values.
Instance Method Summary collapse
-
#cg ⇒ Object
cumulative gain aka sum.
-
#dcg ⇒ Object
discounted CG.
-
#dcg2 ⇒ Object
discounted CG2.
-
#hcg ⇒ Object
Our own aggregation functions.
- #hcg_hc ⇒ Object
-
#initialize(type, values) ⇒ InterestingnessMeasureAggregator
constructor
A new instance of InterestingnessMeasureAggregator.
-
#normalize_measures ⇒ Object
def discounted_cg3 agr = normalize_measures.each_with_index.inject(0) {|sum,(element,index)| sum + element >= 0 ? (2**element-1)/Math.log2(index+2) : -(2**element.abs-1)/Math.log2(index+2) } agr = agr + self.mid Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr) end.
Constructor Details
#initialize(type, values) ⇒ InterestingnessMeasureAggregator
5 6 7 8 9 10 11 12 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 5 def initialize(type,values) self.type = type self.min = Evoc::InterestingnessMeasures.get_min(type) self.mid = Evoc::InterestingnessMeasures.get_mid(type) self.max = Evoc::InterestingnessMeasures.get_max(type) self.values = values self.size = values.size end |
Instance Attribute Details
#max ⇒ Object
Returns the value of attribute max.
3 4 5 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 3 def max @max end |
#mid ⇒ Object
Returns the value of attribute mid.
3 4 5 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 3 def mid @mid end |
#min ⇒ Object
Returns the value of attribute min.
3 4 5 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 3 def min @min end |
#size ⇒ Object
Returns the value of attribute size.
3 4 5 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 3 def size @size end |
#type ⇒ Object
Returns the value of attribute type.
3 4 5 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 3 def type @type end |
#values ⇒ Object
Returns the value of attribute values.
3 4 5 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 3 def values @values end |
Instance Method Details
#cg ⇒ Object
cumulative gain aka sum
35 36 37 38 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 35 def cg aggregated = normalize_measures.inject(:+) + self.mid Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: aggregated) end |
#dcg ⇒ Object
discounted CG
41 42 43 44 45 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 41 def dcg agr = normalize_measures.first + normalize_measures[1..-1].each_with_index.inject(0) {|sum,(element,index)| sum + element/Math.log2(index+2)} agr = agr + self.mid Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr) end |
#dcg2 ⇒ Object
discounted CG2
48 49 50 51 52 53 54 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 48 def dcg2 agr = normalize_measures.first + normalize_measures[1..-1].each_with_index.inject(0) {|sum,(element,index)| sum + (element >= 0 ? (2**element-1)/Math.log2(index+2) : -(2**element.abs-1)/Math.log2(index+2)) } agr = agr + self.mid Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr) end |
#hcg ⇒ Object
Our own aggregation functions
17 18 19 20 21 22 23 24 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 17 def hcg agr = normalize_measures.inject {|tot,i| direction = i > 0 ? self.max-self.mid : self.min-self.mid coefficient = direction.to_f.finite? ? (direction-tot)/direction : 1 tot + coefficient*i } + self.mid Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr) end |
#hcg_hc ⇒ Object
26 27 28 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 26 def hcg_hc self.hcg end |
#normalize_measures ⇒ Object
def discounted_cg3
agr = normalize_measures.each_with_index.inject(0) {|sum,(element,index)|
sum + element >= 0 ? (2**element-1)/Math.log2(index+2) : -(2**element.abs-1)/Math.log2(index+2)
}
agr = agr + self.mid
Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr)
end
def discounted_cg4
agr = normalize_measures.each_with_index.inject(0) {|sum,(element,index)|
sum + (2**element)/Math.log2(index+2)
}
agr = agr + self.mid
Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr)
end
def discounted_cg5
agr = normalize_measures.each_with_index.inject(0) {|sum,(element,index)|
sum + element == 0 ? 0 : (2**element)/Math.log2(index+2)
}
agr = agr + self.mid
Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr)
end
def discounted_rank_cg
agr = normalize_measures.each_with_index.inject(0) {|sum,(element,index)|
sum + element/(index+1)
}
agr = agr + self.mid
Evoc::InterestingnessMeasure.new(type: self.type, min: self.min, mid: self.mid, max: self.max, value: agr)
end
89 90 91 |
# File 'lib/evoc/interestingness_measure_aggregator.rb', line 89 def normalize_measures self.values.map {|m| m - self.mid} end |