public static void RunC45()
        {
            List <DDataRecord> records = LoadSample();

            C45 <DDataRecord> algorithm = new C45 <DDataRecord>();

            algorithm.UpdateContinuousAttributes(records, "temperature");
            algorithm.UpdateContinuousAttributes(records, "humidity");
            algorithm.Train(records);
            //algorithm.RulePostPrune(records); //post pruning using cross valiation set

            Console.WriteLine("C4.5 Tree Built!");

            for (int i = 0; i < records.Count; i++)
            {
                DDataRecord rec = records[i];
                Console.WriteLine("rec: ");
                string[] feature_names = rec.FindFeatures();
                foreach (string feature_name in feature_names)
                {
                    Console.WriteLine(feature_name + " = " + rec[feature_name]);
                }
                Console.WriteLine("Label: " + rec.Label);
                Console.WriteLine("Predicted Label: " + algorithm.Predict(records[i]));
                Console.WriteLine();
            }
        }
Exemplo n.º 2
0
        public void TestC45()
        {
            var samples = new List <IList <object> >
            {
                new List <object> {
                    1, "Sunny", 85, 85, false, false
                },
                new List <object> {
                    2, "Sunny", 80, 90, true, false
                },
                new List <object> {
                    3, "Overcast", 83, 78, false, true
                },
                new List <object> {
                    4, "Rainy", 70, 96, false, true
                },
                new List <object> {
                    5, "Rainy", 68, 80, false, true
                },
                new List <object> {
                    6, "Rainy", 65, 70, true, false
                },
                new List <object> {
                    7, "Overcast", 64, 65, true, true
                },
                new List <object> {
                    8, "Sunny", 72, 95, false, false
                },
                new List <object> {
                    9, "Sunny", 69, 70, false, true
                },
                new List <object> {
                    10, "Rainy", 75, 80, false, true
                },
                new List <object> {
                    11, "Sunny", 75, 70, true, true
                },
                new List <object> {
                    12, "Overcast", 73, 90, true, true
                },
                new List <object> {
                    13, "Overcast", 81, 75, false, true
                },
                new List <object> {
                    14, "Rainy", 71, 80, true, false
                },
            };

            var optionIndexes = new List <int> {
                1, 2, 3, 4
            };
            var targetIndex = 5;

            var algo = new C45 <object>();

            algo.Process(samples, optionIndexes, targetIndex);
        }
