private double[] process(Bitmap bmp, int n, string method) { double[,] features2D = BitmapFeatures.Intensity(bmp); switch (method) { case "merge": double[] features = FeatureReduction.Flatten(features2D); return(FeatureReduction.Merge(features, n)); case "grid": return(FeatureReduction.GridwiseMerge(features2D, n)); } return(FeatureReduction.Flatten(features2D)); //double[] features = FeatureReduction.Flatten(features2D); //features = FeatureReduction.RowColSums(features2D); //features = FeatureReduction.LDA(features2D, 4); //features = FeatureReduction.PCA(features2D, 4); //features = FeatureReduction.SVD(features2D); //features = FeatureReduction.FHT(features2D); //features = FeatureReduction.Sort(features); //features = FeatureReduction.Covariance(features2D); //features = FeatureReduction.Merge(features, n); //features = FeatureReduction.Binarize(features); //double[] features = FeatureReduction.GridwiseMerge(features2D, n); //features = FeatureReduction.Discretize(features, 100); //features = FeatureReduction.Binarize(features); //return features; }
/// <summary> /// Classifies the specified test instance. /// </summary> /// <param name="test">The test instance.</param> /// <returns></returns> /// <remarks></remarks> public override Result Classify(Instance test) { string maxClass = "?"; double maxProb = float.MinValue; double[] features = FeatureReduction.Discretize(test.Features, 10); foreach (KeyValuePair <string, double> pair in Classes) { double score = Math.Log(pair.Value / TotalExamples); for (int i = 0; i < features.Length; i++) { score += Math.Log(Count(pair.Key, i, features[i]) / pair.Value); } if (score > maxProb) { maxProb = score; maxClass = pair.Key; } } return(new Result(maxClass, maxProb)); }
/// <summary> /// Trains the classifier on the specified training instances. /// </summary> /// <param name="trainingInstances">The training instances.</param> /// <remarks></remarks> public override void Train(List <Instance> trainingInstances) { Model = new Dictionary <string, double>(); Classes = new Dictionary <string, double>(); TotalExamples = trainingInstances.Count; foreach (Instance train in trainingInstances) { double[] features = FeatureReduction.Discretize(train.Features, 3); for (int i = 0; i < features.Length; i++) { string c = train.Class + "|" + i + "|" + features[i]; if (Model.ContainsKey(c)) { Model[c] += 1; } else { Model[c] = 1; } } if (Classes.ContainsKey(train.Class)) { Classes[train.Class] += 1; } else { Classes[train.Class] = 1; } } }
/// <summary> /// Extracts intensity features from the bitmap, and uses grid merge feature reduction. /// </summary> /// <param name="bmp">The BMP.</param> /// <returns></returns> /// <remarks></remarks> private double[] BitmapFeatureExtract(Bitmap bmp) { double[,] features2D = BitmapFeatures.Intensity(bmp); double[] features = FeatureReduction.GridwiseMerge(features2D, 64); return(features); }