class Callidus::ExponentialRegression
Attributes
a[R]
b[R]
correlation[R]
input[RW]
output[RW]
predicted_output[RW]
standard_error[R]
Public Class Methods
new(ip = [], op = [])
click to toggle source
# File lib/src/ExponentialRegression.rb, line 15 def initialize(ip = [], op = []) @input = ip @output = op @trained = false end
Public Instance Methods
find_standard_error()
click to toggle source
# File lib/src/ExponentialRegression.rb, line 67 def find_standard_error assert_trained() n = @input.size > @output.size ? @output.size : @input.size diffs = [] n.times do |i| diffs << (@predicted_output[i] - @output[i]) ** 2 end @standard_error = (Math.sqrt(diffs.sum/(n - 2.0))).round(3) self end
formatted()
click to toggle source
# File lib/src/ExponentialRegression.rb, line 28 def formatted assert_trained() "f(x) = #{@a}e^#{@b}x" end
predict(x)
click to toggle source
# File lib/src/ExponentialRegression.rb, line 83 def predict(x) assert_trained() @a * (2.7182818284590452353602 ** (@b * x)) end
train()
click to toggle source
# File lib/src/ExponentialRegression.rb, line 34 def train mean_x = @input.mean mean_lny = @output.inject(0.0) { |s, n| s + Math.log(n) } / @output.size sum_xx = 0.0 sum_xy = 0.0 sum_yy = 0.0 @input.each_index do |i| sum_xx += @input[i] * @input[i] sum_xy += @input[i] * Math.log(@output[i]) sum_yy += Math.log(@output[i]) * Math.log(@output[i]) end sum_xx = (sum_xx / @input.size) - (mean_x * mean_x) sum_xy = (sum_xy / @input.size) - (mean_x * mean_lny) sum_yy = (sum_yy / @output.size) - (mean_lny * mean_lny) @b = sum_xy / sum_xx @a = 2.7182818284590452353602 ** (mean_lny - b * mean_x) @predicted_output = @input.map { |x| (@a * (2.7182818284590452353602 ** (@b * x))).round(3) } @correlation = (sum_xy / (Math.sqrt(sum_xx) * Math.sqrt(sum_yy))).round(3) @trained = true @a = @a.round(3) @b = @b.round(3) self.find_standard_error end
Private Instance Methods
assert_trained(method = "train")
click to toggle source
# File lib/src/ExponentialRegression.rb, line 22 def assert_trained(method = "train") if !@trained raise Util::UntrainedError.new("ExponentialRegression") end end