Class: OpenTox::Validation::CrossValidation

Inherits:
Validation show all
Defined in:
lib/crossvalidation.rb

Overview

Crossvalidation

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Validation

#model

Class Method Details

.create(model, n = 10) ⇒ OpenTox::Validation::CrossValidation

Create a crossvalidation

Parameters:

Returns:



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/crossvalidation.rb', line 14

def self.create model, n=10
  $logger.debug model.algorithms
  klass = ClassificationCrossValidation if model.is_a? Model::LazarClassification
  klass = RegressionCrossValidation if model.is_a? Model::LazarRegression
  bad_request_error "Unknown model class #{model.class}." unless klass

  cv = klass.new(
    name: model.name,
    model_id: model.id,
    folds: n
  )
  cv.save # set created_at

  nr_instances = 0
  nr_unpredicted = 0
  training_dataset = model.training_dataset
  training_dataset.folds(n).each_with_index do |fold,fold_nr|
    #fork do # parallel execution of validations can lead to Rserve and memory problems
      $logger.debug "Dataset #{training_dataset.name}: Fold #{fold_nr} started"
      t = Time.now
      validation = TrainTest.create(model, fold[0], fold[1])
      cv.validation_ids << validation.id
      cv.nr_instances += validation.nr_instances
      cv.nr_unpredicted += validation.nr_unpredicted
      #cv.predictions.merge! validation.predictions
      $logger.debug "Dataset #{training_dataset.name}, Fold #{fold_nr}:  #{Time.now-t} seconds"
    #end
  end
  #Process.waitall
  cv.save
  $logger.debug "Nr unpredicted: #{nr_unpredicted}"
  cv.statistics
  cv.update_attributes(finished_at: Time.now)
  cv
end

Instance Method Details

#predictionsArray<Hash>

Get predictions for all compounds

Returns:



64
65
66
67
68
# File 'lib/crossvalidation.rb', line 64

def predictions
  predictions = {}
  validations.each{|v| predictions.merge!(v.predictions)}
  predictions
end

#timeFixnum

Get execution time

Returns:

  • (Fixnum)


52
53
54
# File 'lib/crossvalidation.rb', line 52

def time
  finished_at - created_at
end

#validationsArray<OpenTox::Validation>

Get individual validations



58
59
60
# File 'lib/crossvalidation.rb', line 58

def validations
  validation_ids.collect{|vid| TrainTest.find vid}
end