public override IModelLikelihood <int, int> GenerateModelLikelihood(IDataSet <int, int> training_set)
        {
            //TODO this asumes our label is finite and what not, maybe a bit silly
            double[] priors          = new double[training_set.DataContext.GetLabelDescriptor(0).ValueCount];
            int[]    instance_labels = training_set.GetLabelDataColumn(0);

            DictionaryCount <int> count_map = new DictionaryCount <int>(instance_labels);

            foreach (int key in count_map.Keys)
            {
                priors[key] = ((double)count_map.Get(key) / ((double)count_map.TotalCount));
            }


            IDictionary <int[], int[]> occurences = new DictionaryArrayKey <int, int[]>();

            for (int instance_index = 0; instance_index < training_set.InstanceCount; instance_index++)
            {
                int [] instance_features = training_set.GetInstanceFeatureData(instance_index);
                if (!occurences.ContainsKey(instance_features))
                {
                    occurences[instance_features] = new int[priors.Length + 1]; //index 0 is for total
                }
                occurences[instance_features][0]++;
                occurences[instance_features][instance_labels[instance_index] + 1]++;
            }
            return(new ModelLikelihoodNominalJointTable <int>(training_set.DataContext, priors, occurences));
        }
        public IModelDiscreteIterative <double, int> GenerateModelDiscreteIncremental(IDataSet <double, int> training_set)
        {
            ModelNearestNeighborListDefault model = new ModelNearestNeighborListDefault(training_set.DataContext);
            IList <Tuple <double[], int> >  training_instances = new List <Tuple <double[], int> >();

            for (int instance_index = 0; instance_index < training_set.InstanceCount; instance_index++)
            {
                training_instances.Add(new Tuple <double[], int>(training_set.GetInstanceFeatureData(instance_index), training_set.GetInstanceLabelData(instance_index)[0]));
            }
            model.Add(training_instances);
            return(model);
        }
Example #3
0
        public IModelDiscreteIterative <int, int> GenerateModelDiscreteIncremental(IDataSet <int, int> training_set)
        {
            //TODO check data context
            ModelNearestNeighborList <int, int, int> model = new ModelNearestNeighborList <int, int, int>(training_set.DataContext, new FunctionDistanceHamming());
            IList <Tuple <int[], int> > training_instances = new List <Tuple <int[], int> >();

            for (int instance_index = 0; instance_index < training_set.InstanceCount; instance_index++)
            {
                training_instances.Add(new Tuple <int[], int>(training_set.GetInstanceFeatureData(instance_index), training_set.GetInstanceLabelData(instance_index)[0]));
            }
            model.Add(training_instances);
            return(model);
        }
        public ReportLikelihood <DomainType, LabelType> GenerateAndTestLikelihood(IDataSet <DomainType, LabelType> training_set, IDataSet <DomainType, LabelType> test_set)
        {
            IModelLikelihood <DomainType, LabelType> model = GenerateModelLikelihood(training_set);

            double[][]  likelihoods = new double[test_set.InstanceCount][];
            LabelType[] labels      = new LabelType[test_set.InstanceCount];
            for (int instance_index = 0; instance_index < test_set.InstanceCount; instance_index++)
            {
                likelihoods[instance_index] = model.GetLikelihoods(test_set.GetInstanceFeatureData(instance_index));
            }

            return(new ReportLikelihood <DomainType, LabelType>(model, likelihoods, labels));
        }
        public IModelLabelIterative <double, double> GenerateModelLabelIterative(IDataSet <double, double> training_set)
        {
            //ModelNearestNeighborKDTreeDefault model = new ModelNearestNeighborKDTreeDefault(training_set.DataContext);
            ModelNearestNeighborKDTree <double, double, double> model = new ModelNearestNeighborKDTree <double, double, double>("ModelKNNIneterval", training_set.DataContext, new AlgebraRealFloat64(), new FunctionDistanceEuclidean());
            IList <Tuple <double[], double> > training_instances      = new List <Tuple <double[], double> >();

            for (int instance_index = 0; instance_index < training_set.InstanceCount; instance_index++)
            {
                training_instances.Add(new Tuple <double[], double>(training_set.GetInstanceFeatureData(instance_index), training_set.GetInstanceLabelData(instance_index)[0]));
            }
            model.Add(training_instances);
            return(model);
        }
Example #6
0
        public IModelDiscreteIterative <DomainType, LabelType> GenerateModelDiscrete(IDataSet <DomainType, LabelType> training_set)
        {
            ModelNearestNeighborKDTree <DomainType, DistanceType, LabelType> model = new ModelNearestNeighborKDTree <DomainType, DistanceType, LabelType>(
                this.DataContext,
                this.kdtree.Copy(),
                this.DistanceFunction,
                this.voting_system,
                this.neighbor_count);
            IList <Tuple <DomainType[], LabelType> > training_instances = new List <Tuple <DomainType[], LabelType> >();

            for (int instance_index = 0; instance_index < training_set.InstanceCount; instance_index++)
            {
                training_instances.Add(new Tuple <DomainType[], LabelType>(training_set.GetInstanceFeatureData(instance_index), training_set.GetInstanceLabelData(instance_index)[0]));
            }
            model.Add(training_instances);
            return(model);
        }
Example #7
0
        private static void ProccessDataSetNominalPCA(IDataSet <int, int> training_set, IDataSet <int, int> test_set)
        {
            int cluster_count  = 10;
            int instance_count = training_set.InstanceCount;
            ITemplateClusteringCentroid <int, IDataSet <int> > template_cluster = new TemplateClusteringKMeansNominal(cluster_count);
            TemplateDimensionReductionPCADefault template_pca = new TemplateDimensionReductionPCADefault(3);
            IDataSet <int> training_set_unlabeled             = training_set;


            IClusteringCentroid <int> clustering = template_cluster.Cluster(training_set_unlabeled);

            double[][] transformed_data1 = new double[instance_count][];
            for (int instance_index = 0; instance_index < instance_count; instance_index++)
            {
                transformed_data1[instance_index] = clustering.Transform(training_set_unlabeled.GetInstanceFeatureData(instance_index));
            }


            IDataSet <double> data_set_transformed1 = new DataSet <double, int>(transformed_data1);


            ITransform transform = template_pca.GenerateTransform(data_set_transformed1);

            double[][] transformed_data2 = new double[instance_count][];
            int[][]    label_data        = training_set.LabelData;
            Color[]    instance_colors   = new Color[instance_count];
            Color[]    label_colors      = ToolsColor.GetPallete(training_set.DataContext.GetLabelDescriptor(0).ValueCount);

            for (int instance_index = 0; instance_index < instance_count; instance_index++)
            {
                transformed_data2[instance_index] = transform.TransformForward(data_set_transformed1.GetInstanceFeatureData(instance_index));
                instance_colors[instance_index]   = label_colors[label_data[instance_index][0]];
            }
            RendererPoints <Matrix <double> > renderer = new RendererPoints <Matrix <double> >(new AlgebraLinearReal64MathNet(), 1000, 1000, (AngleRadian)0, (AngleRadian)0, 10);
            BitmapFast bitmap = renderer.Render(new Tuple <double[][], Color[]>(transformed_data2, instance_colors));

            bitmap.Bitmap.Save("test.png");
        }