/// <summary>Compute similarity between one item and a collection of items</summary>
 /// <param name="item_id">the item ID</param>
 /// <param name="items">a collection of items</param>
 /// <param name="item_correlation">the similarity measure to use</param>
 /// <returns>the similarity between the item and the collection</returns>
 public static float Similarity(int item_id, ICollection<int> items, SymmetricCorrelationMatrix item_correlation)
 {
     double similarity = 0;
     foreach (int other_item_id in items)
         similarity += item_correlation[item_id, other_item_id];
     return (float) similarity;
 }
		public void TestReadCorrelationMatrix()
		{
			// create test object
			const string filename = "correlation_matrix.txt";
			var writer = new StreamWriter(filename);
			writer.WriteLine(3);
			writer.WriteLine("0 1 0.1");
			writer.WriteLine("0 2 0.2");
			writer.WriteLine("1 2 0.3");
			writer.Close();

			var reader = new StreamReader(filename);
			var corr_matrix = new SymmetricCorrelationMatrix(0);
			corr_matrix.ReadSymmetricCorrelationMatrix(reader);
			Assert.AreEqual(1f,   corr_matrix[0, 0]);
			Assert.AreEqual(1f,   corr_matrix[1, 1]);
			Assert.AreEqual(1f,   corr_matrix[2, 2]);

			Assert.AreEqual(0.1f, corr_matrix[0, 1]);
			Assert.AreEqual(0.1f, corr_matrix[1, 0]);

			Assert.AreEqual(0.2f, corr_matrix[0, 2]);
			Assert.AreEqual(0.2f, corr_matrix[2, 0]);

			Assert.AreEqual(0.3f, corr_matrix[1, 2]);
			Assert.AreEqual(0.3f, corr_matrix[2, 1]);


			// TODO test Exception
			// test with wrong format

			// close streams an delete the text file
			reader.Close();
			//File.Delete(filename);
		}
Exemplo n.º 3
0
        public void TestGetPositivelyCorrelatedEntities()
        {
            // create a test CorrelationMatrix
            var matrix = new SymmetricCorrelationMatrix(3);

            matrix[0, 0] = 1f;
            matrix[0, 1] = 0.1f;
            matrix[0, 2] = -0.2f;
            matrix[1, 0] = 0.1f;
            matrix[1, 1] = 1f;
            matrix[1, 2] = 0.3f;
            matrix[2, 0] = -0.2f;
            matrix[2, 1] = 0.3f;
            matrix[2, 2] = 1f;

            Assert.AreEqual(1f, matrix[0, 0]);
            Assert.AreEqual(0.3f, matrix[1, 2]);

            // test
            IList <int> cor_entities_list = matrix.GetPositivelyCorrelatedEntities(2);

            int[] cor_entities = new int[1];
            cor_entities_list.CopyTo(cor_entities, 0);
            int[] pos_cor_entities = { 1 };
            Assert.AreEqual(pos_cor_entities, cor_entities);
        }
Exemplo n.º 4
0
 ///
 public override void LearnAttributeToFactorMapping()
 {
     BinaryCosine cosine_correlation = new BinaryCosine(MaxItemID + 1);
     Console.Error.WriteLine("training with max_item_id={0}", MaxItemID);
     cosine_correlation.ComputeCorrelations(item_attributes);
     this.item_correlation = cosine_correlation;
     _MapToLatentFactorSpace = Utils.Memoize<int, float[]>(__MapToLatentFactorSpace);
 }
        ///
        public override void LearnAttributeToFactorMapping()
        {
            BinaryCosine cosine_correlation = new BinaryCosine(MaxItemID + 1);

            Console.Error.WriteLine("training with max_item_id={0}", MaxItemID);
            cosine_correlation.ComputeCorrelations(item_attributes);
            this.item_correlation   = cosine_correlation;
            _MapToLatentFactorSpace = Utils.Memoize <int, float[]>(__MapToLatentFactorSpace);
        }
