/**
         * <summary> A constructor that takes {@link InstanceList}s as trainsSet and validationSet. It  sets the {@link NeuralNetworkModel}
         * nodes with given {@link InstanceList} then creates an input vector by using given trainSet and finds error.
         * Via the validationSet it finds the classification performance and reassigns the allocated weight Matrix with the matrix
         * that has the best accuracy and the Matrix V with the best Vector input.</summary>
         *
         * <param name="trainSet">     InstanceList that is used to train.</param>
         * <param name="validationSet">InstanceList that is used to validate.</param>
         * <param name="parameters">   Multi layer perceptron parameters; seed, learningRate, etaDecrease, crossValidationRatio, epoch, hiddenNodes.</param>
         */
        public MultiLayerPerceptronModel(InstanceList.InstanceList trainSet, InstanceList.InstanceList validationSet,
                                         MultiLayerPerceptronParameter parameters) : base(trainSet)
        {
            _activationFunction = parameters.GetActivationFunction();
            AllocateWeights(parameters.GetHiddenNodes(), new Random(parameters.GetSeed()));
            var bestW = (Matrix)W.Clone();
            var bestV = (Matrix)_V.Clone();
            var bestClassificationPerformance = new ClassificationPerformance(0.0);
            var epoch                = parameters.GetEpoch();
            var learningRate         = parameters.GetLearningRate();
            var activationDerivative = new Vector(1, 0.0);

            for (var i = 0; i < epoch; i++)
            {
                trainSet.Shuffle(parameters.GetSeed());
                for (var j = 0; j < trainSet.Size(); j++)
                {
                    CreateInputVector(trainSet.Get(j));
                    var hidden       = CalculateHidden(x, W, _activationFunction);
                    var hiddenBiased = hidden.Biased();
                    var rMinusY      = CalculateRMinusY(trainSet.Get(j), hiddenBiased, _V);
                    var deltaV       = rMinusY.Multiply(hiddenBiased);
                    var tmph         = _V.MultiplyWithVectorFromLeft(rMinusY);
                    tmph.Remove(0);
                    switch (_activationFunction)
                    {
                    case ActivationFunction.SIGMOID:
                        var oneMinusHidden = CalculateOneMinusHidden(hidden);
                        activationDerivative = oneMinusHidden.ElementProduct(hidden);
                        break;

                    case ActivationFunction.TANH:
                        var one = new Vector(hidden.Size(), 1.0);
                        hidden.Tanh();
                        activationDerivative = one.Difference(hidden.ElementProduct(hidden));
                        break;

                    case ActivationFunction.RELU:
                        hidden.ReluDerivative();
                        activationDerivative = hidden;
                        break;
                    }
                    var tmpHidden = tmph.ElementProduct(activationDerivative);
                    var deltaW    = tmpHidden.Multiply(x);
                    deltaV.MultiplyWithConstant(learningRate);
                    _V.Add(deltaV);
                    deltaW.MultiplyWithConstant(learningRate);
                    W.Add(deltaW);
                }

                var currentClassificationPerformance = TestClassifier(validationSet);
                if (currentClassificationPerformance.GetAccuracy() > bestClassificationPerformance.GetAccuracy())
                {
                    bestClassificationPerformance = currentClassificationPerformance;
                    bestW = (Matrix)W.Clone();
                    bestV = (Matrix)_V.Clone();
                }

                learningRate *= parameters.GetEtaDecrease();
            }

            W  = bestW;
            _V = bestV;
        }
 /**
  * <summary> A performance test for an auto encoder with the given test set..</summary>
  *
  * <param name="testSet">Test data (list of instances) to be tested.</param>
  * <returns>Error rate.</returns>
  */
 public override Performance.Performance Test(InstanceList.InstanceList testSet)
 {
     return(((AutoEncoderModel)model).TestAutoEncoder(testSet));
 }
示例#3
0
 /**
  * <summary> Constructor that sets the data {@link InstanceList}, k value and the {@link DistanceMetric}.</summary>
  *
  * <param name="data">          {@link InstanceList} input.</param>
  * <param name="k">             K value.</param>
  * <param name="distanceMetric">{@link DistanceMetric} input.</param>
  */
 public KnnModel(InstanceList.InstanceList data, int k, DistanceMetric.DistanceMetric distanceMetric)
 {
     this._data           = data;
     this._k              = k;
     this._distanceMetric = distanceMetric;
 }
 /**
  * <summary> Constructor which sets the distribution using the given {@link InstanceList}.</summary>
  *
  * <param name="trainSet">{@link InstanceList} which is used to get the class distribution.</param>
  */
 public DummyModel(InstanceList.InstanceList trainSet)
 {
     this._distribution = trainSet.ClassDistribution();
 }
示例#5
0
 /**
  * <summary> Training algorithm for K-nearest neighbor classifier.</summary>
  *
  * <param name="trainSet">  Training data given to the algorithm.</param>
  * <param name="parameters">K: k parameter of the K-nearest neighbor algorithm
  *                   distanceMetric: distance metric used to calculate the distance between two instances.</param>
  */
 public override void Train(InstanceList.InstanceList trainSet, Parameter.Parameter parameters)
 {
     model = new KnnModel(trainSet, ((KnnParameter)parameters).GetK(),
                          ((KnnParameter)parameters).GetDistanceMetric());
 }
示例#6
0
 /**
  * <summary> Runs current classifier with the given train and test data.</summary>
  *
  * <param name="parameter">Parameter of the classifier to be trained.</param>
  * <param name="trainSet"> Training data to be used in training the classifier.</param>
  * <param name="testSet">  Test data to be tested after training the model.</param>
  * <returns>The accuracy (and error) of the trained model as an instance of Performance class.</returns>
  */
 public Performance.Performance SingleRun(Parameter.Parameter parameter, InstanceList.InstanceList trainSet,
                                          InstanceList.InstanceList testSet)
 {
     Train(trainSet, parameter);
     return(Test(testSet));
 }
示例#7
0
 public abstract void Train(InstanceList.InstanceList trainSet, Parameter.Parameter parameters);
 /**
  * <summary> Training algorithm for random classifier.</summary>
  *
  * <param name="trainSet">  Training data given to the algorithm.</param>
  * <param name="parameters">-</param>
  */
 public override void Train(InstanceList.InstanceList trainSet, Parameter.Parameter parameters)
 {
     model = new RandomModel(new List <String>(trainSet.ClassDistribution().Keys), parameters.GetSeed());
 }
示例#9
0
 /**
  * <summary> Constructor that sets the {@link NeuralNetworkModel} nodes with given {@link InstanceList}.</summary>
  *
  * <param name="trainSet">InstanceList that is used to train.</param>
  */
 public LinearPerceptronModel(InstanceList.InstanceList trainSet) : base(trainSet)
 {
 }
 /**
  * <summary> Training algorithm for C4.5 Stump univariate decision tree classifier.</summary>
  *
  * <param name="trainSet">  Training data given to the algorithm.</param>
  * <param name="parameters">-</param>
  */
 public override void Train(InstanceList.InstanceList trainSet, Parameter.Parameter parameters)
 {
     model = new DecisionTree(new DecisionNode(trainSet, null, null, true));
 }