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));
        }
コード例 #5
0
        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));
 }
コード例 #9
0
        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);
        }
コード例 #10
0
 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);
 }
コード例 #11
0
        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());
        }
コード例 #12
0
        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());
            }
        }
コード例 #13
0
  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);
  }