예제 #1
0
        public void IGMNDataTest2()
        {
            IGMNData a = new IGMNData(igmn, new Vector(new double[] { 0, 0 }));

            a.Gaussian.Covariance.Covariance.WriteToFile("orig_full_cov.txt");
            a.Gaussian.Covariance.InverseCovariance.WriteToFile("orig_full_invcov.txt");
            a.Gaussian.Mean.WriteToFile("orig_full_mean.txt");
            Console.Out.WriteLine(a.Gaussian.Covariance.Determinant);

            a.InputGaussian.Covariance.Covariance.WriteToFile("orig_inp_cov.txt");
            a.InputGaussian.Covariance.InverseCovariance.WriteToFile("orig_inp_invcov.txt");
            a.InputGaussian.Mean.WriteToFile("orig_inp_mean.txt");
            Console.Out.WriteLine(a.InputGaussian.Covariance.Determinant);


            a.RefineWithData(new Vector(new double[] { 1, 1 }), 0.5);
            a.RefineWithData(new Vector(new double[] { 2, 2 }), 0.3333333333333333333);
            a.RefineWithData(new Vector(new double[] { 3, 3 }), 0.25);

            a.Gaussian.Covariance.Covariance.WriteToFile("mod_full_cov.txt");
            a.Gaussian.Covariance.InverseCovariance.WriteToFile("mod_full_invcov.txt");
            a.Gaussian.Mean.WriteToFile("mod_full_mean.txt");
            Console.Out.WriteLine(a.Gaussian.Covariance.Determinant);

            a.InputGaussian.Covariance.Covariance.WriteToFile("mod_inp_cov.txt");
            a.InputGaussian.Covariance.InverseCovariance.WriteToFile("mod_inp_invcov.txt");
            a.InputGaussian.Mean.WriteToFile("mod_inp_mean.txt");
            Console.Out.WriteLine(a.InputGaussian.Covariance.Determinant);
        }
예제 #2
0
파일: IGMN.cs 프로젝트: hunsteve/RLResearch
        public void Train(Vector x)
        {
            double sum = 0;

            XTVector min = convertVector(x); min[min.Length - 1] = double.MinValue;
            XTVector max = convertVector(x); max[max.Length - 1] = double.MaxValue;
            List<IGMNData> possibleRelevant2 = xtree.rangeQuery(new MBR(min, max));

            for (int i = 0; i < possibleRelevant2.Count; ++i)
            {
                sum += possibleRelevant2[i].Accumlator;
                possibleRelevant2[i].Age++;
            }
            sum /= possibleRelevant2.Count;


            List<IGMNData> possibleRelevant = xtree.pointQuery(convertVector(x));
            List<double> posterior = new List<double>();
            double sum2 = 0;
            List<IGMNData> relevant = new List<IGMNData>();
            for (int i = 0; i < possibleRelevant.Count; ++i)
            {
                double e;
                double relev = possibleRelevant[i].Gaussian.Likelihood(x, out e) * (possibleRelevant[i].Accumlator / sum); // likelihood * prior
                if (e > RelevanceLevel)
                {
                    posterior.Add(relev);
                    sum2 += relev;
                    relevant.Add(possibleRelevant[i]);
                }
            }

            if (relevant.Count == 0)
            {
                IGMNData newdata = new IGMNData(this, x);
                cortical.Add(newdata);
                xtree.Insert(newdata);
            }
            else
            {
                //relevance normalization
                for (int i = 0; i < posterior.Count; ++i)
                {
                    posterior[i] /= sum2;
                }
                
                //true relevant gaussians update
                for (int i = 0; i < relevant.Count; ++i)
                {                    
                    relevant[i].Accumlator += posterior[i];
                    double w = posterior[i] / relevant[i].Accumlator;
                    
                    xtree.Delete(relevant[i]);
                    relevant[i].RefineWithData(x, w);//0.25|w
                    xtree.Insert(relevant[i]);
                }              
            }

            //delete unneeded gaussians
            List<IGMNData> deleteList = new List<IGMNData>();
            foreach (IGMNData g in possibleRelevant2)
            {
                if ((g.Age > AGE_MIN) && (g.Accumlator < ACCUMLATOR_MIN))
                {
                    deleteList.Add(g);
                }
            }

            foreach (IGMNData g in deleteList)
            {
                cortical.Remove(g);
                xtree.Delete(g);
            }
        }
예제 #3
0
        public void IGMNDataTest()
        {
            IGMNData a = new IGMNData(null, new Vector(new double[] { 1, 2, 3, 4, 5, 4, 3, 2, 1 }));

            a.Gaussian.Covariance.Covariance.WriteToFile("orig_full_cov.txt");
            a.Gaussian.Covariance.InverseCovariance.WriteToFile("orig_full_invcov.txt");
            a.Gaussian.Mean.WriteToFile("orig_full_mean.txt");
            Console.Out.WriteLine(a.Gaussian.Covariance.Determinant);

            a.InputGaussian.Covariance.Covariance.WriteToFile("orig_inp_cov.txt");
            a.InputGaussian.Covariance.InverseCovariance.WriteToFile("orig_inp_invcov.txt");
            a.InputGaussian.Mean.WriteToFile("orig_inp_mean.txt");
            Console.Out.WriteLine(a.InputGaussian.Covariance.Determinant);


            a.RefineWithData(new Vector(new double[] { 4, 5, 1, 2, 8, 3, 3, 8, 1 }), 0.5);
            a.RefineWithData(new Vector(new double[] { 8, 3, 3, 1, 2, 8, 1, 4, 5 }), 0.5);

            a.Gaussian.Covariance.Covariance.WriteToFile("mod_full_cov.txt");
            a.Gaussian.Covariance.InverseCovariance.WriteToFile("mod_full_invcov.txt");
            a.Gaussian.Mean.WriteToFile("mod_full_mean.txt");
            Console.Out.WriteLine(a.Gaussian.Covariance.Determinant);

            a.InputGaussian.Covariance.Covariance.WriteToFile("mod_inp_cov.txt");
            a.InputGaussian.Covariance.InverseCovariance.WriteToFile("mod_inp_invcov.txt");
            a.InputGaussian.Mean.WriteToFile("mod_inp_mean.txt");
            Console.Out.WriteLine(a.InputGaussian.Covariance.Determinant);
        }