/** * <summary> Constructor that takes {@link InstanceList}s as trainsSet and validationSet. Initially it allocates layer weights, * then creates an input vector by using given trainSet and finds error. Via the validationSet it finds the classification * performance and at the end it reassigns the allocated weight Matrix with the matrix that has the best accuracy.</summary> * * <param name="trainSet"> InstanceList that is used to train.</param> * <param name="validationSet">InstanceList that is used to validate.</param> * <param name="parameters"> Linear perceptron parameters; learningRate, etaDecrease, crossValidationRatio, epoch.</param> */ public LinearPerceptronModel(InstanceList.InstanceList trainSet, InstanceList.InstanceList validationSet, LinearPerceptronParameter parameters) : base(trainSet) { W = AllocateLayerWeights(K, d + 1, new Random(parameters.GetSeed())); var bestW = (Matrix)W.Clone(); var bestClassificationPerformance = new ClassificationPerformance(0.0); var epoch = parameters.GetEpoch(); var learningRate = parameters.GetLearningRate(); for (var i = 0; i < epoch; i++) { trainSet.Shuffle(parameters.GetSeed()); for (var j = 0; j < trainSet.Size(); j++) { CreateInputVector(trainSet.Get(j)); var rMinusY = CalculateRMinusY(trainSet.Get(j), x, W); var deltaW = rMinusY.Multiply(x); deltaW.MultiplyWithConstant(learningRate); W.Add(deltaW); } var currentClassificationPerformance = TestClassifier(validationSet); if (currentClassificationPerformance.GetAccuracy() > bestClassificationPerformance.GetAccuracy()) { bestClassificationPerformance = currentClassificationPerformance; bestW = (Matrix)W.Clone(); } learningRate *= parameters.GetEtaDecrease(); } W = bestW; }
public void TestLinearPerceptron() { var linearPerceptron = new LinearPerceptron(); var linearPerceptronParameter = new LinearPerceptronParameter(1, 0.1, 0.99, 0.2, 100); var discreteToIndexed = new DiscreteToIndexed(car); discreteToIndexed.Convert(); linearPerceptron.Train(car.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(8.80, 100 * linearPerceptron.Test(car.GetInstanceList()).GetErrorRate(), 0.01); discreteToIndexed = new DiscreteToIndexed(tictactoe); discreteToIndexed.Convert(); linearPerceptron.Train(tictactoe.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(1.67, 100 * linearPerceptron.Test(tictactoe.GetInstanceList()).GetErrorRate(), 0.01); }
public void TestTrain() { var linearPerceptron = new LinearPerceptron(); var linearPerceptronParameter = new LinearPerceptronParameter(1, 0.1, 0.99, 0.2, 100); linearPerceptron.Train(iris.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(8.67, 100 * linearPerceptron.Test(iris.GetInstanceList()).GetErrorRate(), 0.01); linearPerceptronParameter = new LinearPerceptronParameter(1, 0.001, 0.99, 0.2, 100); linearPerceptron.Train(bupa.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(31.88, 100 * linearPerceptron.Test(bupa.GetInstanceList()).GetErrorRate(), 0.01); linearPerceptronParameter = new LinearPerceptronParameter(1, 0.1, 0.99, 0.2, 100); linearPerceptron.Train(dermatology.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(3.28, 100 * linearPerceptron.Test(dermatology.GetInstanceList()).GetErrorRate(), 0.01); }
public void TestLinearPerceptron() { var linearPerceptron = new LinearPerceptron(); var linearPerceptronParameter = new LinearPerceptronParameter(1, 0.1, 0.99, 0.2, 100); var normalize = new Normalize(iris); normalize.Convert(); linearPerceptron.Train(iris.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(2.67, 100 * linearPerceptron.Test(iris.GetInstanceList()).GetErrorRate(), 0.01); normalize = new Normalize(bupa); normalize.Convert(); linearPerceptron.Train(bupa.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(31.59, 100 * linearPerceptron.Test(bupa.GetInstanceList()).GetErrorRate(), 0.01); normalize = new Normalize(dermatology); normalize.Convert(); linearPerceptron.Train(dermatology.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(1.09, 100 * linearPerceptron.Test(dermatology.GetInstanceList()).GetErrorRate(), 0.01); }
public void TestLinearPerceptron() { var linearPerceptron = new LinearPerceptron(); var linearPerceptronParameter = new LinearPerceptronParameter(1, 0.1, 0.99, 0.2, 100); var pca = new Pca(iris); pca.Convert(); linearPerceptron.Train(iris.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(8.67, 100 * linearPerceptron.Test(iris.GetInstanceList()).GetErrorRate(), 0.01); linearPerceptronParameter = new LinearPerceptronParameter(1, 0.01, 0.99, 0.2, 100); pca = new Pca(bupa); pca.Convert(); linearPerceptron.Train(bupa.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(42.03, 100 * linearPerceptron.Test(bupa.GetInstanceList()).GetErrorRate(), 0.01); pca = new Pca(dermatology); pca.Convert(); linearPerceptron.Train(dermatology.GetInstanceList(), linearPerceptronParameter); Assert.AreEqual(1.64, 100 * linearPerceptron.Test(dermatology.GetInstanceList()).GetErrorRate(), 0.01); }