All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpmml.evaluator.RegressionAggregator Maven / Gradle / Ivy

/*
 * Copyright (c) 2015 Villu Ruusmann
 *
 * This file is part of JPMML-Evaluator
 *
 * JPMML-Evaluator is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JPMML-Evaluator is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with JPMML-Evaluator.  If not, see .
 */
package org.jpmml.evaluator;

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

import com.google.common.base.Function;
import com.google.common.primitives.Doubles;
import org.apache.commons.math3.stat.descriptive.rank.Percentile;

class RegressionAggregator {

	private List values = new ArrayList<>();


	public int size(){
		return this.values.size();
	}

	public void clear(){
		this.values.clear();
	}

	public void add(Double value){
		this.values.add(value);
	}

	public Double sum(){
		Function, Double> function = new Function, Double>(){

			@Override
			public Double apply(List values){
				return sum(values);
			}
		};

		return transform(function);
	}

	public Double median(){
		Function, Double> function = new Function, Double>(){

			@Override
			public Double apply(List values){
				return median(values);
			}
		};

		return transform(function);
	}

	public Double average(final double denominator){
		Function, Double> function = new Function, Double>(){

			@Override
			public Double apply(List values){
				return sum(values) / denominator;
			}
		};

		return transform(function);
	}

	protected Double transform(Function, Double> function){
		return function.apply(this.values);
	}

	static
	double sum(List values){
		double result = 0d;

		for(Double value : values){
			result += value.doubleValue();
		}

		return result;
	}

	static
	double median(List values){
		double[] data = Doubles.toArray(values);

		// The data must be ordered
		Arrays.sort(data);

		Percentile percentile = new Percentile();
		percentile.setData(data);

		return percentile.evaluate(50);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy