/// <summary> /// Determines whether the specified target has the /// expected state. /// </summary> /// <param name="target">The target.</param> /// <param name="expectedFeatureVariables"> /// The expected feature variables.</param> /// <param name="expectedResponseVariable"> /// The expected response variable.</param> /// <param name="expectedCategoricalEntailments"> /// The expected categorical entailments.</param> /// <exception cref="AssertFailedException"> /// Target categorical entailment ensemble classifier /// has an unexpected state. /// </exception> public static void IsStateAsExpected( CategoricalEntailmentEnsembleClassifier target, IReadOnlyList <CategoricalVariable> expectedFeatureVariables, CategoricalVariable expectedResponseVariable, IReadOnlyList <CategoricalEntailment> expectedCategoricalEntailments) { if (target.FeatureVariables.Count != expectedFeatureVariables.Count) { throw new AssertFailedException( "The list of target feature variables has an unexpected count."); } for (int i = 0; i < expectedFeatureVariables.Count; i++) { CategoricalVariableAssert.AreEqual( expectedFeatureVariables[i], target.FeatureVariables[i]); } CategoricalVariableAssert.AreEqual( expectedResponseVariable, target.ResponseVariable); ListAssert <CategoricalEntailment> .ContainSameItems( expected : new List <CategoricalEntailment>(expectedCategoricalEntailments), actual : new List <CategoricalEntailment>(target.Entailments), areEqual : CategoricalEntailmentAssert.AreEqual); }
/// <summary> /// Verifies that specified categorical entailment ensemble /// classifiers are equal. /// </summary> /// <param name="expected">The expected categorical entailment ensemble classifier.</param> /// <param name="actual">The actual categorical entailment ensemble classifier.</param> /// <exception cref="AssertFailedException"> /// One categorical entailment is <b>null</b>, the other is not.<br/> /// -or- <br/> /// Categorical entailment ensemble classifiers have different feature variables.<br/> /// -or- <br/> /// Categorical entailment ensemble classifiers have different response variable.<br/> /// -or- <br/> /// Categorical entailment ensemble classifiers have different categorical entailments. /// </exception> public static void AreEqual( CategoricalEntailmentEnsembleClassifier expected, CategoricalEntailmentEnsembleClassifier actual) { if (null == expected && null == actual) { return; } if (((null == expected) && (null != actual)) || ((null != expected) && (null == actual))) { throw new AssertFailedException( "One categorical entailment ensemble classifier is null, the other is not."); } if (expected.FeatureVariables.Count != actual.FeatureVariables.Count) { throw new AssertFailedException( "The categorical entailment ensemble classifiers have different feature variables."); } for (int i = 0; i < expected.FeatureVariables.Count; i++) { CategoricalVariableAssert.AreEqual( expected.FeatureVariables[i], actual.FeatureVariables[i]); } CategoricalVariableAssert.AreEqual( expected.ResponseVariable, actual.ResponseVariable); ListAssert <CategoricalEntailment> .ContainSameItems( expected : new List <CategoricalEntailment>(expected.Entailments), actual : new List <CategoricalEntailment>(actual.Entailments), areEqual : CategoricalEntailmentAssert.AreEqual); }
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); }