summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavor <vorgrimmlerdavid@gmx.de>2011-12-28 13:44:43 +0100
committerdavor <vorgrimmlerdavid@gmx.de>2011-12-28 13:44:43 +0100
commit98b09625aefae0571d38ec5b4c2e48e81bf0cf82 (patch)
tree79035e37a849dfa3a2085310622331482b44b471
parent9c71bd05231c62a919d0fd9dae150dbbd6ce4cdd (diff)
Precalculation of data
acts sims (includes gram matrix) props
-rw-r--r--lib/algorithm.rb62
-rw-r--r--lib/model.rb30
-rw-r--r--lib/utils.rb4
3 files changed, 54 insertions, 42 deletions
diff --git a/lib/algorithm.rb b/lib/algorithm.rb
index cb1c04b..0f26ab4 100644
--- a/lib/algorithm.rb
+++ b/lib/algorithm.rb
@@ -728,17 +728,11 @@ module OpenTox
prediction = nil
LOGGER.debug "Local SVM Classification."
- if params[:neighbors].size>0
-
- acts = params[:neighbors].collect { |n| act = n[:activity] }
- sims = params[:neighbors].collect{ |n| n[:similarity] } # similarity values btwn q and nbors
-
- props = params[:prop_kernel] ? get_props_fingerprints(params) : nil
- prediction = props.nil? ? local_svm(acts, sims, "C-bsvc", params) : local_svm_prop(props, acts, "C-bsvc")
-
+ if params[:props][0].size>0
+ prediction = params[:prop_kernel] ? local_svm_prop(params[:props], params[:acts], "C-bsvc") : local_svm(params[:props], params[:acts], "C-bsvc", params[:sims], params)
LOGGER.debug "Prediction is: '" + prediction.to_s + "'."
params[:conf_stdev] = false if params[:conf_stdev].nil?
- confidence = get_confidence({:sims => sims, :acts => acts, :neighbors => params[:neighbors], :conf_stdev => params[:conf_stdev]})
+ confidence = get_confidence({:sims => params[:sims][1], :acts => params[:acts], :conf_stdev => params[:conf_stdev]})
end
{:prediction => prediction, :confidence => confidence}
@@ -751,36 +745,36 @@ module OpenTox
# @param [Array] acts, activities for neighbors.
# @param [Array] sims, similarities for neighbors.
# @param [String] type, one of "nu-svr" (regression) or "C-bsvc" (classification).
- # @param [Hash] params Keys `:neighbors,:compound,:features,:p_values,:similarity_algorithm,:prop_kernel,:value_map` are required
+ # @param [Hash] params Keys `:p_values,:similarity_algorithm` are required
# @return [Numeric] A prediction value.
- def self.local_svm(acts, sims, type, params)
+ def self.local_svm(props, acts, type, sims, params)
LOGGER.debug "Local SVM (Weighted Tanimoto Kernel)."
+
+ n_prop = props[0] # is a matrix, i.e. two nested Arrays.
+ q_prop = props[1] # is an Array.
gram_matrix = [] # square matrix of similarities between neighbors; implements weighted tanimoto kernel
+
prediction = nil
if Algorithm::zero_variance? acts
prediction = acts[0]
else
- # gram matrix
-
- #LOGGER.debug "dv -------- #{params[:fingerprints].to_yaml}"
- params[:neighbors].each_index do |i|
- gram_matrix[i] = [] unless gram_matrix[i]
- # upper triangle
- params[:neighbors].each_index do |j|
- #LOGGER.debug "dv -------- #{params[:neighbors][i].class}"
- #LOGGER.debug "dv -------- #{params[:neighbors][i].to_yaml}"
- #LOGGER.debug "dv -------- #{params[:neighbors][i][:compound].to_yaml}"
- #sim = Similarity.tanimoto(params[:fingerprints][params[:neighbors][i][:compound]], params[:fingerprints][params[:neighbors][j][:compound]], params[:p_values])
- sim = eval("#{params[:similarity_algorithm]}(
- params[:fingerprints][params[:neighbors][i][:compound]],
- params[:fingerprints][params[:neighbors][j][:compound]],
- params[:p_values])")
- gram_matrix[i][j] = sim
- gram_matrix[j] = [] unless gram_matrix[j]
- gram_matrix[j][i] = gram_matrix[i][j] # lower triangle
- end
- gram_matrix[i][i] = 1.0
- end
+ ## gram matrix
+ gram_matrix = sims[0]
+ #n_prop.each_index do |i|
+ # gram_matrix[i] = [] unless gram_matrix[i]
+ # n_prop.each_index do |j|
+ # if (j>i)
+ # sim = eval("#{params[:similarity_algorithm]}(
+ # n_prop[i],
+ # n_prop[j],
+ # params[:p_values])")
+ # gram_matrix[i][j] = sim
+ # gram_matrix[j] = [] unless gram_matrix[j]
+ # gram_matrix[j][i] = gram_matrix[i][j]
+ # end
+ # end
+ # gram_matrix[i][i] = 1.0
+ #end
#LOGGER.debug gram_matrix.to_yaml
@@ -789,9 +783,9 @@ module OpenTox
LOGGER.debug "Setting R data ..."
# set data
@r.gram_matrix = gram_matrix.flatten
- @r.n = params[:neighbors].size
+ @r.n = n_prop.size
@r.y = acts
- @r.sims = sims
+ @r.sims = sims[1]
begin
LOGGER.debug "Preparing R data ..."
diff --git a/lib/model.rb b/lib/model.rb
index 664ade1..191f732 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -266,18 +266,36 @@ module OpenTox
neighbors
prediction_fingerprints = @fingerprints.merge({@compound.uri => @compound_fingerprints})
- prediction = eval("#{@prediction_algorithm} ( { :neighbors => @neighbors,
- :compound => @compound,
- :features => @features,
+ props = OpenTox::Algorithm::Neighbors.get_props_fingerprints({:neighbors => @neighbors, :features => @features, :fingerprints => prediction_fingerprints, :compound => @compound})
+ acts = @neighbors.collect { |n| n[:activity] }
+
+ gram_matrix = []
+ @neighbors.each_index do |i|
+ gram_matrix[i] = [] unless gram_matrix[i]
+ @neighbors.each_index do |j|
+ if (j>i)
+ sim = eval("#{@similarity_algorithm}(
+ @fingerprints[@neighbors[i][:compound]],
+ @fingerprints[@neighbors[j][:compound]],
+ @p_values)")
+ gram_matrix[i][j] = sim
+ gram_matrix[j] = [] unless gram_matrix[j]
+ gram_matrix[j][i] = gram_matrix[i][j]
+ end
+ end
+ gram_matrix[i][i] = 1.0
+ end
+ sims = [ gram_matrix, @neighbors.collect { |n| n[:similarity] } ]
+
+ prediction = eval("#{@prediction_algorithm} ( { :props => props,
+ :acts => acts,
+ :sims => sims,
:p_values => @p_values,
- :fingerprints => prediction_fingerprints,
:similarity_algorithm => @similarity_algorithm,
:prop_kernel => @prop_kernel,
- :value_map => @value_map,
:conf_stdev => @conf_stdev
} ) ")
-
value_feature_uri = File.join( @uri, "predicted", "value")
confidence_feature_uri = File.join( @uri, "predicted", "confidence")
diff --git a/lib/utils.rb b/lib/utils.rb
index 94dfb6f..bd89863 100644
--- a/lib/utils.rb
+++ b/lib/utils.rb
@@ -268,7 +268,7 @@ module OpenTox
# Get confidence for regression, with standard deviation of neighbor activity if conf_stdev is set.
- # @param[Hash] Required keys: :sims, :acts, :neighbors, :conf_stdev
+ # @param[Hash] Required keys: :sims, :acts, :conf_stdev
# @return[Float] Confidence
def self.get_confidence(params)
if params[:conf_stdev]
@@ -284,7 +284,7 @@ module OpenTox
end
else
conf = params[:sims].inject{|sum,x| sum + x }
- confidence = conf/params[:neighbors].size
+ confidence = conf/params[:sims].size
end
LOGGER.debug "Confidence is: '" + confidence.to_s + "'."
return confidence