コード例 #1
0
ファイル: BPM.cs プロジェクト: mesgarpour/ERMER
    private Variable <Vector> InitialiseWeights(
        DistributionType distributionType,
        DistributionName distributionName,
        int dimension,
        string[] hyperParameters)
    {
        switch (distributionName)
        {
        case DistributionName.GaussianDefault:
            return(Variable.Random(new VectorGaussian(
                                       Vector.Zero(dimension),
                                       PositiveDefiniteMatrix.Identity(dimension))).Named(
                       "w." + distributionType.ToString()));

        case DistributionName.GaussianInit:
            return(Variable <Vector> .Random(
                       Variable.New <VectorGaussian>().Named(
                           "w." + distributionType.ToString())));

        default:
            TraceListeners.Log(TraceEventType.Error, 0,
                               "Invalid distribution name: " + distributionName.ToString(), true, true);
            return(null);
        }
    }
コード例 #2
0
    public override void Train(
        string outputModelFileName,
        int iterationCount,
        bool computeModelEvidence,
        int batchCount,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        double noise)
    {
        TraceListeners.Log(TraceEventType.Warning, 0,
                           "Advanced setting will not be used: " +
                           "distributionName, inferenceEngineAlgorithm & noise.", false, true);

        // Validate
        _validate.Train(
            outputModelFileName: outputModelFileName,
            iterationCount: iterationCount,
            batchCount: batchCount);

        Train(
            outputModelFileName,
            iterationCount,
            computeModelEvidence,
            batchCount);
    }
コード例 #3
0
ファイル: BPM.cs プロジェクト: mesgarpour/ERMER
    public override void Train(
        string outputModelFileName,
        int iterationCount,
        bool computeModelEvidence,
        int batchCount,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        double noise)
    {
        TraceListeners.Log(TraceEventType.Warning, 0,
                           "Advanced setting will not be used: " +
                           "batchCount.", false, true);

        // Validate
        _validate.Train(
            outputModelFileName: outputModelFileName,
            iterationCount: iterationCount,
            batchCount: batchCount);

        // The inference engine
        _engine[DistributionType.Prior] = SetInferenceEngine(
            inferenceEngineAlgorithm, iterationCount);

        // Initialise prior weights
        _w[DistributionType.Prior] = InitialiseWeights(
            distributionType: DistributionType.Prior,
            distributionName: distributionName,
            dimension: _numFeatures,
            hyperParameters: null);

        // BPM
        BayesPointMachine(_x, _y, _w[DistributionType.Prior], noise);
    }
コード例 #4
0
ファイル: Models.cs プロジェクト: mesgarpour/ERMER
 public virtual void Predict(
     string inputModelFileName,
     DistributionName distributionName           = DistributionName.Null,
     InferenceAlgorithm inferenceEngineAlgorithm = InferenceAlgorithm.Null,
     double noise = 0)
 {
     TraceListeners.Log(TraceEventType.Information, 0,
                        "Predict...", false, true);
     _model.Predict(
         inputModelFileName,
         distributionName,
         inferenceEngineAlgorithm,
         noise);
 }
コード例 #5
0
ファイル: Models.cs プロジェクト: mesgarpour/ERMER
 public virtual IDictionary <string, double> PredictInstance(
     string inputModelFileName,
     DistributionName distributionName,
     InferenceAlgorithm inferenceEngineAlgorithm,
     int instance,
     double noise = 0)
 {
     TraceListeners.Log(TraceEventType.Information, 0,
                        "PredictInstance...", false, true);
     return(_model.PredictInstance(
                inputModelFileName,
                distributionName,
                inferenceEngineAlgorithm,
                instance,
                noise));
 }
コード例 #6
0
ファイル: BPM.cs プロジェクト: mesgarpour/ERMER
    private Variable <Vector> InferWeights(
        DistributionType distributionType,
        DistributionName distributionName,
        string[] hyperParameters)
    {
        switch (distributionName)
        {
        case DistributionName.GaussianDefault:
            VectorGaussian wObserved = _engine[distributionType].Infer <VectorGaussian>(_w[DistributionType.Prior]);
            return(Variable.Random(wObserved).Named("w." + distributionType.ToString()));

        default:
            TraceListeners.Log(TraceEventType.Error, 0,
                               "Invalid distribution name: " + distributionName.ToString(), true, true);
            return(null);
        }
    }
