baobab 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baobab/tree.rb +54 -48
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc9a6568b4998bd54bb07030d90bbebcc6979d72
4
- data.tar.gz: a392e91b05f89b6dc055249e9b5256e3fc98a93b
3
+ metadata.gz: 9664c33acdc442b0afdd6c7020df547ac6a675ea
4
+ data.tar.gz: 579a7397a9752c0755afcc4dcb72a4fbce2e83cb
5
5
  SHA512:
6
- metadata.gz: cddc12fb7be6d7b5a73f3e659f22df27b52bdd1f75f53e9bddc9da2aa85a0d7499111f4e1b61459d071e489b68017e06306a5287b7aae3a6c84741dafaff8b34
7
- data.tar.gz: f6d28f686b71791eed288ccdd6c6e9d6cfba3632ddbaabc0bd162fc5672f613d77c05150814c9d5a1b53854c04f7ab1b52ebc484536a111b8b7d7da78af20021
6
+ metadata.gz: c3c826681d0640b31a775ef8112870471a29782cbc99e7e457bd3ff01d3e5a12f278a267a57fc4e5848211814779aead62f32454f7622b992743edca22c6b4d5
7
+ data.tar.gz: a4b0cdacebd5a284719ca081c5458140da21cce31774702efd5f3a9fcb16807709cdc33c710a131494c52be18785637a961fd4e55af82c784b893d1a443e0104
@@ -5,63 +5,69 @@ module Baobab
5
5
 
6
6
  class DecisionTree
7
7
 
8
- # The first decision tree node
9
- attr_reader :root
8
+ # The first decision tree node
9
+ attr_reader :root
10
10
 
11
- # The class variable of interest in this decision tree.
12
- attr_reader :class_var
11
+ # The class variable of interest in this decision tree.
12
+ attr_reader :class_var
13
13
 
14
- # The underlying dataset
15
- attr_reader :dataset
14
+ # The underlying dataset
15
+ attr_reader :dataset
16
16
 
17
- def initialize dataset, class_var
18
- @dataset = dataset
19
- @class_var = class_var
20
- entropy = dataset.entropy class_var
21
- @root = DecisionTreeNode.new(
22
- self, parent=nil,
23
- attribute=nil, value=nil,
24
- entropy
25
- )
26
- @root.build_subtree
17
+ # Receives
18
+ # - dataset, a list of hashes
19
+ # - the name of the class variable
20
+ def initialize dataset, class_var
21
+ @dataset = dataset
22
+ if class_var.nil?
23
+ raise "class_var cannot be nil"
27
24
  end
25
+ @class_var = class_var
26
+ entropy = dataset.entropy class_var
27
+ @root = DecisionTreeNode.new(
28
+ self, parent=nil,
29
+ attribute=nil, value=nil,
30
+ entropy
31
+ )
32
+ @root.build_subtree
33
+ end
28
34
 
29
- # Prints the decision depth-first with the respective entropy values.
30
- def to_s
31
- s = ""
32
- nodes = [[0, @root]]
33
- while nodes.any?
34
- l, n = nodes.last
35
- nodes = nodes.slice(0...-1)
36
- n.children.each do |c|
37
- nodes << [l + 1, c]
38
- end
39
- s = s + "#{' ' * (l * 2)}#{n.to_s}\n"
40
- end
41
- return s
35
+ # Prints the decision depth-first with the respective entropy values.
36
+ def to_s
37
+ s = ""
38
+ nodes = [[0, @root]]
39
+ while nodes.any?
40
+ l, n = nodes.last
41
+ nodes = nodes.slice(0...-1)
42
+ n.children.each do |c|
43
+ nodes << [l + 1, c]
44
+ end
45
+ s = s + "#{' ' * (l * 2)}#{n.to_s}\n"
42
46
  end
47
+ s
48
+ end
43
49
 
44
- # Receives attributes and their values (they must be all defined).
45
- # Returns the value of the predicted class value.
46
- def query values
47
- if values.keys != @dataset.attribute_names(@class_var)
48
- raise "Query does not fit all variables"
49
- end
50
- node = @root
51
- while node.variable != @class_var
52
- if node.next_attribute
53
- if node.children.count > 1
54
- val = values[node.next_attribute]
55
- node = node.children.select do |child|
56
- child.value == val
57
- end[0]
58
- else
59
- node = node.children[0]
60
- end
61
- end
50
+ # Receives attributes and their values (they must be all defined).
51
+ # Returns the value of the predicted class value.
52
+ def query values
53
+ if values.keys.sort != @dataset.attribute_names(@class_var).sort
54
+ raise "Query does not fit all variables"
55
+ end
56
+ node = @root
57
+ while node.variable != @class_var
58
+ if node.next_attribute
59
+ if node.children.count > 1
60
+ val = values[node.next_attribute]
61
+ node = node.children.select do |child|
62
+ child.value == val
63
+ end[0]
64
+ else
65
+ node = node.children[0]
62
66
  end
63
- node.value
67
+ end
64
68
  end
69
+ node.value
70
+ end
65
71
 
66
72
  end
67
73
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: baobab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johnny E. Lee Othon
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  version: '0'
42
42
  requirements: []
43
43
  rubyforge_project:
44
- rubygems_version: 2.4.6
44
+ rubygems_version: 2.2.2
45
45
  signing_key:
46
46
  specification_version: 4
47
47
  summary: ID3 decision trees for machine learning in Ruby