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:

Raises:

  • (ArgumentError)


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
# 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
  raise ArgumentError, "Unknown model class #{model.class}." unless klass

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

  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
    $logger.debug "Dataset #{training_dataset.name}, Fold #{fold_nr}:  #{Time.now-t} seconds"
  end
  cv.save
  cv.statistics
  cv.update_attributes(finished_at: Time.now)
  cv
end

Instance Method Details

#predictionsArray<Hash>

Get predictions for all compounds

Returns:



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

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

#timeFixnum

Get execution time

Returns:

  • (Fixnum)


44
45
46
# File 'lib/crossvalidation.rb', line 44

def time
  finished_at - created_at
end

#validationsArray<OpenTox::Validation>

Get individual validations



50
51
52
# File 'lib/crossvalidation.rb', line 50

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