Example #1
0
        public void TestRegression()
        {
            var dataTable = new DataTableBuilder();

            dataTable.AddColumn(ColumnType.Float, "value");
            dataTable.AddColumn(ColumnType.Float, "result", true);

            // simple linear relationship: result is twice value
            dataTable.AddRow(new object[] { 1f, 2f });
            dataTable.AddRow(new object[] { 2f, 4f });
            dataTable.AddRow(new object[] { 4f, 8f });
            dataTable.AddRow(new object[] { 8f, 16f });
            var index = dataTable.Build();

            var classifier = index.CreateLinearRegressionTrainer(_lap);
            //var theta = classifier.Solve();
            //var predictor = theta.CreatePredictor(_lap);

            //var prediction = predictor.Predict(3f);
            //Assert.IsTrue(Math.Round(prediction) == 6f);

            var theta      = classifier.GradientDescent(20, 0.01f);
            var predictor  = theta.CreatePredictor(_lap);
            var prediction = predictor.Predict(3f);

            Assert.IsTrue(Math.Round(prediction) == 6f);

            var prediction3 = predictor.Predict(new[] {
                new float[] { 10f },
                new float[] { 3f }
            });

            Assert.IsTrue(Math.Round(prediction3[1]) == 6f);
        }
Example #2
0
 /// <summary>
 /// Creates a new data table with the vectorised weighted classification outputs linked with each row's classification
 /// </summary>
 /// <param name="output">The output stream to write the table to (optional)</param>
 public IDataTable GetTable(Stream output = null)
 {
     if (_trainingData.Any())
     {
         var fieldCount = _trainingData.First().Item1.Length;
         var builder    = new DataTableBuilder();
         for (var i = 0; i < fieldCount; i++)
         {
             builder.AddColumn(ColumnType.Float, "v" + i);
         }
         builder.AddColumn(ColumnType.String, "target", true);
         foreach (var item in _trainingData)
         {
             var data = new object[fieldCount + 1];
             for (var i = 0; i < fieldCount; i++)
             {
                 data[i] = item.Item1[i];
             }
             data[fieldCount] = item.Item2;
             builder.AddRow(data);
         }
         return(builder.Build(output));
     }
     return(null);
 }
Example #3
0
        /// <summary>
        /// Converts the sparse vectors to a data table
        /// </summary>
        /// <param name="stream">Optional stream to write the data table to</param>
        public IDataTable ConvertToTable(Stream stream = null)
        {
            var max       = GetMaximumIndex();
            var dataTable = new DataTableBuilder();

            for (var i = 0; i < max; i++)
            {
                dataTable.AddColumn(ColumnType.Float, "term " + i.ToString());
            }
            dataTable.AddColumn(ColumnType.String, "classification", true);

            foreach (var item in Classification)
            {
                var data = new object[max + 1];
                for (var i = 0; i < max; i++)
                {
                    data[i] = 0f;
                }
                foreach (var index in item.Data)
                {
                    data[index.Index] = index.Weight;
                }
                data[max] = item.Name;
                dataTable.AddRow(data);
            }

            return(dataTable.Build(stream));
        }
Example #4
0
 public void AddRow(IEnumerable <object> row)
 {
     _dataTable.AddRow(row);
     ++_rowCount;
     if ((_rowCount % DataTable.BLOCK_SIZE) == 0)
     {
         _Write();
     }
 }
Example #5
0
        public IRow AddRow(IRow row)
        {
            var ret = _dataTableBuilder.AddRow(row);

            ++_rowCount;
            if (_rowCount % _dataTableBuilder.BlockSize == 0)
            {
                _Write();
            }
            return(ret);
        }
Example #6
0
        public IRow AddRow(IRow row)
        {
            var ret = _dataTableBuilder.AddRow(row);

            ++_rowCount;
            if ((_rowCount % DataTable.BLOCK_SIZE) == 0)
            {
                _Write();
            }
            return(ret);
        }
Example #7
0
        public void TestLogisticRegression()
        {
            var dataTable = new DataTableBuilder();

            dataTable.AddColumn(ColumnType.Float, "hours");
            dataTable.AddColumn(ColumnType.Boolean, "pass", true);

            // sample data from: https://en.wikipedia.org/wiki/Logistic_regression
            dataTable.AddRow(new object[] { 0.5f, false });
            dataTable.AddRow(new object[] { 0.75f, false });
            dataTable.AddRow(new object[] { 1f, false });
            dataTable.AddRow(new object[] { 1.25f, false });
            dataTable.AddRow(new object[] { 1.5f, false });
            dataTable.AddRow(new object[] { 1.75f, false });
            dataTable.AddRow(new object[] { 1.75f, true });
            dataTable.AddRow(new object[] { 2f, false });
            dataTable.AddRow(new object[] { 2.25f, true });
            dataTable.AddRow(new object[] { 2.5f, false });
            dataTable.AddRow(new object[] { 2.75f, true });
            dataTable.AddRow(new object[] { 3f, false });
            dataTable.AddRow(new object[] { 3.25f, true });
            dataTable.AddRow(new object[] { 3.5f, false });
            dataTable.AddRow(new object[] { 4f, true });
            dataTable.AddRow(new object[] { 4.25f, true });
            dataTable.AddRow(new object[] { 4.5f, true });
            dataTable.AddRow(new object[] { 4.75f, true });
            dataTable.AddRow(new object[] { 5f, true });
            dataTable.AddRow(new object[] { 5.5f, true });
            var index = dataTable.Build();

            var trainer      = index.CreateLogisticRegressionTrainer(_lap);
            var theta        = trainer.GradientDescent(1000, 0.1f);
            var predictor    = theta.CreatePredictor(_lap);
            var probability1 = predictor.Predict(2f);

            Assert.IsTrue(probability1 < 0.5f);

            var probability2 = predictor.Predict(4f);

            Assert.IsTrue(probability2 >= 0.5f);

            var probability3 = predictor.Predict(new[] {
                new float[] { 1f },
                new float[] { 2f },
                new float[] { 3f },
                new float[] { 4f },
                new float[] { 5f },
            });

            Assert.IsTrue(probability3[0] <= 0.5f);
            Assert.IsTrue(probability3[1] <= 0.5f);
            Assert.IsTrue(probability3[2] >= 0.5f);
            Assert.IsTrue(probability3[3] >= 0.5f);
            Assert.IsTrue(probability3[4] >= 0.5f);
        }
Example #8
0
 public void AddRow()
 {
     _builder.AddRow();
 }