Tidy code style

This commit is contained in:
Sam Oliver
2021-09-17 12:56:27 +02:00
parent e30c18853a
commit aad3b61d10
12 changed files with 205 additions and 204 deletions

View File

@@ -1,55 +1,55 @@
require 'rubygems'
require 'decisiontree'
include DecisionTree
# ---Continuous---
# Read in the training data
training = []
attributes = nil
File.open('data/continuous-training.txt', 'r').each_line do |line|
data = line.strip.chomp('.').split(',')
attributes ||= data
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
training.shift
# Instantiate the tree, and train it based on the data (set default to '1')
dec_tree = ID3Tree.new(attributes, training, 1, :continuous)
dec_tree.train
# ---Test the tree---
# Read in the test cases
# Note: omit the attribute line (first line), we know the labels from the training data
test = []
File.open('data/continuous-test.txt', 'r').each_line do |line|
data = line.strip.chomp('.').split(',')
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
test.each do |t|
predict = dec_tree.predict(t)
puts "Predict: #{predict} ... True: #{t.last}"
end
require "rubygems"
require "decisiontree"
include DecisionTree
# ---Continuous---
# Read in the training data
training = []
attributes = nil
File.open("data/continuous-training.txt", "r").each_line do |line|
data = line.strip.chomp(".").split(",")
attributes ||= data
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
training.shift
# Instantiate the tree, and train it based on the data (set default to '1')
dec_tree = ID3Tree.new(attributes, training, 1, :continuous)
dec_tree.train
# ---Test the tree---
# Read in the test cases
# Note: omit the attribute line (first line), we know the labels from the training data
test = []
File.open("data/continuous-test.txt", "r").each_line do |line|
data = line.strip.chomp(".").split(",")
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
test.each do |t|
predict = dec_tree.predict(t)
puts "Predict: #{predict} ... True: #{t.last}"
end

View File

@@ -1,60 +1,60 @@
require 'rubygems'
require 'decisiontree'
# ---Discrete---
# Read in the training data
training = []
attributes = nil
File.open('data/discrete-training.txt', 'r').each_line do |line|
data = line.strip.split(',')
attributes ||= data
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
training.shift
# Instantiate the tree, and train it based on the data (set default to '1')
dec_tree = DecisionTree::ID3Tree.new(attributes, training, 1, :discrete)
dec_tree.train
# ---Test the tree---
# Read in the test cases
# Note: omit the attribute line (first line), we know the labels from the training data
test = []
File.open('data/discrete-test.txt', 'r').each_line do |line|
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
test.push(test_data)
end
# Let the tree predict the output and compare it to the true specified value
test.each do |t|
predict = dec_tree.predict(t)
puts "Predict: #{predict} ... True: #{t.last}"
end
# Graph the tree, save to 'discrete.png'
dec_tree.graph('discrete')
require "rubygems"
require "decisiontree"
# ---Discrete---
# Read in the training data
training = []
attributes = nil
File.open("data/discrete-training.txt", "r").each_line do |line|
data = line.strip.split(",")
attributes ||= data
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
training.shift
# Instantiate the tree, and train it based on the data (set default to '1')
dec_tree = DecisionTree::ID3Tree.new(attributes, training, 1, :discrete)
dec_tree.train
# ---Test the tree---
# Read in the test cases
# Note: omit the attribute line (first line), we know the labels from the training data
test = []
File.open("data/discrete-test.txt", "r").each_line do |line|
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
test.push(test_data)
end
# Let the tree predict the output and compare it to the true specified value
test.each do |t|
predict = dec_tree.predict(t)
puts "Predict: #{predict} ... True: #{t.last}"
end
# Graph the tree, save to 'discrete.png'
dec_tree.graph("discrete")

View File

@@ -1,26 +1,26 @@
#!/usr/bin/ruby
require 'rubygems'
require 'decisiontree'
require "rubygems"
require "decisiontree"
attributes = ['Temperature']
attributes = ["Temperature"]
training = [
[36.6, 'healthy'],
[37, 'sick'],
[38, 'sick'],
[36.7, 'healthy'],
[40, 'sick'],
[50, 'really sick']
[36.6, "healthy"],
[37, "sick"],
[38, "sick"],
[36.7, "healthy"],
[40, "sick"],
[50, "really sick"]
]
# Instantiate the tree, and train it based on the data (set default to '1')
dec_tree = DecisionTree::ID3Tree.new(attributes, training, 'sick', :continuous)
dec_tree = DecisionTree::ID3Tree.new(attributes, training, "sick", :continuous)
dec_tree.train
test = [37, 'sick']
test = [37, "sick"]
decision = dec_tree.predict(test)
puts "Predicted: #{decision} ... True decision: #{test.last}"
# Graph the tree, save to 'tree.png'
dec_tree.graph('tree')
dec_tree.graph("tree")