コード例 #7
0
ファイル: BPM.cs プロジェクト: mesgarpour/ERMER
    public override void Predict(
        string inputModelFileName,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        double noise)
    {
        // Validate
        // _validate.Predict(inputModelFileName);

        // Initialise
        List <IDictionary <string, double> > yPredicDistrib = new List <IDictionary <string, double> >();
        List <string>        yPredicLabel = new List <string>();
        VariableArray <bool> yTest        = Variable.Array <bool>(new Range(_numObservations)).
                                            Named("y." + _availableDatasetName.ToString()); // to do: correct the size

        Bernoulli[] yPredic;

        // The inference engine
        _engine[DistributionType.Posterior] = SetInferenceEngine(
            inferenceEngineAlgorithm, 1);

        // Infer postrior weights from training
        _w[DistributionType.Posterior] = InferWeights(
            distributionType: DistributionType.Posterior,
            distributionName: distributionName,
            hyperParameters: null);

        // BPM
        BayesPointMachine(_x, yTest, _w[DistributionType.Posterior], noise);

        // predict
        // _yPredicLabel = _engine[DistributionType.Posterior].Infer(_y);
        yPredic = _engine[DistributionType.Posterior].Infer <Bernoulli[]>(yTest);
        for (int i = 0; i < yPredic.Length; i++)
        {
            yPredicDistrib.Add(new Dictionary <string, double>()
            {
                { Convert.ToInt32(yPredic[i].GetProbFalse() > _cutoffPoint).ToString(), yPredic[i].GetProbFalse() },
                { Convert.ToInt32(yPredic[i].GetProbTrue() > _cutoffPoint).ToString(), yPredic[i].GetProbTrue() }
            });
            yPredicLabel.Add(Convert.ToInt32(yPredic[i].GetProbTrue() > _cutoffPoint).ToString());
        }
        _yPredicDistrib = yPredicDistrib;
        _yPredicLabel   = yPredicLabel;
    }
コード例 #8
0
ファイル: Models.cs プロジェクト: mesgarpour/ERMER
 public virtual void Train(
     string outputModelFileName,
     int iterationCount,
     bool computeModelEvidence,
     int batchCount,
     DistributionName distributionName           = DistributionName.Null,
     InferenceAlgorithm inferenceEngineAlgorithm = InferenceAlgorithm.Null,
     double noise = 0)
 {
     TraceListeners.Log(TraceEventType.Information, 0,
                        "Train...", false, true);
     _model.Train(
         outputModelFileName,
         iterationCount,
         computeModelEvidence,
         batchCount,
         distributionName,
         inferenceEngineAlgorithm,
         noise);
 }
コード例 #9
0
    public override IDictionary <string, double> PredictInstance(
        string inputModelFileName,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        int instance,
        double noise)
    {
        TraceListeners.Log(TraceEventType.Warning, 0,
                           "Advanced setting will not be used: " +
                           "distributionName, inferenceEngineAlgorithm  & noise.", false, true);

        // Validate
        _validate.PredictInstance(
            inputModelFileName: inputModelFileName,
            instance: instance,
            numObservations: _numObservations);

        IBayesPointMachineClassifier <
            IList <Vector>, int, IList <string>, string, IDictionary <string, double>,
            BayesPointMachineClassifierTrainingSettings,
            BinaryBayesPointMachineClassifierPredictionSettings <string> > classifier = null;

        // Load model
        if (string.IsNullOrEmpty(inputModelFileName))
        {
            classifier =
                BayesPointMachineClassifier.LoadBinaryClassifier <
                    IList <Vector>, int, IList <string>, string, IDictionary <string, double> >
                    (inputModelFileName);
        }
        else
        {
            classifier = _classifier;
        }

        IDictionary <string, double> yPredicted =
            classifier.PredictDistribution(instance, _x);

        // string yPredicLabel = classifier.Predict(instance, _x);
        return(yPredicted);
    }
