Exemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="VowpalWabbitRecommender{TInstanceSource}"/> class.
        /// </summary>
        /// <param name="mapping">The mapping used to access the data.</param>
        private VowpalWabbitRecommender(
            IRatingRecommenderMapping <TInstanceSource, RatedUserItem, User, Item, int, DummyFeatureSource, Vector> mapping)
        {
            Debug.Assert(mapping != null, "A valid mapping should be provided.");

            this.mapping  = mapping;
            this.Settings = new VowpalWabbitRecommenderSettings();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="VowpalWabbitRecommender{TInstanceSource}"/> class. Downloads recommender executable if necessary.
        /// </summary>
        /// <param name="mapping">The mapping used to access the data.</param>
        public static VowpalWabbitRecommender <TInstanceSource> Create(
            IRatingRecommenderMapping <TInstanceSource, RatedUserItem, User, Item, int, DummyFeatureSource, Vector> mapping)
        {
            if (string.IsNullOrEmpty(PathToExe))
            {
                switch (WrapperUtils.DetectedOS)
                {
                case WrapperUtils.OS.Windows:
                    PathToExe = Path.Combine("Data", "Bin", "vw.exe");
                    if (!File.Exists(PathToExe))
                    {
                        // getting msi
                        var msiName = "vwsetup.msi";
                        var tmpDir  = Path.Combine(InstallationWorkDir, "tmp");
                        var tmpFile = Path.Combine(tmpDir, msiName);
                        Directory.CreateDirectory(tmpDir);
                        // Github does not support ssl, which is the default in .NET 4.5, anymore
                        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                        new WebClient().DownloadFile(ReleaseUrl, tmpFile);
                        // extracting msi contents
                        // "/a" means "administrative installation" https://docs.microsoft.com/en-us/windows/desktop/Msi/administrative-installation
                        // it extracts files from msi to TARGETDIR\VowpalWabbit
                        // and creates a smaller msi with the same name in the TARGETDIR
                        WrapperUtils.ExecuteExternalCommand($"msiexec /a \"{Path.GetFullPath(tmpFile)}\" TARGETDIR=\"{Path.GetFullPath(InstallationWorkDir)}\" /q");
                        // copying executable to the correct place
                        File.Copy(Path.Combine(InstallationWorkDir, "VowpalWabbit", "vw.exe"), PathToExe);
                        // deleting temp files
                        Directory.Delete(tmpDir, true);
                        Directory.Delete(Path.Combine(InstallationWorkDir, "VowpalWabbit"), true);
                        File.Delete(Path.Combine(InstallationWorkDir, msiName));
                    }
                    break;

                case WrapperUtils.OS.Linux:
                    PathToExe = Path.Combine(".", "Data", "Bin", "vw");
                    if (!File.Exists(PathToExe))
                    {
                        new WebClient().DownloadFile(ReleaseUrlLinux, PathToExe);
                    }
                    break;

                case WrapperUtils.OS.OSX:
                    // Expecting that vw is installed via brew install vowpal-wabbit
                    PathToExe = PathToInstalledBinMacOS;
                    break;

                default:
                    throw new PlatformNotSupportedException($"Running Vowpal Wabbit recommender is not supported on OS {WrapperUtils.DetectedOSDescription}.");
                }
            }
            return(new VowpalWabbitRecommender <TInstanceSource>(mapping));
        }
 /// <summary>
 /// Initializes a new instance of the
 /// <see cref="TrainTestSplittingRatingRecommenderMapping{TInstanceSource,TInstance,TUser,TItem,TRating,TFeatureSource,TFeatureValues}"/> class.
 /// </summary>
 /// <param name="mapping">The wrapped recommender mapping.</param>
 /// <param name="trainingOnlyUserFraction">The fraction of users included in the training set only.</param>
 /// <param name="testUserRatingTrainingFraction">The fraction of ratings in the training set for each user who is presented in both sets.</param>
 /// <param name="coldUserFraction">The fraction of users included in the test set only.</param>
 /// <param name="coldItemFraction">The fraction of items included in the test set only.</param>
 /// <param name="ignoredUserFraction">The fraction of users not included in either the training or the test set.</param>
 /// <param name="ignoredItemFraction">The fraction of items not included in either the training or the test set.</param>
 /// <param name="removeOccasionalColdItems">Whether the occasionally produced cold items should be removed from the test set.</param>
 public TrainTestSplittingRatingRecommenderMapping(
     IRatingRecommenderMapping <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues> mapping,
     double trainingOnlyUserFraction,
     double testUserRatingTrainingFraction,
     double coldUserFraction        = 0,
     double coldItemFraction        = 0,
     double ignoredUserFraction     = 0,
     double ignoredItemFraction     = 0,
     bool removeOccasionalColdItems = false)
     : base(mapping, trainingOnlyUserFraction, testUserRatingTrainingFraction, coldUserFraction, coldItemFraction, ignoredUserFraction, ignoredItemFraction, removeOccasionalColdItems)
 {
     this.mapping = mapping;
 }
Exemplo n.º 4
0
 SplitToTrainTest <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues>(
     this IRatingRecommenderMapping <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues> mapping,
     double trainingOnlyUserFraction,
     double testUserRatingTrainingFraction,
     double coldUserFraction        = 0,
     double coldItemFraction        = 0,
     double ignoredUserFraction     = 0,
     double ignoredItemFraction     = 0,
     bool removeOccasionalColdItems = false)
 {
     return(new TrainTestSplittingRatingRecommenderMapping <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues>(
                mapping, trainingOnlyUserFraction, testUserRatingTrainingFraction, coldUserFraction, coldItemFraction, ignoredUserFraction, ignoredItemFraction, removeOccasionalColdItems));
 }
Exemplo n.º 5
0
 ForEvaluation <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues>(
     this IRatingRecommenderMapping <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues> mapping)
 {
     return(new RecommenderEvaluatorMapping <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues>(mapping));
 }
Exemplo n.º 6
0
 /// <summary>
 /// Initializes a new instance of the
 /// <see cref="RecommenderEvaluatorMapping{TInstanceSource,TInstance,TUser,TItem,TRating,TFeatureSource,TFeatureValues}"/>
 /// class.
 /// </summary>
 /// <param name="mapping">A recommender mapping.</param>
 public RecommenderEvaluatorMapping(
     IRatingRecommenderMapping <TInstanceSource, TInstance, TUser, TItem, TRating, TFeatureSource, TFeatureValues> mapping)
 {
     this.mapping = mapping;
 }