Exemplo n.º 6
0
        /// <summary>Compute similarity between one item and a collection of items</summary>
        /// <param name="item_id">the item ID</param>
        /// <param name="items">a collection of items</param>
        /// <param name="item_correlation">the similarity measure to use</param>
        /// <returns>the similarity between the item and the collection</returns>
        public static float Similarity(int item_id, ICollection <int> items, SymmetricCorrelationMatrix item_correlation)
        {
            double similarity = 0;

            foreach (int other_item_id in items)
            {
                similarity += item_correlation[item_id, other_item_id];
            }
            return((float)similarity);
        }
Exemplo n.º 7
0
        public void TestWrite()
        {
            // create a test CorrelationMatrix
            var matrix = new SymmetricCorrelationMatrix(3);

            matrix[0, 0] = 1f;
            matrix[0, 1] = 0.1f;
            matrix[0, 2] = 0.2f;
            matrix[1, 0] = 0.1f;
            matrix[1, 1] = 1f;
            matrix[1, 2] = 0.3f;
            matrix[2, 0] = 0.2f;
            matrix[2, 1] = 0.3f;
            matrix[2, 2] = 1f;

            // test
            string filename = "testCorrelationMatrixWriter.txt";
            var    writer   = new StreamWriter(filename);

            matrix.Write(writer);
            writer.Close();

            // check file format
            var reader1 = new StreamReader(filename);

            Assert.AreEqual("3", reader1.ReadLine().Trim());
            Assert.AreEqual("0 1 0.1", reader1.ReadLine().Trim());
            Assert.AreEqual("0 2 0.2", reader1.ReadLine().Trim());
            Assert.AreEqual("1 2 0.3", reader1.ReadLine().Trim());
            reader1.Close();

            // check result of reading in the file
            var reader2     = new StreamReader(filename);
            var corr_matrix = new SymmetricCorrelationMatrix(0);

            corr_matrix.ReadSymmetricCorrelationMatrix(reader2);

            Assert.AreEqual(1f, corr_matrix[0, 0]);
            Assert.AreEqual(0.1f, corr_matrix[0, 1]);
            Assert.AreEqual(0.2f, corr_matrix[0, 2]);
            Assert.AreEqual(0.1f, corr_matrix[1, 0]);
            Assert.AreEqual(1f, corr_matrix[1, 1]);
            Assert.AreEqual(0.3f, corr_matrix[1, 2]);
            Assert.AreEqual(0.2f, corr_matrix[2, 0]);
            Assert.AreEqual(0.3f, corr_matrix[2, 1]);
            Assert.AreEqual(1f, corr_matrix[2, 2]);
            reader2.Close();

            // clean up
            File.Delete(filename);
        }
Exemplo n.º 8
0
        /// <summary>Compute the intra-set similarity of an item collection</summary>
        /// <param name="items">a collection of items</param>
        /// <param name="item_correlation">the similarity measure to use</param>
        /// <returns>the intra-set similarity of the collection</returns>
        public static float Similarity(ICollection <int> items, SymmetricCorrelationMatrix item_correlation)
        {
            double similarity = 0;

            for (int i = 0; i < items.Count; i++)
            {
                for (int j = i + 1; j < items.Count; j++)
                {
                    similarity += item_correlation[i, j];
                }
            }

            return((float)similarity);
        }
		public void TestWrite()
		{
			// create a test CorrelationMatrix
			var matrix = new SymmetricCorrelationMatrix(3);

			matrix[0, 0] = 1f;
			matrix[0, 1] = 0.1f;
			matrix[0, 2] = 0.2f;
			matrix[1, 0] = 0.1f;
			matrix[1, 1] = 1f;
			matrix[1, 2] = 0.3f;
			matrix[2, 0] = 0.2f;
			matrix[2, 1] = 0.3f;
			matrix[2, 2] = 1f;

			// test
			string filename = "testCorrelationMatrixWriter.txt";
			var writer = new StreamWriter(filename);
			matrix.Write(writer);
			writer.Close();

			// check file format
			var reader1 = new StreamReader(filename);
			Assert.AreEqual("3",       reader1.ReadLine().Trim());
			Assert.AreEqual("0 1 0.1", reader1.ReadLine().Trim());
			Assert.AreEqual("0 2 0.2", reader1.ReadLine().Trim());
			Assert.AreEqual("1 2 0.3", reader1.ReadLine().Trim());
			reader1.Close();

			// check result of reading in the file
			var reader2 = new StreamReader(filename);
			var corr_matrix = new SymmetricCorrelationMatrix(0);
			corr_matrix.ReadSymmetricCorrelationMatrix(reader2);

			Assert.AreEqual(1f,   corr_matrix[0, 0]);
			Assert.AreEqual(0.1f, corr_matrix[0, 1]);
			Assert.AreEqual(0.2f, corr_matrix[0, 2]);
			Assert.AreEqual(0.1f, corr_matrix[1, 0]);
			Assert.AreEqual(1f,   corr_matrix[1, 1]);
			Assert.AreEqual(0.3f, corr_matrix[1, 2]);
			Assert.AreEqual(0.2f, corr_matrix[2, 0]);
			Assert.AreEqual(0.3f, corr_matrix[2, 1]);
			Assert.AreEqual(1f,   corr_matrix[2, 2]);
			reader2.Close();

			// clean up
			File.Delete(filename);
		}
