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)); }
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()); }