package net.varkhan.data.learn.ensemble;
import net.varkhan.data.learn.Regressor;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 12/26/13
* @time 6:57 PM
*/
public class AverageRegressor<T,C> implements Regressor<T,C> {
protected final Regressor<T,C>[] components;
public AverageRegressor(Regressor<T,C>... components) {
this.components=components;
}
@Override
public double invoke(T obs, C ctx) {
double cnf=0;
double avg=0;
for(Regressor<T,C> c : components) {
double k = c.invoke(obs, ctx);
double p = c.confidence(k, obs, ctx);
cnf += p;
avg += k*p;
}
return avg/cnf;
}
@Override
public double confidence(double val, T obs, C ctx) {
double p = 0;
for(Regressor<T,C> c: components) {
p += c.confidence(val, obs, ctx);
}
return p/components.length;
}
}