Example #1
0
        /// <summary>
        /// Evaluates the samples with a given number of partitions.
        /// </summary>
        /// <param name="samples">The samples to train and test.</param>
        /// <param name="partitions">The number of folds.</param>
        public void Evaluate(IObjectStream <NameSample> samples, int partitions)
        {
            // Note: The name samples need to be grouped on a document basis.

            var partitioner = new CrossValidationPartitioner <DocumentSample>(new NameToDocumentSampleStream(samples),
                                                                              partitions);

            while (partitioner.HasNext)
            {
                var trainingSampleStream = partitioner.Next();

                var model = NameFinderME.Train(
                    languageCode,
                    type,
                    new DocumentToNameSampleStream(trainingSampleStream),
                    parameters,
                    factory);

                // do testing
                var evaluator = new TokenNameFinderEvaluator(new NameFinderME(model), listeners);

                evaluator.Evaluate(new DocumentToNameSampleStream(trainingSampleStream.GetTestSampleStream()));

                FMeasure.MergeInto(evaluator.FMeasure);
            }
        }
Example #2
0
        /// <summary>
        /// Processes the specified sample stream.
        /// </summary>
        /// <param name="sampleStream">The sample stream.</param>
        /// <returns>The computed f-measure of the sample stream.</returns>
        protected override FMeasure <Span> Process(CrossValidationPartitioner <Parse> .TrainingSampleStream sampleStream)
        {
            ParserModel model;

            switch (parserType)
            {
            case ParserType.Chunking:
                model = Chunking.Parser.Train(languageCode, sampleStream, headRules, parameters);
                break;

            case ParserType.TreeInsert:
                model = TreeInsert.Parser.Train(languageCode, sampleStream, headRules, parameters);
                break;

            default:
                throw new InvalidOperationException("Unexpected parser type.");
            }


            var evaluator = new ParserEvaluator(ParserFactory.Create(model), monitors);

            evaluator.Evaluate(sampleStream);

            return(evaluator.FMeasure);
        }
Example #3
0
        /// <summary>
        /// Evaluates the samples with a given number of partitions.
        /// </summary>
        /// <param name="samples">The samples to train and test.</param>
        /// <param name="partitions">The number of folds.</param>
        public void Evaluate(IObjectStream <T> samples, int partitions)
        {
            var partitioner = new CrossValidationPartitioner <T>(samples, partitions);

            while (partitioner.HasNext)
            {
                var ps = partitioner.Next();

                var fm = Process(ps);

                FMeasure.MergeInto(fm);
            }
        }
Example #4
0
        /// <summary>
        /// Evaluates the specified chunk samples.
        /// </summary>
        /// <param name="samples">The chunk samples to be evaluated.</param>
        /// <param name="partitions">The partitions (folds).</param>
        public void Evaluate(IObjectStream<ChunkSample> samples, int partitions) {
            var partitioner = new CrossValidationPartitioner<ChunkSample>(samples, partitions);

            while (partitioner.HasNext) {

                var trainingSampleStream = partitioner.Next();

                var model = ChunkerME.Train(languageCode, trainingSampleStream, parameters, chunkerFactory);

                var evaluator = new ChunkerEvaluator(new ChunkerME(model), listeners);

                evaluator.Evaluate(trainingSampleStream.GetTestSampleStream());

                FMeasure.MergeInto(evaluator.FMeasure);
            }
        }
        /// <summary>
        /// Evaluates the specified chunk samples.
        /// </summary>
        /// <param name="samples">The chunk samples to be evaluated.</param>
        /// <param name="partitions">The partitions (folds).</param>
        public void Evaluate(IObjectStream <ChunkSample> samples, int partitions)
        {
            var partitioner = new CrossValidationPartitioner <ChunkSample>(samples, partitions);

            while (partitioner.HasNext)
            {
                var trainingSampleStream = partitioner.Next();

                var model = ChunkerME.Train(languageCode, trainingSampleStream, parameters, chunkerFactory);

                var evaluator = new ChunkerEvaluator(new ChunkerME(model), listeners);

                evaluator.Evaluate(trainingSampleStream.GetTestSampleStream());

                FMeasure.MergeInto(evaluator.FMeasure);
            }
        }
