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