public void ThetasPropertyAfterTrainingReturnsTheSameThetasAsTrainerReturns()
        {
            // arrange
            var dataSetMock = new Mock <IDataSet <bool, double> >();

            dataSetMock.Setup(ds => ds.GetTrainingSamplesCount()).Returns(2);
            dataSetMock.Setup(ds => ds.GetData()).Returns(new[] { TrainingSample.Create(true, new[] { 0.0 }),
                                                                  TrainingSample.Create(false, new[] { 1.0 }) });

            const int    FeaturesCount           = 1;
            const double RegularizationParameter = 0.0;

            var classifier = new LogisticRegressionClassifier(FeaturesCount, RegularizationParameter);

            classifier.Train(dataSetMock.Object);

            var classifierTraining = new LogisticRegressionClassifierTraining(FeaturesCount, RegularizationParameter, dataSetMock.Object);
            var expectedThetas     = classifierTraining.Train();

            // act
            var thetas = classifier.Thetas;

            // assert
            Assert.IsTrue(expectedThetas.SequenceEqual(thetas));
        }
        public void TrainReturnsCorrectThetasForTestData1()
        {
            // arrange
            const int    FeaturesCount           = 2;
            const double RegularizationParameter = 0.0; // no regularization

            var classifierTraining = new LogisticRegressionClassifierTraining(FeaturesCount, RegularizationParameter, this.dataSet1);

            // act
            var thetas = classifierTraining.Train();

            // assert
            Assert.AreEqual(-25.160497465074084, thetas[0], Delta);
            Assert.AreEqual(0.20622413037584902, thetas[1], Delta);
            Assert.AreEqual(0.20146509204776417, thetas[2], Delta);
        }
        public void TrainReturnsCorrectThetasForTestData2UsingSixDegreesPolynomAndRegularizationParameterOne()
        {
            // arrange
            const int    Degree = 6;
            var          mappedFeaturesCount     = DataHelper.TwoMappedFeaturesToDegreeCount(Degree);
            const double RegularizationParameter = 1.0;

            var mappedDataSet2 = DataHelper.MapTwoFeaturesDataSetToDegree(this.dataSet2, Degree);

            var classifierTraining = new LogisticRegressionClassifierTraining(mappedFeaturesCount, RegularizationParameter, mappedDataSet2);

            // act
            var thetas = classifierTraining.Train();

            // assert
            Assert.AreEqual(1.2727257777291563, thetas[0], Delta);
            Assert.AreEqual(0.62535425095813046, thetas[1], Delta);
            Assert.AreEqual(1.1809815913524897, thetas[2], Delta);
            Assert.AreEqual(-2.019823757989518, thetas[3], Delta);
            Assert.AreEqual(-0.91748583789176419, thetas[4], Delta);
            Assert.AreEqual(-1.4316901766601973, thetas[5], Delta);
            Assert.AreEqual(0.12398226958728931, thetas[6], Delta);
            Assert.AreEqual(-0.36539570405212035, thetas[7], Delta);
            Assert.AreEqual(-0.35711892921468064, thetas[8], Delta);
            Assert.AreEqual(-0.17505537401554372, thetas[9], Delta);
            Assert.AreEqual(-1.458267839991064, thetas[10], Delta);
            Assert.AreEqual(-0.051039587950303174, thetas[11], Delta);
            Assert.AreEqual(-0.61573442413697599, thetas[12], Delta);
            Assert.AreEqual(-0.27467033331805246, thetas[13], Delta);
            Assert.AreEqual(-1.1927379097969517, thetas[14], Delta);
            Assert.AreEqual(-0.24230087297391839, thetas[15], Delta);
            Assert.AreEqual(-0.20588671185024385, thetas[16], Delta);
            Assert.AreEqual(-0.044782757804708882, thetas[17], Delta);
            Assert.AreEqual(-0.27781068196339476, thetas[18], Delta);
            Assert.AreEqual(-0.29530423532247418, thetas[19], Delta);
            Assert.AreEqual(-0.45626038474961511, thetas[20], Delta);
            Assert.AreEqual(-1.0433750496212086, thetas[21], Delta);
            Assert.AreEqual(0.027761239512917313, thetas[22], Delta);
            Assert.AreEqual(-0.2925082482769511, thetas[23], Delta);
            Assert.AreEqual(0.015549020302576095, thetas[24], Delta);
            Assert.AreEqual(-0.32745530880927648, thetas[25], Delta);
            Assert.AreEqual(-0.14387492070263289, thetas[26], Delta);
            Assert.AreEqual(-0.92456452390048494, thetas[27], Delta);
        }