public override SongGenre GetClass(DataElement data)
        {
            base.GetClass(data);
            if (!data.HasFeaturesExtracted())
            {
                data.GetFeatures();
            }

            int nvars = data.MeanVector.Length;

            double[] preparedData = new double[nvars];
            for (int j = 0; j < nvars; j++)
            {
                preparedData[j] = data.MeanVector[j];
            }
            double[] result = new double[nClasses];
            alglib.dfprocess(Decisionforest, preparedData, ref result);
            double max = Enumerable.Max(result);

            data.Probability = max;
            return((SongGenre)result.IndexOf(max));
        }
Ejemplo n.º 2
0
        public override SongGenre GetClass(DataElement data)
        {
            base.GetClass(data);
            if (!data.HasFeaturesExtracted())
            {
                data.GetFeatures();
            }

            double sum         = 0;
            int    genresCount = multivariateGaussians.Count;

            double[] values        = new double[genresCount];
            int[]    elementsCount = new int[genresCount];
            int      elementsSum   = 0;
            int      i             = 0;

            foreach (var mg in multivariateGaussians)
            {
                values[i]        = mg.GetGaussianValue(data);
                sum             += values[i];
                elementsCount[i] = mg.ElementsCount;
                elementsSum     += elementsCount[i];
                i++;
            }

            values = MathHelper.ConvertToProbability(values);

            // Bayes
            for (int k = 0; k < genresCount; k++)
            {
                values[k] *= ((double)elementsCount[k] / (double)elementsSum);
            }

            data.Probability = Enumerable.Max(values);
            return(multivariateGaussians[Matrix.IndexOf(values, data.Probability)].GetGenre());
        }