diff options
author | Andreas Maunz <andreas@maunz.de> | 2011-07-11 08:47:54 +0200 |
---|---|---|
committer | Andreas Maunz <andreas@maunz.de> | 2011-07-11 08:47:54 +0200 |
commit | 772e146a9d61a6d1df74a732dde8aab0188f523f (patch) | |
tree | 60b597979288abf390ae484a4022ba77d6ee7deb | |
parent | c5be6291668d9e0187d6fd7a62a8c1efdcc0b7a4 (diff) |
Fixed representation of transformlog
-rw-r--r-- | lib/algorithm.rb | 92 |
1 files changed, 49 insertions, 43 deletions
diff --git a/lib/algorithm.rb b/lib/algorithm.rb index 35a3437..dddbad7 100644 --- a/lib/algorithm.rb +++ b/lib/algorithm.rb @@ -245,7 +245,7 @@ module OpenTox rescue Exception => e LOGGER.debug "#{e.class}: #{e.message}" - puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" end @@ -304,14 +304,15 @@ module OpenTox acts = neighbors.collect{ |n| n[:activity].to_f } sims = neighbors.collect{ |n| Algorithm.gauss(n[:similarity]) } prediction = (props.nil? ? local_svm(neighbors, acts, sims, "nu-svr", params) : local_svm_prop(props, acts, "nu-svr", params)) - prediction = transform.back_transform([prediction])[0] + transformer = eval "#{transform[:class]}.new ([#{prediction}], #{transform[:offset]})" + prediction = transformer.values[0] LOGGER.debug "Prediction is: '" + prediction.to_s + "'." conf = sims.inject{|sum,x| sum + x } confidence = conf/neighbors.size {:prediction => prediction, :confidence => confidence} rescue Exception => e LOGGER.debug "#{e.class}: #{e.message}" - puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" end end @@ -335,7 +336,7 @@ module OpenTox {:prediction => prediction, :confidence => confidence} rescue Exception => e LOGGER.debug "#{e.class}: #{e.message}" - puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" end end @@ -409,7 +410,7 @@ module OpenTox @r.quit # free R rescue Exception => e LOGGER.debug "#{e.class}: #{e.message}" - puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" end end @@ -472,7 +473,7 @@ module OpenTox @r.quit # free R rescue Exception => e LOGGER.debug "#{e.class}: #{e.message}" - puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" end end prediction @@ -503,50 +504,55 @@ module OpenTox include Algorithm class Inverter # to improve normality conditions on a vector - attr_accessor :values - - def initialize(values) - @values=values - raise "Cannot transform, values empty." if @values.size==0 - @values = @values.collect { |v| -1.0 * v } - @offset = 1.0 - @values.minmax[0] - @offset = -1.0 * @offset if @offset>0.0 - @values = @values.collect { |v| v - @offset } # slide >1 - @values = @values.collect { |v| 1 / v } # invert - end + attr_accessor :offset, :values - def back_transform(values) - values = values.collect { |v| 1 / v } - values = values.collect { |v| v + @offset } - values = values.collect { |v| -1.0 * v } + def initialize *args + case args.size + when 1 + begin + @values=args[0] + raise "Cannot transform, values empty." if @values.size==0 + @values = @values.collect { |v| -1.0 * v } + @offset = 1.0 - @values.minmax[0] + @offset = -1.0 * @offset if @offset>0.0 + @values = @values.collect { |v| v - @offset } # slide >1 + @values = @values.collect { |v| 1 / v } # invert to [0,1] + rescue Exception => e + LOGGER.debug "#{e.class}: #{e.message}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + end + when 2 + @offset = args[1].to_f + @values = args[0].collect { |v| 1 / v } + @values = @values.collect { |v| v + @offset } + @values = @values.collect { |v| -1.0 * v } + end end - end class Log10 # to improve normality conditions on a vector - attr_accessor :values - - def initialize(values) - @values=values - raise "Cannot transform, values empty." if @values.size==0 - has_negatives = false - @values.each { |v| - if v<0.0 - has_negatives = true - end - } - has_negatives ? @anchor_point = 1.0 : @anchor_point = 0.0 - @offset = @anchor_point - @values.minmax[0] - @offset = -1.0 * @offset if @offset>0.0 - @values = @values.collect { |v| v - @offset } # slide > anchor - @values = @values.collect { |v| Math::log10 v } # log10 - end + attr_accessor :offset, :values - def back_transform(values) - values = values.collect { |v| 10**v } - values = values.collect { |v| v + @offset } + def initialize *args + case args.size + when 1 + begin + @values=args[0] + raise "Cannot transform, values empty." if @values.size==0 + @offset = @values.minmax[0] + @offset = -1.0 * @offset if @offset>0.0 + @values = @values.collect { |v| v - @offset } # slide > anchor + @values = @values.collect { |v| Math::log10 v } # log10 (can fail) + rescue Exception => e + LOGGER.debug "#{e.class}: #{e.message}" + LOGGER.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}" + end + when 2 + @offset = args[1].to_f + @values = args[0].collect { |v| 10**v } + @values = @values.collect { |v| v + @offset } + end end - end end |