Time Series Parameter learning in C#

namespace BayesServer.HelpSamples
{
using System;
using System.Data.SqlClient;
using BayesServer.Data;
using BayesServer.Inference.RelevanceTree;
using BayesServer.Learning.Parameters;
public static class ParameterLearningTemporal
{
public static void Main()
{
var network = CreateNetworkStructure();
var x1 = network.Variables["X1"];
var x2 = network.Variables["X2"];
var learning = new ParameterLearning(network, new RelevanceTreeInferenceFactory());
var learningOptions = new ParameterLearningOptions();
learningOptions.TimeSeriesMode = TimeSeriesMode.Rolling;
string sqlServer = @"localhost\sqlexpress";
string database = "BayesServer";
string connectionString = string.Format(
@"Data Source={0};Initial Catalog={1};Integrated Security=True;", sqlServer, database);
IDataReaderCommand temporalDataReaderCommand = new DatabaseDataReaderCommand(
SqlClientFactory.Instance,
connectionString,
"Select [Case], Time, X1, X2 From TimeSeriesWalkthrough ORDER BY [Case], Time");
bool cacheDataInMemory = true;
if (cacheDataInMemory)
{
temporalDataReaderCommand = new DataTableDataReaderCommand(temporalDataReaderCommand.ExecuteReader());
}
var temporalReaderOptions = new TemporalReaderOptions("Case", "Time", TimeValueType.Index);
var temporalVariableReferences = new VariableReference[]
{
new VariableReference(x1, ColumnValueType.Value, x1.Name),
new VariableReference(x2, ColumnValueType.Value, x2.Name)
};
var evidenceReaderCommand = new EvidenceReaderCommand(
temporalDataReaderCommand,
temporalVariableReferences,
temporalReaderOptions);
var result = learning.Learn(evidenceReaderCommand, learningOptions);
Console.WriteLine("Log likelihood = {0}", result.LogLikelihood.Value);
}
private static Network CreateNetworkStructure()
{
var network = new Network();
var x1 = new Variable("X1", VariableValueType.Continuous);
var x2 = new Variable("X2", VariableValueType.Continuous);
var nodeX = new Node("X", new Variable[] { x1, x2 })
{
TemporalType = BayesServer.TemporalType.Temporal
};
network.Nodes.Add(nodeX);
for (int order = 1; order <= 4; order++)
{
network.Links.Add(new Link(nodeX, nodeX, order));
}
return network;
}
}
}