Java tutorial
/* * Copyright (C) 2016 jcastro * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package delfos.results.evaluationmeasures; import delfos.common.parameters.ParameterOwnerAdapter; import delfos.common.parameters.ParameterOwnerType; import delfos.common.statisticalfuncions.MeanIterative; import delfos.dataset.basic.rating.Rating; import delfos.dataset.basic.rating.RatingsDataset; import delfos.dataset.basic.rating.RelevanceCriteria; import delfos.results.MeasureResult; import delfos.results.RecommendationResults; import delfos.rs.recommendation.SingleUserRecommendations; import java.util.Collection; import java.util.Map; import org.jdom2.Element; /** * Interfaz que define los mtodos de una mtrica de evaluacin de un sistema de * recomendacin. * * @author jcastro-inf ( https://github.com/jcastro-inf ) * * @version 1.0 19/10/2011 * @version 1.1 08-Mar-2013 */ public abstract class EvaluationMeasure extends ParameterOwnerAdapter implements Comparable<Object> { /** * Nombre de la caracterstica en que se almacena el valor de la medida de * evaluacin */ public final static String VALUE_ATTRIBUTE_NAME = "value"; /** * Establece el resultado de una ejecucin en base a las recomendaciones * hechas y el conjunto de training * * @param recommendationResults Vector de resultados de la ejecucin en el * que cada elemento es el resultado de la ejecucin con una particin del * conjunto * @param testDataset Dataset de evaluacin que se usan. * @param relevanceCriteria Criterio de relevancia que se usa. * * @return Devuelve un objeto MeasureResult que almacena el valor de la * mtrica para cada ejecucin */ public abstract MeasureResult getMeasureResult(RecommendationResults recommendationResults, RatingsDataset<? extends Rating> testDataset, RelevanceCriteria relevanceCriteria); /** * Devuelve true si la interpretacin correcta de los valores de la medida * supone que el sistema de recomendacin asigna las preferencias como una * prediccin de la valoracin que el usuario dara al producto * * @return true si necesita que el sistema de recomendacin a evaluar * prediga las valoraciones */ public abstract boolean usesRatingPrediction(); /** * Agrega varios resultados, correspondientes ejecuciones distintas, de esta * medida de evaluacin. Las clases que hereden de {@link EvaluationMeasure} * deben sobreescribir este mtodo si la agregacin de la medida de * evaluacin es compleja. * * NOTA: Este mtodo agrega los resultados haciendo la media aritmtica de * los valores devueltos por el mtodo {@link MeasureResult#getValue()} * * @param results Resultados que se desean agregar * * @return Devuelve un objeto {@link MeasureResult} que encapsula el * resultado agregado de las ejecuciones */ public final MeasureResult agregateResults(Collection<MeasureResult> results) { Element aggregatedElement = new Element(this.getName()); double aggregatedValue; MeanIterative mean = new MeanIterative(); results.stream().forEach((mr) -> { mean.addValue(mr.getValue()); }); aggregatedValue = (double) mean.getMean(); aggregatedElement.setAttribute(EvaluationMeasure.VALUE_ATTRIBUTE_NAME, Double.toString(mean.getMean())); return new MeasureResult(this, aggregatedValue); } @Override public int compareTo(Object o) { if (o instanceof EvaluationMeasure) { EvaluationMeasure evaluationMeasure = (EvaluationMeasure) o; return this.getName().compareTo(evaluationMeasure.getName()); } throw new IllegalStateException("The object compared with is of an unrecognised type."); } @Override public ParameterOwnerType getParameterOwnerType() { return ParameterOwnerType.EVALUATION_MESAURE; } public Object getUserResult(SingleUserRecommendations singleUserRecommendations, Map<Integer, ? extends Rating> userRated) { throw new UnsupportedOperationException(); } }