Exemplo n.º 3
0
        private void RodarArvore(int configuracaoArvoreId)
        {
            var    atributos          = db.ConfiguracaoAtributo.Where(config => config.ConfiguracaoArvoreID == configuracaoArvoreId).ToList();
            string classeMeta         = atributos[0].ClasseMeta;
            var    configuracaoArvore = db.ConfiguracaoArvore.FirstOrDefault(configArvore => configArvore.ID == configuracaoArvoreId);

            //Gerar a árvore
            List <Atributo> atrs = new List <Atributo>();

            foreach (var atr in atributos)
            {
                atrs.Add(new Atributo {
                    Nome = atr.Nome, TipoAtributo = atr.Tipo, Legenda = atr.Legenda
                });
            }

            TabelaTemporaria.PreencherAtributos(atrs, configuracaoArvoreId);

            C45 c45 = new C45();

            if (configuracaoArvore.Poda > 0)
            {
                c45.Poda = configuracaoArvore.Poda;
            }
            c45.Calcular(classeMeta, atrs);

            ArvoreGerada arvoreGerada = new ArvoreGerada();

            arvoreGerada.ConfiguracaoArvoreID = configuracaoArvoreId;
            arvoreGerada.ClasseMeta           = atributos.FirstOrDefault(x => x.Nome.Equals(classeMeta)).Legenda;
            arvoreGerada.JSON           = new JavaScriptSerializer().Serialize(c45.arvore.GerarJSON());
            arvoreGerada.UsuarioGeracao = "Agendamento";
            arvoreGerada.DataGeracao    = DateTime.Now;
            var xml = new System.Xml.Serialization.XmlSerializer(c45.arvore.GetType());

            using (StringWriter textWriter = new StringWriter())
            {
                xml.Serialize(textWriter, c45.arvore);
                arvoreGerada.XML = textWriter.ToString();
            }
            var doc = new GeradorPMML().Gerar(atrs, classeMeta, c45.arvore, c45.PercentuaisClasseMeta);

            xml = new System.Xml.Serialization.XmlSerializer(doc.GetType());
            using (StringWriter textWriter = new StringWriter())
            {
                xml.Serialize(textWriter, doc);
                arvoreGerada.XmlPmml = textWriter.ToString();
            }

            if (atributos.Count(x => x.Tipo == Tipo.Mineração_de_Texto) > 0)
            {
                arvoreGerada.JsonNuvemPalavras = new JavaScriptSerializer().Serialize(TabelaTemporaria.RetornaNuvemPalavras(atributos.FirstOrDefault(x => x.Tipo == Tipo.Mineração_de_Texto).Nivel));
            }

            db.ArvoreGerada.Add(arvoreGerada);
            db.SaveChanges();
        }
        public void TestC45()
        {
            var c45                  = new C45();
            var c45Parameter         = new C45Parameter(1, true, 0.2);
            var discreteToContinuous = new DiscreteToContinuous(car);

            discreteToContinuous.Convert();
            c45.Train(car.GetInstanceList(), c45Parameter);
            Assert.AreEqual(29.98, 100 * c45.Test(car.GetInstanceList()).GetErrorRate(), 0.01);
            discreteToContinuous = new DiscreteToContinuous(tictactoe);
            discreteToContinuous.Convert();
            c45.Train(tictactoe.GetInstanceList(), c45Parameter);
            Assert.AreEqual(34.66, 100 * c45.Test(tictactoe.GetInstanceList()).GetErrorRate(), 0.01);
        }
        public void TestC45()
        {
            var c45          = new C45();
            var c45Parameter = new C45Parameter(1, true, 0.2);
            var laryToBinary = new LaryToBinary(car);

            laryToBinary.Convert();
            c45.Train(car.GetInstanceList(), c45Parameter);
            Assert.AreEqual(10.76, 100 * c45.Test(car.GetInstanceList()).GetErrorRate(), 0.01);
            laryToBinary = new LaryToBinary(tictactoe);
            laryToBinary.Convert();
            c45.Train(tictactoe.GetInstanceList(), c45Parameter);
            Assert.AreEqual(16.08, 100 * c45.Test(tictactoe.GetInstanceList()).GetErrorRate(), 0.01);
            laryToBinary = new LaryToBinary(nursery);
            laryToBinary.Convert();
            c45.Train(nursery.GetInstanceList(), c45Parameter);
            Assert.AreEqual(24.95, 100 * c45.Test(nursery.GetInstanceList()).GetErrorRate(), 0.01);
        }
Exemplo n.º 6
0
        public void TestC45()
        {
            var c45               = new C45();
            var c45Parameter      = new C45Parameter(1, true, 0.2);
            var discreteToIndexed = new DiscreteToIndexed(car);

            discreteToIndexed.Convert();
            c45.Train(car.GetInstanceList(), c45Parameter);
            Assert.AreEqual(10.76, 100 * c45.Test(car.GetInstanceList()).GetErrorRate(), 0.01);
            discreteToIndexed = new DiscreteToIndexed(tictactoe);
            discreteToIndexed.Convert();
            c45.Train(tictactoe.GetInstanceList(), c45Parameter);
            Assert.AreEqual(16.08, 100 * c45.Test(tictactoe.GetInstanceList()).GetErrorRate(), 0.01);
            discreteToIndexed = new DiscreteToIndexed(nursery);
            discreteToIndexed.Convert();
            c45.Train(nursery.GetInstanceList(), c45Parameter);
            Assert.AreEqual(24.95, 100 * c45.Test(nursery.GetInstanceList()).GetErrorRate(), 0.01);
        }
