34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# 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
|