Esempio n. 1
0
        public void GetCategoricalEntailmentEnsembleClassifierTest()
        {
            // state is null
            {
                string parameterName = "state";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: null,
                        featureVariables: testableContext.FeatureVariables,
                        responseVariable: testableContext.ResponseVariable);
                },
                    expectedType: typeof(ArgumentNullException),
                    expectedPartialMessage:
                    ArgumentExceptionAssert.NullPartialMessage,
                    expectedParameterName: parameterName);
            }

            // state has wrong count
            {
                string STR_EXCEPT_CEE_INVALID_STATE_COUNT
                    = ImplementationServices.GetResourceString(
                          "STR_EXCEPT_CEE_INVALID_STATE_COUNT");

                string parameterName = "state";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: DoubleMatrix.Dense(1, 8),
                        featureVariables: testableContext.FeatureVariables,
                        responseVariable: testableContext.ResponseVariable);
                },
                    expectedType: typeof(ArgumentException),
                    expectedPartialMessage: STR_EXCEPT_CEE_INVALID_STATE_COUNT,
                    expectedParameterName: parameterName);
            }

            // featureVariables is null
            {
                string parameterName = "featureVariables";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: DoubleMatrix.Dense(1, 9,
                                                  new double[9] {
                        0, 0, 0, 1, 1, 1, 1, 0, 1.0
                    }),
                        featureVariables: null,
                        responseVariable: testableContext.ResponseVariable);
                },
                    expectedType: typeof(ArgumentNullException),
                    expectedPartialMessage:
                    ArgumentExceptionAssert.NullPartialMessage,
                    expectedParameterName: parameterName);
            }

            // featureVariables has wrong count
            {
                string STR_EXCEPT_CEE_MUST_HAVE_SAME_FEATURES_COUNT
                    = ImplementationServices.GetResourceString(
                          "STR_EXCEPT_CEE_MUST_HAVE_SAME_FEATURES_COUNT");

                string parameterName = "featureVariables";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: DoubleMatrix.Dense(1, 9,
                                                  new double[9] {
                        0, 0, 0, 1, 1, 1, 1, 0, 1.0
                    }),
                        featureVariables: new List <CategoricalVariable>(),
                        responseVariable: testableContext.ResponseVariable);
                },
                    expectedType: typeof(ArgumentException),
                    expectedPartialMessage: STR_EXCEPT_CEE_MUST_HAVE_SAME_FEATURES_COUNT,
                    expectedParameterName: parameterName);
            }

            // featureVariables contains a variable having wrong number of categories
            {
                string STR_EXCEPT_CEE_INVALID_FEATURE_CATEGORIES_COUNT
                    = ImplementationServices.GetResourceString(
                          "STR_EXCEPT_CEE_INVALID_FEATURE_CATEGORIES_COUNT");

                string parameterName = "featureVariables";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: DoubleMatrix.Dense(1, 9,
                                                  new double[9] {
                        0, 0, 0, 1, 1, 1, 1, 0, 1.0
                    }),
                        featureVariables: new List <CategoricalVariable>()
                    {
                        new CategoricalVariable("F")
                        {
                            { 0.0, "A" }, 1.0
                        }
                    },
                        responseVariable: testableContext.ResponseVariable);
                },
                    expectedType: typeof(ArgumentException),
                    expectedPartialMessage: STR_EXCEPT_CEE_INVALID_FEATURE_CATEGORIES_COUNT,
                    expectedParameterName: parameterName);
            }

            // responseVariable is null
            {
                string parameterName = "responseVariable";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: DoubleMatrix.Dense(1, 9,
                                                  new double[9] {
                        0, 0, 0, 1, 1, 1, 1, 0, 1.0
                    }),
                        featureVariables: testableContext.FeatureVariables,
                        responseVariable: null);
                },
                    expectedType: typeof(ArgumentNullException),
                    expectedPartialMessage:
                    ArgumentExceptionAssert.NullPartialMessage,
                    expectedParameterName: parameterName);
            }

            // responseVariable has a wrong number of categories
            {
                string STR_EXCEPT_CEE_INVALID_RESPONSE_CATEGORIES_COUNT
                    = ImplementationServices.GetResourceString(
                          "STR_EXCEPT_CEE_INVALID_RESPONSE_CATEGORIES_COUNT");

                string parameterName = "responseVariable";

                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                ArgumentExceptionAssert.Throw(
                    () =>
                {
                    context.GetCategoricalEntailmentEnsembleClassifier(
                        state: DoubleMatrix.Dense(1, 9,
                                                  new double[9] {
                        0, 0, 0, 1, 1, 1, 1, 0, 1.0
                    }),
                        featureVariables: testableContext.FeatureVariables,
                        responseVariable: new CategoricalVariable("R")
                    {
                        { 0.0, "A" }
                    });
                },
                    expectedType: typeof(ArgumentException),
                    expectedPartialMessage: STR_EXCEPT_CEE_INVALID_RESPONSE_CATEGORIES_COUNT,
                    expectedParameterName: parameterName);
            }

            // valid input
            {
                var testableContext = TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

                var context = testableContext.Context;

                var actual = context.GetCategoricalEntailmentEnsembleClassifier(
                    state: DoubleMatrix.Dense(1, 9,
                                              new double[9] {
                    0, 0, 0, 1, 1, 1, 1, 0, .99
                }),
                    featureVariables: testableContext.FeatureVariables,
                    responseVariable: testableContext.ResponseVariable);

                var expected =
                    new CategoricalEntailmentEnsembleClassifier(
                        featureVariables: testableContext.FeatureVariables,
                        responseVariable: testableContext.ResponseVariable);

                expected.Add(
                    new CategoricalEntailment(
                        featureVariables: testableContext.FeatureVariables,
                        responseVariable: testableContext.ResponseVariable,
                        featurePremises: new List <SortedSet <double> >()
                {
                    new SortedSet <double>()
                    {
                        3.0, 4.0, 5.0
                    }
                },
                        responseConclusion: 0.0,
                        truthValue: .99));

                ListAssert <CategoricalEntailment> .ContainSameItems(
                    expected : new List <CategoricalEntailment>(expected.Entailments),
                    actual : new List <CategoricalEntailment>(actual.Entailments),
                    areEqual : CategoricalEntailmentAssert.AreEqual);
            }
        }
