private static int PredictBagLabel(IClassifier<SparseBag> classifier, BagTestData[] bags, SparseBag bagToTest)
        {
            var sparseBags = BagTestData.ToSparseBags(bags);

            classifier.Train(sparseBags);

            return classifier.PredictWinner(bagToTest);
        }
        static internal IEnumerable<SparseBag> ToSparseBags(BagTestData[] bags)
        {
            var sparseBags = new SparseBag[bags.Length];
            for (var bagId = 0; bagId < sparseBags.Length; bagId++)
            {
                var istances = new IDictionary<int, float>[bags[bagId].Points.Length];
                for (var pointId = 0; pointId < bags[bagId].Points.Length; pointId++)
                {
                    var j = 1;
                    var features = (from f in bags[bagId].Points[pointId] select f).ToDictionary(i => (j++), i => (float)i);
                    istances[pointId] = features;
                }

                sparseBags[bagId] = new SparseBag(bags[bagId].Label, bags[bagId].Name.ToString(), istances);
            }
            return sparseBags;
        }
        private static int PredictBagLabel(BagTestData[] bags, SparseBag bagToTest, int M)
        {
            var sparseBags = BagTestData.ToSparseBags(bags);

            var citationNearestNeighbor = ClassifierFactory.GetMultiInstanceClassifier("rbfn:distance=hausdorff,M=" + M+",sigma=1");

            citationNearestNeighbor.Train(sparseBags);

            return citationNearestNeighbor.PredictWinner(bagToTest);
        }
        private static int PredictBagLabel(BagTestData[] bags, SparseBag bagToTest, int K)
        {
            var sparseBags = BagTestData.ToSparseBags(bags);

            // When
            var citationNearestNeighbor = ClassifierFactory.GetMultiInstanceClassifier("nn:distance=hausdorff,K=" + K);

            citationNearestNeighbor.Train(sparseBags);

            return citationNearestNeighbor.PredictWinner(bagToTest);
        }
        public void PredictWinner_NegativeWins_EmptyKnowledge()
        {
            // Given
            var bags = new BagTestData[0];
            var bagToTest = new SparseBag(1, "1", new[]
                                                      {
                                                          new Dictionary<int, float> {{1, 22.8529f}, {2, 22.6664f}},
                                                          new Dictionary<int, float> {{1, 59.1986f}, {2, 34.5393f}}
                                                      });

            int predictedLabelForOne = PredictBagLabel(bags, bagToTest, 2);


            // Then
            Assert.That(predictedLabelForOne, Is.EqualTo(-1));
        }