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