/// <inheritdoc/> public void Update(double activation, double normalizedActivation, bool spike) { PredictorActivationLinWAvgSettings cfg = (PredictorActivationLinWAvgSettings)Cfg; if (cfg.Window == PredictorActivationLinWAvgSettings.NAWindowNum) { ++_continuousWeight; _continuousAvg.AddSample(activation, _continuousWeight); } return; }
/// <summary> /// Computes the composite output of the cluster. /// </summary> private double[] ComputeCompositeOutput(List <Tuple <int, double[]> > memberNetOutputs) { if (Output == TNRNet.OutputType.Real) { //Real output double[] output = new double[NumOfOutputs]; for (int outIdx = 0; outIdx < NumOfOutputs; outIdx++) { //Compute weighted average of members single output WeightedAvg wAvg = new WeightedAvg(); for (int i = 0; i < memberNetOutputs.Count; i++) { //Add sub-result to weighted average wAvg.AddSample(memberNetOutputs[i].Item2[outIdx], _memberNetWeights[i]); } //Store averaged output output[outIdx] = wAvg.Result; } //Return averaged outputs return(output); } else { //Probabilistic or SingleBool output int numOfOutputProbabilities = memberNetOutputs[0].Item2.Length; double[] outProbabilities = new double[numOfOutputProbabilities]; for (int pIdx = 0; pIdx < numOfOutputProbabilities; pIdx++) { double[] memberPs = new double[NumOfMembers]; for (int i = 0; i < NumOfMembers; i++) { memberPs[i] = PMixer.ProbabilityRange.Rescale(memberNetOutputs[i].Item2[pIdx], OutputDataRange); } //Compute members mixed probability outProbabilities[pIdx] = PMixer.MixP(memberPs, _memberNetWeights); } if (numOfOutputProbabilities > 1) { outProbabilities.ScaleToNewSum(1d); } //Rescale probabilities to output range for (int pIdx = 0; pIdx < numOfOutputProbabilities; pIdx++) { outProbabilities[pIdx] = OutputDataRange.Rescale(outProbabilities[pIdx], PMixer.ProbabilityRange); } return(outProbabilities); } }