コード例 #10
0
ファイル: BPM.cs プロジェクト: mesgarpour/ERMER
    public override IDictionary <string, double> PredictInstance(
        string inputModelFileName,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        int instance,
        double noise)
    {
        // Validate
        // _validate.Predict(inputModelFileName);

        // Initialise
        Dictionary <string, double> yPredicDistrib = new Dictionary <string, double>();
        VariableArray <bool>        yTest          = Variable.Array <bool>(new Range(1)).
                                                     Named("y." + _availableDatasetName.ToString()); // to do: correct the size
        Bernoulli yPredic;

        // The inference engine
        _engine[DistributionType.Posterior] = SetInferenceEngine(
            inferenceEngineAlgorithm, 1);

        // Infer postrior weights from training
        _w[DistributionType.Posterior] = InferWeights(
            distributionType: DistributionType.Posterior,
            distributionName: distributionName,
            hyperParameters: null);

        // BPM
        BayesPointMachine(_x[instance], yTest[0], _w[DistributionType.Posterior], noise);

        // predict
        // _yPredicLabel = _engine[DistributionType.Posterior].Infer(_y);
        yPredic        = _engine[DistributionType.Posterior].Infer <Bernoulli>(yTest[0]);
        yPredicDistrib = new Dictionary <string, double>()
        {
            { Convert.ToInt32(yPredic.GetProbFalse() > _cutoffPoint).ToString(), yPredic.GetProbFalse() },
            { Convert.ToInt32(yPredic.GetProbTrue() > _cutoffPoint).ToString(), yPredic.GetProbTrue() }
        };

        return(yPredicDistrib);
    }
コード例 #11
0
    public override void TrainIncremental(
        string inputModelFileName,
        string outputModelFileName,
        int iterationCount,
        bool computeModelEvidence,
        int batchCount,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        double noise)
    {
        TraceListeners.Log(TraceEventType.Warning, 0,
                           "Advanced setting will not be used: " +
                           "distributionName, inferenceEngineAlgorithm & noise.", false, true);

        // Validate
        _validate.TrainIncremental(
            inputModelFileName: inputModelFileName,
            outputModelFileName: outputModelFileName,
            iterationCount: iterationCount,
            batchCount: batchCount);

        // Load model
        IBayesPointMachineClassifier <
            IList <Vector>, int, IList <string>, string, IDictionary <string, double>,
            BayesPointMachineClassifierTrainingSettings,
            BinaryBayesPointMachineClassifierPredictionSettings <string> > classifier =
            BayesPointMachineClassifier.LoadBinaryClassifier <
                IList <Vector>, int, IList <string>, string, IDictionary <string, double> >
                (inputModelFileName);

        // Set settings
        classifier.Settings.Training.ComputeModelEvidence = computeModelEvidence;
        classifier.Settings.Training.IterationCount       = iterationCount;
        classifier.Settings.Training.BatchCount           = batchCount;

        // train
        classifier.TrainIncremental(_x, _y);
        classifier.Save(outputModelFileName);
    }
コード例 #12
0
    public override void Predict(
        string inputModelFileName,
        DistributionName distributionName,
        InferenceAlgorithm inferenceEngineAlgorithm,
        double noise)
    {
        TraceListeners.Log(TraceEventType.Warning, 0,
                           "Advanced setting will not be used: " +
                           "distributionName, inferenceEngineAlgorithm & noise.", false, true);

        // Validate
        _validate.Predict(inputModelFileName);

        // Define the classifier
        IBayesPointMachineClassifier <
            IList <Vector>, int, IList <string>, string, IDictionary <string, double>,
            BayesPointMachineClassifierTrainingSettings,
            BinaryBayesPointMachineClassifierPredictionSettings <string> > classifier = null;

        // Load model
        if (string.IsNullOrEmpty(inputModelFileName))
        {
            classifier =
                BayesPointMachineClassifier.LoadBinaryClassifier <
                    IList <Vector>, int, IList <string>, string, IDictionary <string, double> >
                    (inputModelFileName);
        }
        else
        {
            classifier = _classifier;
        }

        _validate.ValidatePredict(_x, _x);
        _yPredicDistrib = classifier.PredictDistribution(_x);
        _yPredicLabel   = classifier.Predict(_x);
    }