Example #6
0
        public void TestFailSafety()
        {
            var partitioner = new CrossValidationPartitioner <String>(new[] {
                "01", "02", "03", "04"
            }, 4);

            // Test that iterator from previous partition fails
            // if it is accessed
            var firstTraining = partitioner.Next();

            Assert.AreEqual("02", firstTraining.Read());

            var secondTraining = partitioner.Next();

            try {
                firstTraining.Read();
                Assert.Fail();
            } catch (Exception) {}

            try {
                firstTraining.GetTestSampleStream();
                Assert.Fail();
            } catch (Exception) {}

            // Test that training iterator fails if there is a test iterator
            secondTraining.GetTestSampleStream();

            try {
                secondTraining.Read();
                Assert.Fail();
            } catch (Exception) {}

            // Test that test iterator from previous partition fails
            // if there is a new partition
            var thirdTraining = partitioner.Next();
            var thirdTest     = thirdTraining.GetTestSampleStream();

            Assert.True(partitioner.HasNext);
            partitioner.Next();

            try {
                thirdTest.Read();
                Assert.Fail();
            } catch (Exception) {}
        }
Example #7
0
        public void TestEmptyDataSet()
        {
            var partitioner = new CrossValidationPartitioner <string>(new string[] {}, 2);

            Assert.True(partitioner.HasNext);
            Assert.Null(partitioner.Next().Read());

            Assert.True(partitioner.HasNext);
            Assert.Null(partitioner.Next().Read());

            Assert.False(partitioner.HasNext);

            try {
                partitioner.Next();

                Assert.Fail("Ups, hasn't thrown one!");
            } catch (Exception) {
                // expected
            }
        }
Example #8
0
        public void Test3FoldCv()
        {
            var partitioner = new CrossValidationPartitioner <string>(new[] {
                "01", "02", "03", "04", "05", "06", "07", "08", "09", "10"
            }, 3);

            // first partition
            Assert.True(partitioner.HasNext);

            var firstTraining = partitioner.Next();

            Assert.AreEqual("02", firstTraining.Read());
            Assert.AreEqual("03", firstTraining.Read());
            Assert.AreEqual("05", firstTraining.Read());
            Assert.AreEqual("06", firstTraining.Read());
            Assert.AreEqual("08", firstTraining.Read());
            Assert.AreEqual("09", firstTraining.Read());
            Assert.Null(firstTraining.Read());

            var firstTest = firstTraining.GetTestSampleStream();

            Assert.AreEqual("01", firstTest.Read());
            Assert.AreEqual("04", firstTest.Read());
            Assert.AreEqual("07", firstTest.Read());
            Assert.AreEqual("10", firstTest.Read());
            Assert.Null(firstTest.Read());

            // second partition
            Assert.True(partitioner.HasNext);
            var secondTraining = partitioner.Next();

            Assert.AreEqual("01", secondTraining.Read());
            Assert.AreEqual("03", secondTraining.Read());
            Assert.AreEqual("04", secondTraining.Read());
            Assert.AreEqual("06", secondTraining.Read());
            Assert.AreEqual("07", secondTraining.Read());
            Assert.AreEqual("09", secondTraining.Read());
            Assert.AreEqual("10", secondTraining.Read());

            Assert.Null(secondTraining.Read());

            var secondTest = secondTraining.GetTestSampleStream();

            Assert.AreEqual("02", secondTest.Read());
            Assert.AreEqual("05", secondTest.Read());
            Assert.AreEqual("08", secondTest.Read());
            Assert.Null(secondTest.Read());

            // third partition
            Assert.True(partitioner.HasNext);
            var thirdTraining = partitioner.Next();

            Assert.AreEqual("01", thirdTraining.Read());
            Assert.AreEqual("02", thirdTraining.Read());
            Assert.AreEqual("04", thirdTraining.Read());
            Assert.AreEqual("05", thirdTraining.Read());
            Assert.AreEqual("07", thirdTraining.Read());
            Assert.AreEqual("08", thirdTraining.Read());
            Assert.AreEqual("10", thirdTraining.Read());
            Assert.Null(thirdTraining.Read());

            var thirdTest = thirdTraining.GetTestSampleStream();

            Assert.AreEqual("03", thirdTest.Read());
            Assert.AreEqual("06", thirdTest.Read());
            Assert.AreEqual("09", thirdTest.Read());
            Assert.Null(thirdTest.Read());

            Assert.False(partitioner.HasNext);
        }
