callidus 1.0.67 → 1.0.73
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/callidus.rb +2 -1
- data/lib/src/ExponentialRegression.rb +89 -0
- data/lib/src/KNN.rb +1 -1
- data/lib/src/LinearRegression.rb +2 -0
- data/lib/src/Winnow.rb +3 -3
- data/lib/util/Comp.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64ccfbdf3a87cae055d4adb41fde3f0e3b4401ac
|
4
|
+
data.tar.gz: a63079883594328163839c8f881c1c92f129ae0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50a366f39e18b3dab2820f946a26229ede811951790ea093e79a2d842ccd18307d71ca28670a1465f5be80613bbd6e45a9ca56d4be057405a8e3401526f38438
|
7
|
+
data.tar.gz: 3f88ebb2f1b8e2b8ce1c384367f7aece0c45cf274b2ef5a921909aa46fcc46e198d7e2b7cbf71ab06678ee7014127b5277afb8d1473b2ea7936f57e157f08d37
|
data/lib/callidus.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
require_relative "../util/Comp"
|
2
|
+
|
3
|
+
module Callidus
|
4
|
+
class ExponentialRegression
|
5
|
+
attr_accessor :input
|
6
|
+
attr_accessor :output
|
7
|
+
attr_accessor :predicted_output
|
8
|
+
|
9
|
+
attr_reader :a
|
10
|
+
attr_reader :b
|
11
|
+
|
12
|
+
attr_reader :correlation
|
13
|
+
attr_reader :standard_error
|
14
|
+
|
15
|
+
def initialize(ip = [], op = [])
|
16
|
+
@input = ip
|
17
|
+
@output = op
|
18
|
+
|
19
|
+
@trained = false
|
20
|
+
end
|
21
|
+
|
22
|
+
private def assert_trained(method = "train")
|
23
|
+
if !@trained
|
24
|
+
raise Util::UntrainedError.new("ExponentialRegression")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def formatted
|
29
|
+
assert_trained()
|
30
|
+
|
31
|
+
"f(x) = #{@a}e^#{@b}x"
|
32
|
+
end
|
33
|
+
|
34
|
+
def train
|
35
|
+
mean_x = @input.mean
|
36
|
+
mean_lny = @output.inject(0.0) { |s, n| s + Math.log(n) } / @output.size
|
37
|
+
|
38
|
+
sum_xx = 0.0
|
39
|
+
sum_xy = 0.0
|
40
|
+
sum_yy = 0.0
|
41
|
+
|
42
|
+
@input.each_index do |i|
|
43
|
+
sum_xx += @input[i] * @input[i]
|
44
|
+
sum_xy += @input[i] * Math.log(@output[i])
|
45
|
+
sum_yy += Math.log(@output[i]) * Math.log(@output[i])
|
46
|
+
end
|
47
|
+
|
48
|
+
sum_xx = (sum_xx / @input.size) - (mean_x * mean_x)
|
49
|
+
sum_xy = (sum_xy / @input.size) - (mean_x * mean_lny)
|
50
|
+
sum_yy = (sum_yy / @output.size) - (mean_lny * mean_lny)
|
51
|
+
|
52
|
+
@b = sum_xy / sum_xx
|
53
|
+
@a = 2.7182818284590452353602 ** (mean_lny - b * mean_x)
|
54
|
+
|
55
|
+
@predicted_output = @input.map { |x| (@a * (2.7182818284590452353602 ** (@b * x))).round(3) }
|
56
|
+
|
57
|
+
@correlation = (sum_xy / (Math.sqrt(sum_xx) * Math.sqrt(sum_yy))).round(3)
|
58
|
+
|
59
|
+
@trained = true
|
60
|
+
|
61
|
+
@a = @a.round(3)
|
62
|
+
@b = @b.round(3)
|
63
|
+
|
64
|
+
self.find_standard_error
|
65
|
+
end
|
66
|
+
|
67
|
+
def find_standard_error
|
68
|
+
assert_trained()
|
69
|
+
|
70
|
+
n = @input.size > @output.size ? @output.size : @input.size
|
71
|
+
|
72
|
+
diffs = []
|
73
|
+
|
74
|
+
n.times do |i|
|
75
|
+
diffs << (@predicted_output[i] - @output[i]) ** 2
|
76
|
+
end
|
77
|
+
|
78
|
+
@standard_error = (Math.sqrt(diffs.sum/(n - 2.0))).round(3)
|
79
|
+
|
80
|
+
self
|
81
|
+
end
|
82
|
+
|
83
|
+
def predict(x)
|
84
|
+
assert_trained()
|
85
|
+
|
86
|
+
@a * (2.7182818284590452353602 ** (@b * x))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/lib/src/KNN.rb
CHANGED
data/lib/src/LinearRegression.rb
CHANGED
data/lib/src/Winnow.rb
CHANGED
@@ -29,7 +29,7 @@ module Callidus
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def train(a = @a)
|
32
|
-
if (@input[0] and @input[0].size != @weights.size)
|
32
|
+
if (@input.size > 0 and @input[0] and @input[0].size > 0 and @input[0].size != @weights.size)
|
33
33
|
@weights = Array.new(@input[0].size, @default_weight)
|
34
34
|
end
|
35
35
|
|
@@ -43,7 +43,7 @@ module Callidus
|
|
43
43
|
|
44
44
|
@trained = true
|
45
45
|
|
46
|
-
|
46
|
+
self
|
47
47
|
end
|
48
48
|
|
49
49
|
def predict(x, options = {})
|
@@ -58,7 +58,7 @@ module Callidus
|
|
58
58
|
probability += @weights[i] * x[i] + bias
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
(probability > threshold ? 1 : 0)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
data/lib/util/Comp.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: callidus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.73
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hayden Higginbotham
|
@@ -18,6 +18,7 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/callidus.rb
|
21
|
+
- lib/src/ExponentialRegression.rb
|
21
22
|
- lib/src/KNN.rb
|
22
23
|
- lib/src/LinearRegression.rb
|
23
24
|
- lib/src/Winnow.rb
|
@@ -36,7 +37,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
36
37
|
requirements:
|
37
38
|
- - ">="
|
38
39
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
40
|
+
version: 1.9.0
|
40
41
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
42
|
requirements:
|
42
43
|
- - ">="
|