Exemplo n.º 10
0
        public void TestAddEntity()
        {
            // create a test CorrelationMatrix
            var matrix = new SymmetricCorrelationMatrix(3);

            matrix[0, 0] = 1f;
            matrix[0, 2] = 0.2f;
            matrix[1, 1] = 1f;
            matrix[1, 2] = 0.3f;
            matrix[2, 1] = 0.3f;
            matrix[2, 2] = 1f;

            // test
            Assert.AreEqual(3, matrix.NumberOfRows);
            matrix.AddEntity(3);
            Assert.AreEqual(4, matrix.NumberOfRows);
        }
Exemplo n.º 11
0
        public void TestSumUp()
        {
            // create a test CorrelationMatrix
            var matrix = new SymmetricCorrelationMatrix(3);

            matrix[0, 0] = 1f;
            matrix[0, 1] = 0.1f;
            matrix[0, 2] = 0.2f;
            matrix[1, 0] = 0.1f;
            matrix[1, 1] = 1f;
            matrix[1, 2] = 0.3f;
            matrix[2, 0] = 0.2f;
            matrix[2, 1] = 0.3f;
            matrix[2, 2] = 1f;

            // test
            Assert.AreEqual(0.3f, matrix.SumUp(0, new int[] { 1, 2 }), 0.00001);
        }
Exemplo n.º 12
0
        public void TestGetNearestNeighbors()
        {
            // create a test CorrelationMatrix
            var matrix = new SymmetricCorrelationMatrix(3);

            matrix[0, 0] = 1f;
            matrix[0, 1] = 0.1f;
            matrix[0, 2] = 0.2f;
            matrix[1, 0] = 0.1f;
            matrix[1, 1] = 1f;
            matrix[1, 2] = 0.3f;
            matrix[2, 0] = 0.2f;
            matrix[2, 1] = 0.3f;
            matrix[2, 2] = 1f;

            // test
            IList <int> nn_test = matrix.GetNearestNeighbors(2, 2);
            IList <int> nn_sol  = new int[] { 1, 0 };

            Assert.AreEqual(nn_sol, nn_test);
        }
Exemplo n.º 13
0
        public void TestReadCorrelationMatrix()
        {
            // create test object
            const string filename = "correlation_matrix.txt";
            var          writer   = new StreamWriter(filename);

            writer.WriteLine(3);
            writer.WriteLine("0 1 0.1");
            writer.WriteLine("0 2 0.2");
            writer.WriteLine("1 2 0.3");
            writer.Close();

            var reader      = new StreamReader(filename);
            var corr_matrix = new SymmetricCorrelationMatrix(0);

            corr_matrix.ReadSymmetricCorrelationMatrix(reader);
            Assert.AreEqual(1f, corr_matrix[0, 0]);
            Assert.AreEqual(1f, corr_matrix[1, 1]);
            Assert.AreEqual(1f, corr_matrix[2, 2]);

            Assert.AreEqual(0.1f, corr_matrix[0, 1]);
            Assert.AreEqual(0.1f, corr_matrix[1, 0]);

            Assert.AreEqual(0.2f, corr_matrix[0, 2]);
            Assert.AreEqual(0.2f, corr_matrix[2, 0]);

            Assert.AreEqual(0.3f, corr_matrix[1, 2]);
            Assert.AreEqual(0.3f, corr_matrix[2, 1]);


            // TODO test Exception
            // test with wrong format

            // close streams an delete the text file
            reader.Close();
            //File.Delete(filename);
        }
