/// <summary> /// Transfer a number of instances from the unlabelled to the labelled set for the given resident. /// </summary> /// <param name="resident">The index of the resident.</param> /// <param name="num">The number to transfer.</param> public void Transfer(int resident, int num) { if (num == 0) { return; } var rng = new Random(); for (int tt = 0; tt < 2; ++tt) { for (int nn = 0; nn < num; ++nn) { var uinds = Unlabelled.OrderBy(x => rng.Next()); foreach (var ind in uinds) { if (dataSet.Labels[0][ind] == (tt == 0 ? false : true)) { Unlabelled.Remove(ind); Labelled.Add(ind); break; } } } } }
public void VOITest(int numActivelySelected, Marginals priors) { var onlineEstimates = new List <Bernoulli>(); var onlineTargets = new List <bool>(); Metrics metrics = null; for (int jj = 0; jj < numActivelySelected; ++jj) { CalculateProbabilities(priors); //Console.WriteLine( "\nJL: {0}", JL() ); //Console.WriteLine( "JU: {0}", JU() ); int argMax; double maxVal; GetArgMaxVOI(hypothesisActivityPosteriors, priors, out argMax, out maxVal); Unlabelled.Remove(argMax); Labelled.Add(argMax); UpdateModel(argMax); onlineEstimates.Add(GetProbabilityOf(argMax, priors)); onlineTargets.Add(DataSet.Labels[0][argMax]); metrics = new Metrics { Name = "active", Estimates = onlineEstimates.Select(ia => new Bernoulli(ia)).ToArray(), TrueLabels = onlineTargets.ToArray() }; // metrics.PrintSummary(); } if (Unlabelled.Any()) { CalculateProbabilities(priors); foreach (var index in Unlabelled) { onlineEstimates.Add(hypothesisActivityPosteriors[index]); onlineTargets.Add(DataSet.Labels[0][index]); } metrics = new Metrics { Name = "active", Estimates = onlineEstimates.Select(ia => new Bernoulli(ia)).ToArray(), TrueLabels = onlineTargets.ToArray() }; } if (metrics != null) { metrics.PrintSummary(); } }
/// <summary> /// Updates the model. /// </summary> /// <param name="index">Index.</param> public void UpdateModel(int index) { if (Labelled.Contains(index)) { throw new Exception("The selected index is already in the labelled set."); } Unlabelled.Remove(index); Labelled.Add(index); }