Esempio n. 2
0
        public void RunTest()
        {
            var optimizer = new SystemPerformanceOptimizer();

            // Create the context.
            var testableContext =
                TestableCategoricalEntailmentEnsembleOptimizationContext01.Get();

            var context = testableContext.Context;

            context.TraceExecution = true;

            // Set optimization parameters.
            int    sampleSize = 3600;
            double rarity     = 0.01;

            // Solve the problem.
            var results = optimizer.Optimize(
                context,
                rarity,
                sampleSize);

            Assert.AreEqual(
                expected: true,
                actual: results.HasConverged);

            var expectedClassifier =
                new CategoricalEntailmentEnsembleClassifier(
                    featureVariables: testableContext.FeatureVariables,
                    responseVariable: testableContext.ResponseVariable);

            expectedClassifier.Add(
                featurePremises: new List <SortedSet <double> >(1)
            {
                new SortedSet <double>()
                {
                    0.0, 1.0, 2.0
                }
            },
                responseConclusion: 0.0,
                truthValue: 1.0);

            expectedClassifier.Add(
                featurePremises: new List <SortedSet <double> >(1)
            {
                new SortedSet <double>()
                {
                    3.0, 4.0, 5.0
                }
            },
                responseConclusion: 1.0,
                truthValue: 1.0);

            var actualClassifier =
                new CategoricalEntailmentEnsembleClassifier(
                    featureVariables: testableContext.FeatureVariables,
                    responseVariable: testableContext.ResponseVariable);

            actualClassifier.Add(
                featurePremises: new List <SortedSet <double> >(1)
            {
                new SortedSet <double>()
                {
                    0.0, 1.0, 2.0
                }
            },
                responseConclusion: 0.0,
                truthValue: 1.0);

            actualClassifier.Add(
                context.GetCategoricalEntailmentEnsembleClassifier(
                    state: results.OptimalState,
                    featureVariables: testableContext.FeatureVariables,
                    responseVariable: testableContext.ResponseVariable)
                .Entailments[0]);

            var expectedTrainedEntailment = expectedClassifier.Entailments[1];
            var actualTrainedEntailment   = actualClassifier.Entailments[1];

            Assert.IsTrue(
                expectedTrainedEntailment.FeaturePremises[0]
                .IsSubsetOf(
                    actualTrainedEntailment.FeaturePremises[0]));

            Assert.AreEqual(
                expected: expectedTrainedEntailment.ResponseConclusion,
                actual: actualTrainedEntailment.ResponseConclusion,
                DoubleMatrixTest.Accuracy);

            Assert.AreEqual(
                expected: testableContext.OptimalPerformance,
                actual: results.OptimalPerformance,
                DoubleMatrixTest.Accuracy);
        }