MCPcopy Create free account
hub / github.com/Open-Quant/openquant / fit

Method fit

crates/openquant/src/ef3m.rs:209–249  ·  view source on GitHub ↗
(&mut self, mut mu_2: f64)

Source from the content-addressed store, hash-verified

207 }
208
209 pub fn fit(&mut self, mut mu_2: f64) -> Result<(), String> {
210 let mut rng = rand::thread_rng();
211 let mut p_1 = rng.gen_range(0.0..1.0);
212 let mut num_iter = 0usize;
213
214 loop {
215 num_iter += 1;
216 let parameters_new = match self.variant {
217 1 => self.iter_4(mu_2, p_1),
218 2 => self.iter_5(mu_2, p_1),
219 _ => return Err("Value of argument 'variant' must be either 1 or 2.".to_string()),
220 };
221 if parameters_new.is_empty() {
222 return Ok(());
223 }
224
225 let parameters = parameters_new.clone();
226 let _ = self.get_moments(&parameters, false);
227 let error: f64 = self
228 .moments
229 .iter()
230 .zip(self.new_moments.iter())
231 .map(|(a, b)| (a - b).powi(2))
232 .sum();
233 if error < self.error {
234 self.parameters = parameters.clone();
235 self.error = error;
236 }
237
238 if (p_1 - parameters[4]).abs() < self.epsilon {
239 self.parameters = parameters;
240 break;
241 }
242 if num_iter > self.max_iter {
243 return Ok(());
244 }
245 p_1 = parameters[4];
246 mu_2 = parameters[1];
247 }
248 Ok(())
249 }
250
251 pub fn single_fit_loop(&mut self, epsilon_override: Option<f64>) -> Vec<FitResultRow> {
252 if let Some(eps) = epsilon_override {

Callers 6

evaluate_paramsFunction · 0.45
mean_decrease_accuracyFunction · 0.45
single_fit_loopMethod · 0.45
ml_cross_val_scoreFunction · 0.45
sb_fit_predict_regressorFunction · 0.45

Calls 4

iter_4Method · 0.80
iter_5Method · 0.80
is_emptyMethod · 0.80
get_momentsMethod · 0.80

Tested by

no test coverage detected