diff --git a/lib/core_extensions/array.rb b/lib/core_extensions/array.rb deleted file mode 100644 index 81f8aed..0000000 --- a/lib/core_extensions/array.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Array - def entropy - each_with_object(Hash.new(0)) do |i, result| - result[i] += 1 - end.values.inject(0, :+) do |count| - percentage = count.to_f / length - - -percentage * Math.log2(percentage) - end - end -end - -module ArrayClassification - refine Array do - def classification - collect(&:last) - end - end -end diff --git a/lib/core_extensions/object.rb b/lib/core_extensions/object.rb deleted file mode 100644 index 75afe7c..0000000 --- a/lib/core_extensions/object.rb +++ /dev/null @@ -1,9 +0,0 @@ -class Object - def save_to_file(filename) - File.open(filename, "w+") { |f| f << Marshal.dump(self) } - end - - def self.load_from_file(filename) - Marshal.load(File.read(filename)) - end -end diff --git a/lib/decisiontree.rb b/lib/decisiontree.rb index efd7a08..c862856 100644 --- a/lib/decisiontree.rb +++ b/lib/decisiontree.rb @@ -1,3 +1,4 @@ -require "core_extensions/object" -require "core_extensions/array" -require File.dirname(__FILE__) + "/decisiontree/id3_tree.rb" +require_relative "refinements/object_persistence" +require_relative "refinements/array_entropy" +require_relative "refinements/array_classification" +require_relative "decisiontree/id3_tree" diff --git a/lib/decisiontree/id3_tree.rb b/lib/decisiontree/id3_tree.rb index 8221962..8ce6ad6 100755 --- a/lib/decisiontree/id3_tree.rb +++ b/lib/decisiontree/id3_tree.rb @@ -7,6 +7,8 @@ module DecisionTree Node = Struct.new(:attribute, :threshold, :gain) using ArrayClassification + using ArrayEntropy + using ObjectPersistence class ID3Tree def initialize(attributes, data, default, type) diff --git a/lib/refinements/array_classification.rb b/lib/refinements/array_classification.rb new file mode 100644 index 0000000..669159d --- /dev/null +++ b/lib/refinements/array_classification.rb @@ -0,0 +1,7 @@ +module ArrayClassification + refine Array do + def classification + collect(&:last) + end + end +end diff --git a/lib/refinements/array_entropy.rb b/lib/refinements/array_entropy.rb new file mode 100644 index 0000000..3ed03b0 --- /dev/null +++ b/lib/refinements/array_entropy.rb @@ -0,0 +1,13 @@ +module ArrayEntropy + refine Array do + def entropy + each_with_object(Hash.new(0)) do |i, result| + result[i] += 1 + end.values.inject(0, :+) do |count| + percentage = count.to_f / length + + -percentage * Math.log2(percentage) + end + end + end +end diff --git a/lib/refinements/object_persistence.rb b/lib/refinements/object_persistence.rb new file mode 100644 index 0000000..52deca3 --- /dev/null +++ b/lib/refinements/object_persistence.rb @@ -0,0 +1,11 @@ +module ObjectPersistence + refine Object do + def save_to_file(filename) + File.open(filename, "w+") { |f| f << Marshal.dump(self) } + end + + def self.load_from_file(filename) + Marshal.load(File.read(filename)) + end + end +end