/// <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(); }
/// <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; }
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)); }
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)); }
/// <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; }