Class: OpenTox::Validation::LeaveOneOut

Inherits:
Validation show all
Defined in:
lib/leave-one-out-validation.rb

Overview

Leave one out validation

Class Method Summary collapse

Methods inherited from Validation

#model

Class Method Details

.create(model) ⇒ OpenTox::Validation::LeaveOneOut

Create a leave one out validation

Parameters:

Returns:

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/leave-one-out-validation.rb', line 11

def self.create model
  raise ArgumentError, "Cannot create leave one out validation for models with supervised feature selection. Please use crossvalidation instead." if model.algorithms[:feature_selection]
  $logger.debug "#{model.name}: LOO validation started"
  t = Time.now
  model.training_dataset.features.collect{|f| f.class}.include?(NominalBioActivity) ? klass = ClassificationLeaveOneOut : klass = RegressionLeaveOneOut
  loo = klass.new :model_id => model.id
  predictions = model.predict model.training_dataset.substances
  predictions.each{|cid,p| p.delete(:neighbors)}
  predictions.each do |cid,prediction|
    prediction[:measurements] = model.training_dataset.values(cid, prediction[:prediction_feature_id]) if prediction[:value]
    predictions.delete(cid) unless prediction[:value] and prediction[:measurements]
  end
  predictions.select!{|cid,p| p[:value] and p[:measurements]}
  loo.predictions = predictions
  loo.statistics
  $logger.debug "#{model.name}, LOO validation:  #{Time.now-t} seconds"
  loo
end