Class: Desiru::Optimizers::MIPROv2::GaussianProcess
- Inherits:
-
Object
- Object
- Desiru::Optimizers::MIPROv2::GaussianProcess
- Defined in:
- lib/desiru/optimizers/mipro_v2.rb
Overview
Simplified Gaussian Process implementation without matrix library
Instance Method Summary collapse
- #add_observation(features, value) ⇒ Object
-
#initialize(kernel = :rbf, length_scale = 1.0, noise = 0.1) ⇒ GaussianProcess
constructor
A new instance of GaussianProcess.
- #predict(features) ⇒ Object
- #update ⇒ Object
Constructor Details
#initialize(kernel = :rbf, length_scale = 1.0, noise = 0.1) ⇒ GaussianProcess
814 815 816 817 818 819 820 |
# File 'lib/desiru/optimizers/mipro_v2.rb', line 814 def initialize(kernel = :rbf, length_scale = 1.0, noise = 0.1) @kernel = kernel @length_scale = length_scale @noise = noise @observations = [] @trained = false end |
Instance Method Details
#add_observation(features, value) ⇒ Object
822 823 824 825 |
# File 'lib/desiru/optimizers/mipro_v2.rb', line 822 def add_observation(features, value) @observations << { features: features, value: value } @trained = false end |
#predict(features) ⇒ Object
835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 |
# File 'lib/desiru/optimizers/mipro_v2.rb', line 835 def predict(features) return { mean: 0.0, std: 1.0 } unless @trained && !@observations.empty? # Simplified prediction using weighted average based on kernel similarity weights = @observations.map do |obs| kernel_function(features, obs[:features]) end total_weight = weights.sum return { mean: 0.0, std: 1.0 } if total_weight.zero? # Normalize weights weights = weights.map { |w| w / total_weight } # Compute weighted mean mean = @observations.zip(weights).map { |obs, w| obs[:value] * w }.sum # Compute weighted variance for uncertainty variance = @observations.zip(weights).map do |obs, w| w * ((obs[:value] - mean)**2) end.sum std = Math.sqrt([variance + @noise, 0].max) { mean: mean, std: std } rescue StandardError => e Desiru.logger&.warn("Gaussian Process prediction failed: #{e.}") { mean: 0.0, std: 1.0 } end |