Example #9
0
        public void ToStringTest()
        {
            var value = new CrossValidationPartitioner <string>(new string[] {}, 10).ToString();

            Assert.AreEqual("At partition 1 of 10.", value);
        }
        public void TestEmptyDataSet() {
            var partitioner = new CrossValidationPartitioner<string>(new string[] {}, 2);

            Assert.True(partitioner.HasNext);
            Assert.Null(partitioner.Next().Read());

            Assert.True(partitioner.HasNext);
            Assert.Null(partitioner.Next().Read());

            Assert.False(partitioner.HasNext);

            try {
                partitioner.Next();

                Assert.Fail("Ups, hasn't thrown one!");
            } catch (Exception) {
                // expected
            }
        }
        public void Test3FoldCV() {
            var partitioner = new CrossValidationPartitioner<string>(new[] {
                "01", "02", "03", "04", "05", "06", "07", "08", "09", "10"
            }, 3);

            // first partition
            Assert.True(partitioner.HasNext);

            var firstTraining = partitioner.Next();
            Assert.AreEqual("02", firstTraining.Read());
            Assert.AreEqual("03", firstTraining.Read());
            Assert.AreEqual("05", firstTraining.Read());
            Assert.AreEqual("06", firstTraining.Read());
            Assert.AreEqual("08", firstTraining.Read());
            Assert.AreEqual("09", firstTraining.Read());
            Assert.Null(firstTraining.Read());

            var firstTest = firstTraining.GetTestSampleStream();
            Assert.AreEqual("01", firstTest.Read());
            Assert.AreEqual("04", firstTest.Read());
            Assert.AreEqual("07", firstTest.Read());
            Assert.AreEqual("10", firstTest.Read());
            Assert.Null(firstTest.Read());

            // second partition
            Assert.True(partitioner.HasNext);
            var secondTraining = partitioner.Next();

            Assert.AreEqual("01", secondTraining.Read());
            Assert.AreEqual("03", secondTraining.Read());
            Assert.AreEqual("04", secondTraining.Read());
            Assert.AreEqual("06", secondTraining.Read());
            Assert.AreEqual("07", secondTraining.Read());
            Assert.AreEqual("09", secondTraining.Read());
            Assert.AreEqual("10", secondTraining.Read());

            Assert.Null(secondTraining.Read());

            var secondTest = secondTraining.GetTestSampleStream();

            Assert.AreEqual("02", secondTest.Read());
            Assert.AreEqual("05", secondTest.Read());
            Assert.AreEqual("08", secondTest.Read());
            Assert.Null(secondTest.Read());

            // third partition
            Assert.True(partitioner.HasNext);
            var thirdTraining = partitioner.Next();

            Assert.AreEqual("01", thirdTraining.Read());
            Assert.AreEqual("02", thirdTraining.Read());
            Assert.AreEqual("04", thirdTraining.Read());
            Assert.AreEqual("05", thirdTraining.Read());
            Assert.AreEqual("07", thirdTraining.Read());
            Assert.AreEqual("08", thirdTraining.Read());
            Assert.AreEqual("10", thirdTraining.Read());
            Assert.Null(thirdTraining.Read());

            var thirdTest = thirdTraining.GetTestSampleStream();

            Assert.AreEqual("03", thirdTest.Read());
            Assert.AreEqual("06", thirdTest.Read());
            Assert.AreEqual("09", thirdTest.Read());
            Assert.Null(thirdTest.Read());

            Assert.False(partitioner.HasNext);
        }
 public void ToStringTest() {
     var value = new CrossValidationPartitioner<string>(new string[] {}, 10).ToString();
     Assert.AreEqual("At partition 1 of 10.", value);
 }
        public void TestFailSafety() {
            var partitioner = new CrossValidationPartitioner<String>(new[] {
                "01", "02", "03", "04"
            }, 4);

            // Test that iterator from previous partition fails
            // if it is accessed
            var firstTraining = partitioner.Next();
            Assert.AreEqual("02", firstTraining.Read());

            var secondTraining = partitioner.Next();

            try {
                firstTraining.Read();
                Assert.Fail();
            } catch (Exception) {}

            try {
                firstTraining.GetTestSampleStream();
                Assert.Fail();
            } catch (Exception) {}

            // Test that training iterator fails if there is a test iterator
            secondTraining.GetTestSampleStream();

            try {
                secondTraining.Read();
                Assert.Fail();
            } catch (Exception) {}

            // Test that test iterator from previous partition fails
            // if there is a new partition
            var thirdTraining = partitioner.Next();
            var thirdTest = thirdTraining.GetTestSampleStream();

            Assert.True(partitioner.HasNext);
            partitioner.Next();

            try {
                thirdTest.Read();
                Assert.Fail();
            } catch (Exception) {}
        }
Example #14
0
 /// <summary>
 /// Processes the specified sample stream.
 /// </summary>
 /// <param name="sampleStream">The sample stream.</param>
 /// <returns>The computed f-mesure of the sample stream.</returns>
 protected abstract FMeasure <P> Process(CrossValidationPartitioner <T> .TrainingSampleStream sampleStream);