/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.neuroph.contrib.bpbench;

import java.util.ArrayList;
import java.util.List;

/**
 * Class that defines statistics for training`s
 *
 * @author Mladen Savic 
 */
public class TrainingStatistics {

    /**
     * Minimum iterations for specific training repeated n times
     */
    private int minIterations = Integer.MAX_VALUE;
    /**
     * Maximum iterations for specific training repeated n times
     */
    private int maxIterations = Integer.MIN_VALUE;
    /**
     * Mean of iterations for specific training repeated n times
     */
    private double meanIterations;
    /**
     * Standard deviation of iterations for specific training repeated n times
     */
    private double stdIterations;
    /**
     * Minimum total error for specific training repeated n times
     */
    private double minError = Integer.MAX_VALUE;
    /**
     * Maximum total error for specific training repeated n times
     */
    private double maxError = Integer.MIN_VALUE;
    /**
     * Mean of total error for specific training repeated n times
     */
    private double meanError;
    /**
     * Standard deviation of total error for specific training repeated n times
     */
    private double stdError;
    /**
     * List of training results for specific training repeated n times
     */
    private List trainingResults = new ArrayList<>();

    /**
     * Method that adds new training result to statistic and set minimum and
     * maximum iterations and total error
     *
     * @param result
     */
    public void addData(TrainingResult result) {
        if (result.getTrainingIterations() < minIterations) {
            minIterations = result.getTrainingIterations();
        }
        if (result.getTrainingIterations() > maxIterations) {
            maxIterations = result.getTrainingIterations();
        }
        if (result.getError() < minError) {
            minError = result.getError();
        }
        if (result.getError() > maxError) {
            maxError = result.getError();
        }
        trainingResults.add(result);

    }

    /**
     * Method for calculating mean and standard deviation
     */
    public void calculateParameters() {
        calculateMean();
        calculateStd();
    }

    /**
     * Method for calculating mean of iterations and total error
     */
    private void calculateMean() {
        int sumIter = 0;
        double sumError = 0;
        for (int i = 0; i < trainingResults.size(); i++) {
            sumError += trainingResults.get(i).getError();
            sumIter += trainingResults.get(i).getTrainingIterations();
        }
        meanError = sumError / trainingResults.size();
        meanIterations = (double) sumIter / (double) trainingResults.size();
    }

    /**
     * Method for calculating standard deviation of iterations and total error
     */
    private void calculateStd() {
        if (meanError == 0 || meanIterations == 0) {
            calculateMean();
        }
        double sumError = 0;
        int sumIter = 0;
        for (TrainingResult trainingResult : trainingResults) {
            sumError += Math.pow(trainingResult.getError() - meanError, 2);
            sumIter += Math.pow(trainingResult.getTrainingIterations() - meanIterations, 2);
        }
        stdError = Math.sqrt(sumError / trainingResults.size()); // da li sa size ili sa size-1
        stdIterations = Math.sqrt(sumIter / trainingResults.size());
    }

    /**
     * Create instance of training statistic
     */
    public TrainingStatistics() {

    }

    /**
     * Return minimum iterations
     *
     * @return
     */
    public int getMinIterations() {
        return minIterations;
    }

    /**
     * Return maximum iterations
     *
     * @return
     */
    public int getMaxIterations() {
        return maxIterations;
    }

    /**
     * Return list of all training results
     *
     * @return
     */
    public List getTrainingResults() {
        return trainingResults;
    }

    /**
     * Return mean of iterations for this training
     *
     * @return mean iterations
     */
    public double getMeanIterations() {
        return meanIterations;
    }

    /**
     * Return standard deviation of iterations for this training
     *
     * @return
     */
    public double getStdIterations() {
        return stdIterations;
    }

    @Override
    public String toString() {
        return "TrainingStatistics{" + "minIterations=" + minIterations + ", maxIterations=" + maxIterations + ", meanIterations=" + meanIterations + ", stdIterations=" + stdIterations + ", minError=" + minError + ", maxError=" + maxError + ", meanError=" + meanError + ", stdError=" + stdError + '}';
    }

    /**
     * Return minimum error for this training
     *
     * @return minimum error
     */
    public double getMinError() {
        return minError;
    }

    /**
     * Return maximum error for this training
     *
     * @return maximum error
     */
    public double getMaxError() {
        return maxError;
    }

    /**
     * Return mean error for this training
     *
     * @return mean error
     */
    public double getMeanError() {
        return meanError;
    }

    /**
     * Return standard deviation for this training
     *
     * @return standard deviation
     */
    public double getStdError() {
        return stdError;
    }

}

 

Ads help maintain this website.