List of usage examples for org.apache.commons.math4.stat.descriptive.moment StandardDeviation StandardDeviation
public StandardDeviation()
From source file:delfos.group.results.groupevaluationmeasures.MAE_byGroupStdDev.java
@Override public GroupEvaluationMeasureResult getMeasureResult(GroupRecommenderSystemResult groupRecommenderSystemResult, DatasetLoader<? extends Rating> originalDatasetLoader, RelevanceCriteria relevanceCriteria, DatasetLoader<? extends Rating> trainingDatasetLoader, DatasetLoader<? extends Rating> testDatasetLoader) { TreeMap<GroupOfUsers, MeanIterative> maeGroups = new TreeMap<>(); for (GroupOfUsers groupOfUsers : groupRecommenderSystemResult.getGroupsOfUsers()) { Collection<Recommendation> groupRecommendations = groupRecommenderSystemResult .getGroupOutput(groupOfUsers).getRecommendations().getRecommendations(); if (groupRecommendations.isEmpty()) { continue; }//w w w. j a v a2s . c om MeanIterative maeGroup = new MeanIterative(); Map<Integer, Map<Integer, ? extends Rating>> groupTrueRatings = new TreeMap<>(); groupOfUsers.getIdMembers().stream().forEach((idUser) -> { try { groupTrueRatings.put(idUser, testDatasetLoader.getRatingsDataset().getUserRatingsRated(idUser)); } catch (UserNotFound ex) { ERROR_CODES.USER_NOT_FOUND.exit(ex); } }); for (Recommendation recommendation : groupRecommendations) { if (Double.isNaN(recommendation.getPreference().doubleValue())) { continue; } int idItem = recommendation.getItem().getId(); for (int idUser : groupOfUsers.getIdMembers()) { if (groupTrueRatings.get(idUser).containsKey(idItem)) { double trueRating = groupTrueRatings.get(idUser).get(idItem).getRatingValue().doubleValue(); double predicted = recommendation.getPreference().doubleValue(); double absoluteError = Math.abs(predicted - trueRating); maeGroup.addValue(absoluteError); } } } maeGroups.put(groupOfUsers, maeGroup); } double[] maesByGroup = maeGroups.values().parallelStream().mapToDouble(maeGroup -> maeGroup.getMean()) .filter(value -> !Double.isNaN(value)).toArray(); double maeByGroupStdDev = new StandardDeviation().evaluate(maesByGroup); if (maesByGroup.length == 0) { return new GroupEvaluationMeasureResult(this, Double.NaN); } else { return new GroupEvaluationMeasureResult(this, maeByGroupStdDev); } }
From source file:delfos.group.results.groupevaluationmeasures.MAE_byMemberStdDev.java
@Override public GroupEvaluationMeasureResult getMeasureResult(GroupRecommenderSystemResult groupRecommenderSystemResult, DatasetLoader<? extends Rating> originalDatasetLoader, RelevanceCriteria relevanceCriteria, DatasetLoader<? extends Rating> trainingDatasetLoader, DatasetLoader<? extends Rating> testDatasetLoader) { TreeMap<Integer, MeanIterative> maeAllMembers = new TreeMap<>(); for (GroupOfUsers groupOfUsers : groupRecommenderSystemResult.getGroupsOfUsers()) { Collection<Recommendation> groupRecommendations = groupRecommenderSystemResult .getGroupOutput(groupOfUsers).getRecommendations().getRecommendations(); if (groupRecommendations.isEmpty()) { continue; }//from w w w. ja va 2 s . c o m MeanIterative maeGroup = new MeanIterative(); Map<Integer, MeanIterative> maeMembers = new TreeMap<>(); for (User member : groupOfUsers.getMembers()) { maeMembers.put(member.getId(), new MeanIterative()); } Map<Integer, Map<Integer, ? extends Rating>> groupTrueRatings = new TreeMap<>(); groupOfUsers.getIdMembers().stream().forEach((idUser) -> { try { groupTrueRatings.put(idUser, testDatasetLoader.getRatingsDataset().getUserRatingsRated(idUser)); } catch (UserNotFound ex) { ERROR_CODES.USER_NOT_FOUND.exit(ex); } }); for (Recommendation recommendation : groupRecommendations) { if (Double.isNaN(recommendation.getPreference().doubleValue())) { continue; } int idItem = recommendation.getItem().getId(); for (int idUser : groupOfUsers.getIdMembers()) { if (groupTrueRatings.get(idUser).containsKey(idItem)) { double trueRating = groupTrueRatings.get(idUser).get(idItem).getRatingValue().doubleValue(); double predicted = recommendation.getPreference().doubleValue(); double absoluteError = Math.abs(predicted - trueRating); maeGroup.addValue(absoluteError); maeMembers.get(idUser).addValue(absoluteError); } } } maeAllMembers.putAll(maeMembers); } double[] maeByMember = maeAllMembers.values().parallelStream() .mapToDouble(meanMember -> meanMember.getMean()).filter(value -> !Double.isNaN(value)).toArray(); double maeByMemberStdDev = new StandardDeviation().evaluate(maeByMember); if (maeByMember.length == 0) { return new GroupEvaluationMeasureResult(this, Double.NaN); } else { return new GroupEvaluationMeasureResult(this, maeByMemberStdDev); } }