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