Exemplo n.º 7
0
        public void TestTrain()
        {
            var c45          = new C45();
            var c45Parameter = new C45Parameter(1, true, 0.2);

            c45.Train(iris.GetInstanceList(), c45Parameter);
            Assert.AreEqual(4.67, 100 * c45.Test(iris.GetInstanceList()).GetErrorRate(), 0.01);
            c45.Train(bupa.GetInstanceList(), c45Parameter);
            Assert.AreEqual(42.03, 100 * c45.Test(bupa.GetInstanceList()).GetErrorRate(), 0.01);
            c45.Train(dermatology.GetInstanceList(), c45Parameter);
            Assert.AreEqual(6.28, 100 * c45.Test(dermatology.GetInstanceList()).GetErrorRate(), 0.01);
            c45.Train(car.GetInstanceList(), c45Parameter);
            Assert.AreEqual(21.35, 100 * c45.Test(car.GetInstanceList()).GetErrorRate(), 0.01);
            c45.Train(tictactoe.GetInstanceList(), c45Parameter);
            Assert.AreEqual(19.94, 100 * c45.Test(tictactoe.GetInstanceList()).GetErrorRate(), 0.01);
            c45.Train(nursery.GetInstanceList(), c45Parameter);
            Assert.AreEqual(29.03, 100 * c45.Test(nursery.GetInstanceList()).GetErrorRate(), 0.01);
        }
Exemplo n.º 8
0
        public ActionResult Index(IList <MineradorRH.Models.ConfiguracaoAtributo> atributos)
        {
            string classeMeta = atributos[0].ClasseMeta;

            if (string.IsNullOrEmpty(classeMeta))
            {
                ModelState.AddModelError("", "Um atributo deve ser classe meta.");
                return(View(atributos));
            }

            if (atributos.Count(x => x.Tipo == Tipo.Mineração_de_Texto) > 1)
            {
                ModelState.AddModelError("", "Árvore pode possuir apenas um atributo do tipo Mineração de texto.");
                return(View(atributos));
            }

            if (ModelState.IsValid)
            {
                foreach (var atributo in atributos.Where(atr => atr.ID > 0))
                {
                    db.Entry(atributo).State = EntityState.Modified;
                }

                foreach (var atributo in atributos.Where(atr => atr.ID <= 0))
                {
                    db.ConfiguracaoAtributo.Add(atributo);
                }

                db.SaveChanges();

                int arvoreID           = atributos[0].ConfiguracaoArvoreID;
                var configuracaoArvore = db.ConfiguracaoArvore.FirstOrDefault(configArvore => configArvore.ID == arvoreID);

                //Gerar a árvore
                List <Atributo> atrs = new List <Atributo>();
                foreach (var atr in atributos)
                {
                    atrs.Add(new Atributo {
                        Nome = atr.Nome, TipoAtributo = atr.Tipo, Legenda = atr.Legenda, Nivel = atr.Nivel
                    });
                }

                TabelaTemporaria.PreencherAtributos(atrs, arvoreID);

                C45 c45 = new C45();
                if (configuracaoArvore.Poda > 0)
                {
                    c45.Poda = configuracaoArvore.Poda;
                }
                c45.Calcular(classeMeta, atrs);

                ArvoreGerada arvoreGerada = new ArvoreGerada();
                arvoreGerada.ConfiguracaoArvoreID = arvoreID;
                arvoreGerada.ClasseMeta           = atributos.FirstOrDefault(x => x.Nome.Equals(classeMeta)).Legenda;
                arvoreGerada.JSON           = new JavaScriptSerializer().Serialize(c45.arvore.GerarJSON());
                arvoreGerada.UsuarioGeracao = User.Identity.Name;
                arvoreGerada.DataGeracao    = DateTime.Now;
                var xml = new System.Xml.Serialization.XmlSerializer(c45.arvore.GetType());
                using (StringWriter textWriter = new StringWriter())
                {
                    xml.Serialize(textWriter, c45.arvore);
                    arvoreGerada.XML = textWriter.ToString();
                }
                var doc = new GeradorPMML().Gerar(atrs, classeMeta, c45.arvore, c45.PercentuaisClasseMeta);
                xml = new System.Xml.Serialization.XmlSerializer(doc.GetType());
                using (StringWriter textWriter = new StringWriter())
                {
                    xml.Serialize(textWriter, doc);
                    arvoreGerada.XmlPmml = textWriter.ToString();
                }

                if (atributos.Count(x => x.Tipo == Tipo.Mineração_de_Texto) > 0)
                {
                    arvoreGerada.JsonNuvemPalavras = new JavaScriptSerializer().Serialize(TabelaTemporaria.RetornaNuvemPalavras(atributos.FirstOrDefault(x => x.Tipo == Tipo.Mineração_de_Texto).Nivel));
                }

                db.ArvoreGerada.Add(arvoreGerada);
                db.SaveChanges();

                return(View("Grafico", arvoreGerada));
            }

            return(View(atributos));
        }