Exemplo n.º 14
0
 /// <summary>Constructor</summary>
 /// <param name="item_correlation">the similarity measure to use for diversification</param>
 public SequentialDiversification(SymmetricCorrelationMatrix item_correlation)
 {
     ItemCorrelations = item_correlation;
 }
		public void TestGetNearestNeighbors()
		{
			// create a test CorrelationMatrix
			var matrix = new SymmetricCorrelationMatrix(3);
			matrix[0, 0] = 1f;
			matrix[0, 1] = 0.1f;
			matrix[0, 2] = 0.2f;
			matrix[1, 0] = 0.1f;
			matrix[1, 1] = 1f;
			matrix[1, 2] = 0.3f;
			matrix[2, 0] = 0.2f;
			matrix[2, 1] = 0.3f;
			matrix[2, 2] = 1f;

			// test
			IList<int> nn_test = matrix.GetNearestNeighbors(2, 2);
			IList<int> nn_sol = new int[]{ 1, 0 };
			Assert.AreEqual(nn_sol, nn_test);
		}
		public void TestGetPositivelyCorrelatedEntities()
		{
			// create a test CorrelationMatrix
			var matrix = new SymmetricCorrelationMatrix(3);
			matrix[0, 0] = 1f;
			matrix[0, 1] = 0.1f;
			matrix[0, 2] = -0.2f;
			matrix[1, 0] = 0.1f;
			matrix[1, 1] = 1f;
			matrix[1, 2] = 0.3f;
			matrix[2, 0] = -0.2f;
			matrix[2, 1] = 0.3f;
			matrix[2, 2] = 1f;

			Assert.AreEqual(1f, matrix[0, 0]);
			Assert.AreEqual(0.3f, matrix[1, 2]);

			// test
			IList<int> cor_entities_list = matrix.GetPositivelyCorrelatedEntities(2);
			int[] cor_entities = new int[1];
			cor_entities_list.CopyTo(cor_entities, 0);
			int[] pos_cor_entities = { 1 };
			Assert.AreEqual(pos_cor_entities, cor_entities);
		}
		public void TestSumUp()
		{
			// create a test CorrelationMatrix
			var matrix = new SymmetricCorrelationMatrix(3);
			matrix[0, 0] = 1f;
			matrix[0, 1] = 0.1f;
			matrix[0, 2] = 0.2f;
			matrix[1, 0] = 0.1f;
			matrix[1, 1] = 1f;
			matrix[1, 2] = 0.3f;
			matrix[2, 0] = 0.2f;
			matrix[2, 1] = 0.3f;
			matrix[2, 2] = 1f;

			// test
			Assert.AreEqual(0.3f, matrix.SumUp(0, new int[] {1, 2}), 0.00001);
		}
		public void TestAddEntity()
		{
			// create a test CorrelationMatrix
			var matrix = new SymmetricCorrelationMatrix(3);

			matrix[0, 0] = 1f;
			matrix[0, 2] = 0.2f;
			matrix[1, 1] = 1f;
			matrix[1, 2] = 0.3f;
			matrix[2, 1] = 0.3f;
			matrix[2, 2] = 1f;

			// test
			Assert.AreEqual(3, matrix.NumberOfRows);
			matrix.AddEntity(3);
			Assert.AreEqual(4, matrix.NumberOfRows);
		}
        /// <summary>Compute the intra-set similarity of an item collection</summary>
        /// <param name="items">a collection of items</param>
        /// <param name="item_correlation">the similarity measure to use</param>
        /// <returns>the intra-set similarity of the collection</returns>
        public static float Similarity(ICollection<int> items, SymmetricCorrelationMatrix item_correlation)
        {
            double similarity = 0;
            for (int i = 0; i < items.Count; i++)
                for (int j = i + 1; j < items.Count; j++)
                    similarity += item_correlation[i, j];

            return (float) similarity;
        }
 /// <summary>Constructor</summary>
 /// <param name="item_correlation">the similarity measure to use for diversification</param>
 public SequentialDiversification(SymmetricCorrelationMatrix item_correlation)
 {
     ItemCorrelations = item_correlation;
 }