module Enumerable
Public Instance Methods
concitional_entropy_with(label)
click to toggle source
# File lib/enumerable_extension.rb, line 16 def concitional_entropy_with(label) dataset = Hash.new{|h,k| h[k] = Array.new } self.each_with_index{|v,i| dataset[v] << label[i] } new_entropy = 0.0 dataset.each{|k,v| new_entropy += (v.size.to_f / self.size)*v.entropy } return new_entropy end
covariance(arr,ddof=1)
click to toggle source
# File lib/enumerable_extension.rb, line 70 def covariance(arr,ddof=1) raise "array length error" if arr.length!=self.length xbar = self.mean ybar = arr.mean accum = 0.0 arr.length.times do |i| accum += (self[i]-xbar)*(arr[i]-ybar) end return accum / (self.length - ddof).to_f end
entropy()
click to toggle source
# File lib/enumerable_extension.rb, line 3 def entropy dataset = Hash.new(0) self.each{|x| dataset[x] += 1 } entropy = 0.0 dataset.each do |k,v| p = v.to_f / self.size entropy += (-p)*Math.log2(p) end return entropy end
geo_mean()
click to toggle source
# File lib/enumerable_extension.rb, line 33 def geo_mean geo_sum = self.inject(0){|accum, i| accum + i*i } Math.sqrt(geo_sum) end
l1_normalize()
click to toggle source
# File lib/enumerable_extension.rb, line 86 def l1_normalize m = self.sum.to_f self.map{|x| x / m } end
l2_normalize()
click to toggle source
# File lib/enumerable_extension.rb, line 91 def l2_normalize m = self.geo_mean self.map{|x| x / m } end
mean()
click to toggle source
# File lib/enumerable_extension.rb, line 29 def mean self.sum / self.length.to_f end
median()
click to toggle source
# File lib/enumerable_extension.rb, line 38 def median sorted = self.sort m = sorted.length / 2 if sorted.length.odd? sorted[m] else (sorted[m-1]+sorted[m])/2.0 end end
pearson(arr,ddof=1)
click to toggle source
# File lib/enumerable_extension.rb, line 82 def pearson(arr,ddof=1) self.covariance(arr,ddof) / (self.stdev(ddof) * arr.stdev(ddof)) end
stdev(ddof=1)
click to toggle source
# File lib/enumerable_extension.rb, line 60 def stdev(ddof=1) return Math.sqrt(self.variance(ddof)) end
sum()
click to toggle source
# File lib/enumerable_extension.rb, line 25 def sum self.inject(0){|accum, i| accum + i } end
sum_and_mean()
click to toggle source
# File lib/enumerable_extension.rb, line 48 def sum_and_mean sum = self.sum mean = sum/self.length.to_f return sum,mean end
variance(ddof=1)
click to toggle source
# File lib/enumerable_extension.rb, line 54 def variance(ddof=1) m = self.mean sum = self.inject(0){|accum, i| accum +(i-m)**2 } sum / (self.length - ddof).to_f end
variance_and_stdev(ddof=1)
click to toggle source
# File lib/enumerable_extension.rb, line 64 def variance_and_stdev(ddof=1) sv = self.variance(ddof) stdev = Math.sqrt(sv) return sv, stdev end