mirror of
https://github.com/dkam/decisiontree.git
synced 2025-12-28 15:14:52 +00:00
Style examples
This commit is contained in:
@@ -2,15 +2,25 @@ require 'rubygems'
|
|||||||
require 'decisiontree'
|
require 'decisiontree'
|
||||||
include DecisionTree
|
include DecisionTree
|
||||||
|
|
||||||
# ---Continuous-----------------------------------------------------------------------------------------
|
# ---Continuous---
|
||||||
|
|
||||||
# Read in the training data
|
# Read in the training data
|
||||||
training, attributes = [], nil
|
training = []
|
||||||
File.open('data/continuous-training.txt','r').each_line { |line|
|
File.open('data/continuous-training.txt', 'r').each_line do |line|
|
||||||
data = line.strip.chomp('.').split(',')
|
data = line.strip.chomp('.').split(',')
|
||||||
attributes ||= data
|
attributes ||= data
|
||||||
training.push(data.collect {|v| (v == 'healthy') || (v == 'colic') ? (v == 'healthy' ? 1 : 0) : v.to_f})
|
training_data = data.collect do |v|
|
||||||
}
|
case v
|
||||||
|
when 'healthy'
|
||||||
|
1
|
||||||
|
when 'colic'
|
||||||
|
0
|
||||||
|
else
|
||||||
|
v.to_f
|
||||||
|
end
|
||||||
|
end
|
||||||
|
training.push(training_data)
|
||||||
|
end
|
||||||
|
|
||||||
# Remove the attribute row from the training data
|
# Remove the attribute row from the training data
|
||||||
training.shift
|
training.shift
|
||||||
@@ -19,15 +29,25 @@ training.shift
|
|||||||
dec_tree = ID3Tree.new(attributes, training, 1, :continuous)
|
dec_tree = ID3Tree.new(attributes, training, 1, :continuous)
|
||||||
dec_tree.train
|
dec_tree.train
|
||||||
|
|
||||||
#---- Test the tree....
|
# ---Test the tree---
|
||||||
|
|
||||||
# Read in the test cases
|
# Read in the test cases
|
||||||
# Note: omit the attribute line (first line), we know the labels from the training data
|
# Note: omit the attribute line (first line), we know the labels from the training data
|
||||||
test = []
|
test = []
|
||||||
File.open('data/continuous-test.txt','r').each_line { |line|
|
File.open('data/continuous-test.txt', 'r').each_line do |line|
|
||||||
data = line.strip.chomp('.').split(',')
|
data = line.strip.chomp('.').split(',')
|
||||||
test.push(data.collect {|v| (v == 'healthy') || (v == 'colic') ? (v == 'healthy' ? 1 : 0) : v.to_f})
|
test_data = data.collect do |v|
|
||||||
}
|
if v == 'healthy' || v == 'colic'
|
||||||
|
v == 'healthy' ? 1 : 0
|
||||||
|
else
|
||||||
|
v.to_f
|
||||||
|
end
|
||||||
|
end
|
||||||
|
test.push(test_data)
|
||||||
|
end
|
||||||
|
|
||||||
# Let the tree predict the output and compare it to the true specified value
|
# Let the tree predict the output and compare it to the true specified value
|
||||||
test.each { |t| predict = dec_tree.predict(t); puts "Predict: #{predict} ... True: #{t.last}"}
|
test.each do |t|
|
||||||
|
predict = dec_tree.predict(t)
|
||||||
|
puts "Predict: #{predict} ... True: #{t.last}"
|
||||||
|
end
|
||||||
|
|||||||
@@ -1,15 +1,25 @@
|
|||||||
require 'rubygems'
|
require 'rubygems'
|
||||||
require 'decisiontree'
|
require 'decisiontree'
|
||||||
|
|
||||||
# ---Discrete-----------------------------------------------------------------------------------------
|
# ---Discrete---
|
||||||
|
|
||||||
# Read in the training data
|
# Read in the training data
|
||||||
training, attributes = [], nil
|
training = []
|
||||||
File.open('data/discrete-training.txt','r').each_line { |line|
|
File.open('data/discrete-training.txt', 'r').each_line do |line|
|
||||||
data = line.strip.split(',')
|
data = line.strip.split(',')
|
||||||
attributes ||= data
|
attributes ||= data
|
||||||
training.push(data.collect {|v| (v == 'will buy') || (v == "won't buy") ? (v == 'will buy' ? 1 : 0) : v})
|
training_data = data.collect do |v|
|
||||||
}
|
case v
|
||||||
|
when 'will buy'
|
||||||
|
1
|
||||||
|
when "won't buy"
|
||||||
|
0
|
||||||
|
else
|
||||||
|
v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
training.push(training_data)
|
||||||
|
end
|
||||||
|
|
||||||
# Remove the attribute row from the training data
|
# Remove the attribute row from the training data
|
||||||
training.shift
|
training.shift
|
||||||
@@ -18,17 +28,31 @@ training.shift
|
|||||||
dec_tree = DecisionTree::ID3Tree.new(attributes, training, 1, :discrete)
|
dec_tree = DecisionTree::ID3Tree.new(attributes, training, 1, :discrete)
|
||||||
dec_tree.train
|
dec_tree.train
|
||||||
|
|
||||||
#---- Test the tree....
|
# ---Test the tree---
|
||||||
|
|
||||||
# Read in the test cases
|
# Read in the test cases
|
||||||
# Note: omit the attribute line (first line), we know the labels from the training data
|
# Note: omit the attribute line (first line), we know the labels from the training data
|
||||||
test = []
|
test = []
|
||||||
File.open('data/discrete-test.txt','r').each_line { |line| data = line.strip.split(',')
|
File.open('data/discrete-test.txt', 'r').each_line do |line|
|
||||||
test.push(data.collect {|v| (v == 'will buy') || (v == "won't buy") ? (v == 'will buy' ? 1 : 0) : v})
|
data = line.strip.split(',')
|
||||||
}
|
test_data = data.collect do |v|
|
||||||
|
case v
|
||||||
|
when 'will buy'
|
||||||
|
1
|
||||||
|
when "won't buy"
|
||||||
|
0
|
||||||
|
else
|
||||||
|
v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
training.push(test_data)
|
||||||
|
end
|
||||||
|
|
||||||
# Let the tree predict the output and compare it to the true specified value
|
# Let the tree predict the output and compare it to the true specified value
|
||||||
test.each { |t| predict = dec_tree.predict(t); puts "Predict: #{predict} ... True: #{t.last}"; }
|
test.each do |t|
|
||||||
|
predict = dec_tree.predict(t)
|
||||||
|
puts "Predict: #{predict} ... True: #{t.last}"
|
||||||
|
end
|
||||||
|
|
||||||
# Graph the tree, save to 'discrete.png'
|
# Graph the tree, save to 'discrete.png'
|
||||||
dec_tree.graph("discrete")
|
dec_tree.graph('discrete')
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ training = [
|
|||||||
[38, 'sick'],
|
[38, 'sick'],
|
||||||
[36.7, 'healthy'],
|
[36.7, 'healthy'],
|
||||||
[40, 'sick'],
|
[40, 'sick'],
|
||||||
[50, 'really sick'],
|
[50, 'really sick']
|
||||||
]
|
]
|
||||||
|
|
||||||
# Instantiate the tree, and train it based on the data (set default to '1')
|
# Instantiate the tree, and train it based on the data (set default to '1')
|
||||||
@@ -20,9 +20,7 @@ dec_tree.train
|
|||||||
test = [37, 'sick']
|
test = [37, 'sick']
|
||||||
|
|
||||||
decision = dec_tree.predict(test)
|
decision = dec_tree.predict(test)
|
||||||
puts "Predicted: #{decision} ... True decision: #{test.last}";
|
puts "Predicted: #{decision} ... True decision: #{test.last}"
|
||||||
|
|
||||||
# Graph the tree, save to 'tree.png'
|
# Graph the tree, save to 'tree.png'
|
||||||
dec_tree.graph("tree")
|
dec_tree.graph('tree')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user