
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