private static IItemBasedRecommender buildRecommender2() { IDataModel dataModel = getDataModel( new long[] { 1, 2, 3, 4 }, new Double?[][] { new double?[] { 0.1, 0.3, 0.9, 0.8 }, new double?[] { 0.2, 0.3, 0.3, 0.4 }, new double?[] { 0.4, 0.3, 0.5, 0.1, 0.1 }, new double?[] { 0.7, 0.3, 0.8, 0.5, 0.6 }, }); var similarities = new List <GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 2, 0.8)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 3, -0.6)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 4, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.9)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 3, 0.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 3, -0.1)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 4, 0.1)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(3, 4, -0.5)); IItemSimilarity similarity = new GenericItemSimilarity(similarities); return(new GenericItemBasedRecommender(dataModel, similarity)); }
public void testRescorer() { IDataModel dataModel = getDataModel( new long[] { 1, 2, 3 }, new Double?[][] { new double?[] { 0.1, 0.2 }, new double?[] { 0.2, 0.3, 0.3, 0.6 }, new double?[] { 0.4, 0.4, 0.5, 0.9 }, }); var similarities = new List <GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 2, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 3, 0.2)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.7)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 3, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 3, 0.9)); IItemSimilarity similarity = new GenericItemSimilarity(similarities); IRecommender recommender = new GenericItemBasedRecommender(dataModel, similarity); IList <IRecommendedItem> originalRecommended = recommender.Recommend(1, 2); IList <IRecommendedItem> rescoredRecommended = recommender.Recommend(1, 2, new ReversingRescorer <long>()); Assert.NotNull(originalRecommended); Assert.NotNull(rescoredRecommended); Assert.AreEqual(2, originalRecommended.Count); Assert.AreEqual(2, rescoredRecommended.Count); Assert.AreEqual(originalRecommended[0].GetItemID(), rescoredRecommended[1].GetItemID()); Assert.AreEqual(originalRecommended[1].GetItemID(), rescoredRecommended[0].GetItemID()); }
private static IItemBasedRecommender buildRecommender() { IDataModel dataModel = getDataModel(); var similarities = new List <GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 2, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.0)); IItemSimilarity similarity = new GenericItemSimilarity(similarities); return(new GenericItemBasedRecommender(dataModel, similarity)); }
public void testAllSimilaritiesWithoutIndex() { List<GenericItemSimilarity.ItemItemSimilarity> itemItemSimilarities = new List<GenericItemSimilarity.ItemItemSimilarity>() {new GenericItemSimilarity.ItemItemSimilarity(1L, 2L, 0.2), new GenericItemSimilarity.ItemItemSimilarity(1L, 3L, 0.2), new GenericItemSimilarity.ItemItemSimilarity(2L, 1L, 0.2), new GenericItemSimilarity.ItemItemSimilarity(3L, 5L, 0.2), new GenericItemSimilarity.ItemItemSimilarity(3L, 4L, 0.2)}; IItemSimilarity similarity = new GenericItemSimilarity(itemItemSimilarities); Assert.True(containsExactly(similarity.AllSimilarItemIDs(1L), 2L, 3L)); Assert.True(containsExactly(similarity.AllSimilarItemIDs(2L), 1L)); Assert.True(containsExactly(similarity.AllSimilarItemIDs(3L), 1L, 5L, 4L)); Assert.True(containsExactly(similarity.AllSimilarItemIDs(4L), 3L)); Assert.True(containsExactly(similarity.AllSimilarItemIDs(5L), 3L)); }
public void testFileItemItemSimilarityIterable() { Iterable <ItemItemSimilarity> similarityIterable = new FileItemItemSimilarityIterable(testFile); GenericItemSimilarity similarity = new GenericItemSimilarity(similarityIterable); Assert.AreEqual(0.125, similarity.itemSimilarity(1L, 5L), EPSILON); Assert.AreEqual(0.125, similarity.itemSimilarity(5L, 1L), EPSILON); Assert.AreEqual(0.5, similarity.itemSimilarity(1L, 7L), EPSILON); Assert.AreEqual(0.5, similarity.itemSimilarity(7L, 1L), EPSILON); Assert.True(Double.IsNaN(similarity.itemSimilarity(7L, 8L))); double[] valuesForOne = similarity.itemSimilarities(1L, new long[] { 5L, 7L }); Assert.NotNull(valuesForOne); Assert.AreEqual(2, valuesForOne.Length); Assert.AreEqual(0.125, valuesForOne[0], EPSILON); Assert.AreEqual(0.5, valuesForOne[1], EPSILON); }
public void testHowMany() { IDataModel dataModel = getDataModel( new long[] { 1, 2, 3, 4, 5 }, new Double?[][] { new double?[] { 0.1, 0.2 }, new double?[] { 0.2, 0.3, 0.3, 0.6 }, new double?[] { 0.4, 0.4, 0.5, 0.9 }, new double?[] { 0.1, 0.4, 0.5, 0.8, 0.9, 1.0 }, new double?[] { 0.2, 0.3, 0.6, 0.7, 0.1, 0.2 }, }); var similarities = new List <GenericItemSimilarity.ItemItemSimilarity>(); for (int i = 0; i < 6; i++) { for (int j = i + 1; j < 6; j++) { similarities.Add( new GenericItemSimilarity.ItemItemSimilarity(i, j, 1.0 / (1.0 + i + j))); } } IItemSimilarity similarity = new GenericItemSimilarity(similarities); IRecommender recommender = new GenericItemBasedRecommender(dataModel, similarity); IList <IRecommendedItem> fewRecommended = recommender.Recommend(1, 2); IList <IRecommendedItem> moreRecommended = recommender.Recommend(1, 4); for (int i = 0; i < fewRecommended.Count; i++) { Assert.AreEqual(fewRecommended[i].GetItemID(), moreRecommended[i].GetItemID()); } recommender.Refresh(null); for (int i = 0; i < fewRecommended.Count; i++) { Assert.AreEqual(fewRecommended[i].GetItemID(), moreRecommended[i].GetItemID()); } }
public void testSimple() { List<GenericItemSimilarity.ItemItemSimilarity> similarities = new List<GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 1, 0.6)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 1, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 3, 0.3)); GenericItemSimilarity itemCorrelation = new GenericItemSimilarity(similarities); Assert.AreEqual(1.0, itemCorrelation.ItemSimilarity(1, 1), EPSILON); Assert.AreEqual(0.6, itemCorrelation.ItemSimilarity(1, 2), EPSILON); Assert.AreEqual(0.6, itemCorrelation.ItemSimilarity(2, 1), EPSILON); Assert.AreEqual(0.3, itemCorrelation.ItemSimilarity(1, 3), EPSILON); Assert.True(Double.IsNaN(itemCorrelation.ItemSimilarity(3, 4))); }
public void testFromCorrelation() { IDataModel dataModel = getDataModel( new long[] {1, 2, 3}, new Double?[][] { new double?[] {1.0, 2.0}, new double?[] {2.0, 5.0}, new double?[] {3.0, 6.0}, }); IItemSimilarity otherSimilarity = new PearsonCorrelationSimilarity(dataModel); IItemSimilarity itemSimilarity = new GenericItemSimilarity(otherSimilarity, dataModel); assertCorrelationEquals(1.0, itemSimilarity.ItemSimilarity(0, 0)); assertCorrelationEquals(0.960768922830523, itemSimilarity.ItemSimilarity(0, 1)); }
private static IItemBasedRecommender buildRecommender2() { IDataModel dataModel = getDataModel( new long[] {1, 2, 3, 4}, new Double?[][] { new double?[]{0.1, 0.3, 0.9, 0.8}, new double?[]{0.2, 0.3, 0.3, 0.4}, new double?[]{0.4, 0.3, 0.5, 0.1, 0.1}, new double?[]{0.7, 0.3, 0.8, 0.5, 0.6}, }); var similarities = new List<GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 2, 0.8)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 3, -0.6)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 4, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.9)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 3, 0.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 3, -0.1)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 4, 0.1)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(3, 4, -0.5)); IItemSimilarity similarity = new GenericItemSimilarity(similarities); return new GenericItemBasedRecommender(dataModel, similarity); }
private static IItemBasedRecommender buildRecommender() { IDataModel dataModel = getDataModel(); var similarities = new List<GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 2, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.0)); IItemSimilarity similarity = new GenericItemSimilarity(similarities); return new GenericItemBasedRecommender(dataModel, similarity); }
public void testRescorer() { IDataModel dataModel = getDataModel( new long[] {1, 2, 3}, new Double?[][] { new double?[]{0.1, 0.2}, new double?[]{0.2, 0.3, 0.3, 0.6}, new double?[]{0.4, 0.4, 0.5, 0.9}, }); var similarities = new List<GenericItemSimilarity.ItemItemSimilarity>(); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 1, 1.0)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 2, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(0, 3, 0.2)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 2, 0.7)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(1, 3, 0.5)); similarities.Add(new GenericItemSimilarity.ItemItemSimilarity(2, 3, 0.9)); IItemSimilarity similarity = new GenericItemSimilarity(similarities); IRecommender recommender = new GenericItemBasedRecommender(dataModel, similarity); IList<IRecommendedItem> originalRecommended = recommender.Recommend(1, 2); IList<IRecommendedItem> rescoredRecommended = recommender.Recommend(1, 2, new ReversingRescorer<long>()); Assert.NotNull(originalRecommended); Assert.NotNull(rescoredRecommended); Assert.AreEqual(2, originalRecommended.Count); Assert.AreEqual(2, rescoredRecommended.Count); Assert.AreEqual(originalRecommended[0].GetItemID(), rescoredRecommended[1].GetItemID()); Assert.AreEqual(originalRecommended[1].GetItemID(), rescoredRecommended[0].GetItemID()); }
public void testHowMany() { IDataModel dataModel = getDataModel( new long[] {1, 2, 3, 4, 5}, new Double?[][] { new double?[]{0.1, 0.2}, new double?[]{0.2, 0.3, 0.3, 0.6}, new double?[]{0.4, 0.4, 0.5, 0.9}, new double?[]{0.1, 0.4, 0.5, 0.8, 0.9, 1.0}, new double?[]{0.2, 0.3, 0.6, 0.7, 0.1, 0.2}, }); var similarities = new List<GenericItemSimilarity.ItemItemSimilarity>(); for (int i = 0; i < 6; i++) { for (int j = i + 1; j < 6; j++) { similarities.Add( new GenericItemSimilarity.ItemItemSimilarity(i, j, 1.0 / (1.0 + i + j))); } } IItemSimilarity similarity = new GenericItemSimilarity(similarities); IRecommender recommender = new GenericItemBasedRecommender(dataModel, similarity); IList<IRecommendedItem> fewRecommended = recommender.Recommend(1, 2); IList<IRecommendedItem> moreRecommended = recommender.Recommend(1, 4); for (int i = 0; i < fewRecommended.Count; i++) { Assert.AreEqual(fewRecommended[i].GetItemID(), moreRecommended[i].GetItemID()); } recommender.Refresh(null); for (int i = 0; i < fewRecommended.Count; i++) { Assert.AreEqual(fewRecommended[i].GetItemID(), moreRecommended[i].GetItemID()); } }
public void testFileItemItemSimilarityIterable() { Iterable<ItemItemSimilarity> similarityIterable = new FileItemItemSimilarityIterable(testFile); GenericItemSimilarity similarity = new GenericItemSimilarity(similarityIterable); Assert.AreEqual(0.125, similarity.itemSimilarity(1L, 5L), EPSILON); Assert.AreEqual(0.125, similarity.itemSimilarity(5L, 1L), EPSILON); Assert.AreEqual(0.5, similarity.itemSimilarity(1L, 7L), EPSILON); Assert.AreEqual(0.5, similarity.itemSimilarity(7L, 1L), EPSILON); Assert.True(Double.IsNaN(similarity.itemSimilarity(7L, 8L))); double[] valuesForOne = similarity.itemSimilarities(1L, new long[] { 5L, 7L }); Assert.NotNull(valuesForOne); Assert.AreEqual(2, valuesForOne.Length); Assert.AreEqual(0.125, valuesForOne[0], EPSILON); Assert.AreEqual(0.5, valuesForOne[1], EPSILON); }