/** * <summary> Training algorithm for the quadratic discriminant analysis classifier (Introduction to Machine Learning, Alpaydin, 2015).</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) { var w0 = new Dictionary <string, double>(); var w = new Dictionary <string, Vector>(); var W = new Dictionary <string, Matrix>(); var classLists = trainSet.DivideIntoClasses(); var priorDistribution = trainSet.ClassDistribution(); for (var i = 0; i < classLists.Size(); i++) { var ci = ((InstanceListOfSameClass)classLists.Get(i)).GetClassLabel(); var averageVector = new Vector(classLists.Get(i).ContinuousAttributeAverage()); var classCovariance = classLists.Get(i).Covariance(averageVector); var determinant = classCovariance.Determinant(); classCovariance.Inverse(); var Wi = (Matrix)classCovariance.Clone(); Wi.MultiplyWithConstant(-0.5); W[ci] = Wi; var wi = classCovariance.MultiplyWithVectorFromLeft(averageVector); w[ci] = wi; var w0i = -0.5 * (wi.DotProduct(averageVector) + System.Math.Log(determinant)) + System.Math.Log(priorDistribution.GetProbability(ci)); w0[ci] = w0i; } model = new QdaModel(priorDistribution, W, w, w0); }
/** * <summary> Training algorithm for the linear discriminant analysis classifier (Introduction to Machine Learning, Alpaydin, 2015).</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) { Vector averageVector; var w0 = new Dictionary <string, double>(); var w = new Dictionary <string, Vector>(); var priorDistribution = trainSet.ClassDistribution(); var classLists = trainSet.DivideIntoClasses(); var covariance = new Matrix(trainSet.Get(0).ContinuousAttributeSize(), trainSet.Get(0).ContinuousAttributeSize()); for (var i = 0; i < classLists.Size(); i++) { averageVector = new Vector(classLists.Get(i).ContinuousAttributeAverage()); var classCovariance = classLists.Get(i).Covariance(averageVector); classCovariance.MultiplyWithConstant(classLists.Get(i).Size() - 1); covariance.Add(classCovariance); } covariance.DivideByConstant(trainSet.Size() - classLists.Size()); covariance.Inverse(); for (var i = 0; i < classLists.Size(); i++) { var ci = ((InstanceListOfSameClass)classLists.Get(i)).GetClassLabel(); averageVector = new Vector(classLists.Get(i).ContinuousAttributeAverage()); var wi = covariance.MultiplyWithVectorFromRight(averageVector); w[ci] = wi; var w0i = -0.5 * wi.DotProduct(averageVector) + System.Math.Log(priorDistribution.GetProbability(ci)); w0[ci] = w0i; } model = new LdaModel(priorDistribution, w, w0); }
/** * <summary> Training algorithm for K-Means classifier. K-Means finds the mean of each class for training.</summary> * * <param name="trainSet"> Training data given to the algorithm.</param> * <param name="parameters">distanceMetric: distance metric used to calculate the distance between two instances.</param> */ public override void Train(InstanceList.InstanceList trainSet, Parameter.Parameter parameters) { var priorDistribution = trainSet.ClassDistribution(); var classMeans = new InstanceList.InstanceList(); var classLists = trainSet.DivideIntoClasses(); for (var i = 0; i < classLists.Size(); i++) { classMeans.Add(classLists.Get(i).Average()); } model = new KMeansModel(priorDistribution, classMeans, ((KMeansParameter)parameters).GetDistanceMetric()); }
/** * <summary> Training algorithm for Naive Bayes algorithm. It basically calls trainContinuousVersion for continuous data sets, * trainDiscreteVersion for discrete data sets.</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) { var priorDistribution = trainSet.ClassDistribution(); var classLists = trainSet.DivideIntoClasses(); if (classLists.Get(0).Get(0).GetAttribute(0) is DiscreteAttribute) { TrainDiscreteVersion(priorDistribution, classLists); } else { TrainContinuousVersion(priorDistribution, classLists); } }
/** * <summary> Returns instances of the items at the list of instance lists from the partitions.</summary> * * <returns>Instances of the items at the list of instance lists from the partitions.</returns> */ public List <Instance.Instance>[] GetClassInstances() { return(_instances.DivideIntoClasses().GetLists()); }