Class RandomSearch

  • Direct Known Subclasses:
    GridSearch

    public class RandomSearch
    extends Object
    Utility class to performs a random search over a Recommender instance. The Recommender class used during the random search must contains a constructor with the signature Recommender::<init>(DataModel, Map<String, Object>) that initializes the Recommender using the attributes defined in the Map object. The parameters used in the search process, i.e. the development set, must be defined in a ParamsGrid instance. The random search is executed in such a way that it minimizes (by default) or maximizes a QualityMeasure instance over the test set of the DataModel instance. If the QualityMeasure requires parameters to work, it must contains a constructor with the signature QualityMeasure::<init>(Recommender, Map<String, Object>) that initializes the QualityMeasure using the attributes defined in the Map object. The search is performed by selecting numIters parameters of the development set.
    • Constructor Detail

      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            double coverage)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        coverage - Percentage of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            double coverage,
                            long seed)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        coverage - Percentage of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            int numIters)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        numIters - Number of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            Map<String,​Object> qualityMeasureParams,
                            double coverage)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure class used to evaluate the Recommender. This class must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasureParams - Map object containing the quality measure parameters names (keys) and values (value)
        coverage - Percentage of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            Map<String,​Object> qualityMeasureParams,
                            double coverage,
                            long seed)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure class used to evaluate the Recommender. This class must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasureParams - Map object containing the quality measure parameters names (keys) and values (value)
        coverage - Percentage of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            Map<String,​Object> qualityMeasureParams,
                            int numIters)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure class used to evaluate the Recommender. This class must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasureParams - Map object containing the quality measure parameters names (keys) and values (value)
        numIters - Number of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure> qualityMeasureClass,
                            Map<String,​Object> qualityMeasureParams,
                            int numIters,
                            long seed)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasureClass - QualityMeasure class used to evaluate the Recommender. This class must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasureParams - Map object containing the quality measure parameters names (keys) and values (value)
        numIters - Number of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            double coverage)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        coverage - Percentage of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            double coverage,
                            long seed)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        coverage - Percentage of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            int numIters)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        numIters - Number of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            Map<String,​Object>[] qualityMeasuresParams,
                            double coverage)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasuresParams - Maps objects containing the quality measure parameters names (keys) and values (value)
        coverage - Percentage of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            Map<String,​Object>[] qualityMeasuresParams,
                            double coverage,
                            long seed)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasuresParams - Maps objects containing the quality measure parameters names (keys) and values (value)
        coverage - Percentage of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            Map<String,​Object>[] qualityMeasuresParams,
                            int numIters)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasuresParams - Maps objects containing the quality measure parameters names (keys) and values (value)
        numIters - Number of samples of the development set to be evaluated
      • RandomSearch

        public RandomSearch​(DataModel datamodel,
                            ParamsGrid grid,
                            Class<? extends Recommender> recommenderClass,
                            Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                            Map<String,​Object>[] qualityMeasuresParams,
                            int numIters,
                            long seed)
        RandomSearch constructor
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasuresParams - Maps objects containing the quality measure parameters names (keys) and values (value)
        numIters - Number of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
      • RandomSearch

        protected RandomSearch​(DataModel datamodel,
                               ParamsGrid grid,
                               Class<? extends Recommender> recommenderClass,
                               Class<? extends QualityMeasure>[] qualityMeasuresClasses,
                               Map<String,​Object>[] qualityMeasuresParams,
                               int numIters,
                               long seed,
                               String progressPrefix)
        RandomSearch constructor to be used inside es.upm.etsisi.cf4j.util.optimization package
        Parameters:
        datamodel - DataModel instance
        grid - ParamsGrid instance containing the development set
        recommenderClass - Recommender class to be evaluated. This class must contains a constructor with the signature Recommender.<init>(DataModel, Map<String, Object>)
        qualityMeasuresClasses - QualityMeasure classes used to evaluate the Recommender. These classes must contain a constructor with the signature QualityMeasure.<init>(Recommender, Map<String, Object>)
        qualityMeasuresParams - Maps objects containing the quality measure parameters names (keys) and values (value)
        numIters - Number of samples of the development set to be evaluated
        seed - Random seed for random numbers generation
        progressPrefix - String prefix to be printed during fit
    • Method Detail

      • fit

        public void fit()
        Performs grid search
      • getBestParams

        public Map<String,​Object> getBestParams()
        Get the best result parameters.
        Returns:
        Map with best params
      • getBestParams

        public Map<String,​Object> getBestParams​(boolean lowerIsBetter)
        Get the best result parameters.
        Parameters:
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
        Returns:
        Map with best params
      • getBestParams

        public Map<String,​Object> getBestParams​(int index,
                                                      boolean lowerIsBetter)
        Get the best result parameters.
        Parameters:
        index - Index of the quality measure for which the best parameters are to be obtained.
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
        Returns:
        Map with best params
      • getBestScore

        public double getBestScore()
        Get the best result score.
        Returns:
        double value with best score.
      • getBestScore

        public double getBestScore​(boolean lowerIsBetter)
        Get the best result score.
        Parameters:
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
        Returns:
        double value with best score.
      • getBestScore

        public double getBestScore​(int index,
                                   boolean lowerIsBetter)
        Get the best result score.
        Parameters:
        index - Index of the quality measure for which the best score is to be obtained
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
        Returns:
        double value with best score.
      • printResults

        public void printResults​(int topN)
        Prints the results of the random search. By default, the quality measure is better the lower its value.
        Parameters:
        topN - Number of entries of the development set to be shown as the top ones
      • printResults

        public void printResults​(int topN,
                                 boolean lowerIsBetter)
        Prints the results of the random search.
        Parameters:
        topN - Number of entries of the development set to be shown as the top ones
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
      • printResults

        public void printResults​(int topN,
                                 int index,
                                 boolean lowerIsBetter)
        Prints the results of the random search.
        Parameters:
        topN - Number of entries of the development set to be shown as the top ones
        index - Index of the quality measure for which the best results are to be printed
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
      • printResults

        public void printResults​(String numberFormat,
                                 int topN,
                                 int index,
                                 boolean lowerIsBetter)
        Prints the results of the random search.
        Parameters:
        numberFormat - Number format for the quality measure values
        topN - Number of entries of the development set to be shown as the top ones
        index - Index of the quality measure for which the best results are to be printed
        lowerIsBetter - Boolean value that takes true if the quality measure is better the lower its value. False otherwise.
      • exportResults

        public void exportResults​(String filename)
                           throws IOException
        Exports results of RandomSerach in csv format
        Parameters:
        filename - File name
        Throws:
        IOException - When file is not found or is locked.
      • exportResults

        public void exportResults​(String filename,
                                  boolean includeHeader)
                           throws IOException
        Exports results of RandomSerach in csv format
        Parameters:
        filename - File name
        includeHeader - Include CSV header line. By default: true
        Throws:
        IOException - When file is not found or is locked.
      • exportResults

        public void exportResults​(String filename,
                                  String separator)
                           throws IOException
        Exports results of RandomSerach in csv format
        Parameters:
        filename - File name
        separator - CSV separator field. By default: colon character (,)
        Throws:
        IOException - When file is not found or is locked.
      • exportResults

        public void exportResults​(String filename,
                                  String separator,
                                  boolean includeHeader)
                           throws IOException
        Exports results of RandomSerach in csv format
        Parameters:
        filename - File name
        separator - CSV separator field. By default: colon character (,)
        includeHeader - Include CSV header line. By default: true
        Throws:
        IOException - When file is not found or is locked.
      • getResults

        protected Map<Map<String,​Object>,​Double[]> getResults()
        This method is required for cross validation (CV). Final users should not used it.
        Returns:
        Map that storage search results.