示例#1
0
        /**
         * <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);
        }
示例#2
0
        /**
         * <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());
        }
示例#4
0
        /**
         * <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);
            }
        }
示例#5
0
 /**
  * <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());
 }