int main() { vector<string> atributos, classes, atributosTreino; int nConjExemplos, e, c0, c1, c, iResposta, iSaida, total; //carrega conjunto de dados CorpusMatriz objCorpus(atributos, ',', true, true); objCorpus.carregarArquivo( "../inputs/adult.data" ); //indice do atributo a aprender iResposta = objCorpus.pegarPosAtributo("resposta"); //quantidade de conjuntos de exemplos cout << (nConjExemplos = objCorpus.pegarQtdConjExemplos()) << " exemplos\n"; //indica classes alvo classes.push_back("<=50K"); classes.push_back(">50K"); //calcula priori das classes c0 = c1 = total = 0; for (c = 0; c < nConjExemplos; c++) for (e = 0; e < objCorpus.pegarQtdExemplos(c); e++) { if (objCorpus.pegarIndice(classes[0]) == objCorpus.pegarValor(c, e, iResposta)) c0++; else c1++; total++; } cout << 100.*c0/total << " / " << 100.*c1/total << endl; atributos = objCorpus.pegarAtributos(); //remove atributos que nao devem ser utilizados pelo treinamento for (unsigned int i=0; i < atributos.size(); i++) if (atributos[i]!="resposta")// && atributos[i]!="workclass" && atributos[i]!="fnlwgt") atributosTreino.push_back(atributos[i]); DecisionStump objStump(atributosTreino, classes); AvaliadorAcuracia objAvalAcur; ValidadorKDobras objValidador(objAvalAcur, 10); iSaida = objCorpus.criarAtributo("saida", "O"); vector< vector< float > > v = objValidador.executarExperimento(objStump, objCorpus, iResposta, iSaida); float media = 0; for (c=0; c<10; c++) { cout << c << " - " << v[c][0] << endl; media +=v[c][0]; } cout << "*" << media/10 << endl; Classificador *objClass = objStump.executarTreinamento(objCorpus, iResposta); objClass->executarClassificacao(objCorpus, iSaida); cout << objClass->descricaoConhecimento(); printf( "Acuracia: %.2f%%\n", 100 * objAvalAcur.calcularDesempenho( objCorpus, iResposta, iSaida)[0]); delete objClass; return 0; }
int main() { vector<string> atributos, classes; int atributo, novoatributo, c; Classificador *cl;//,*cl2; AvaliadorAcuracia objAvalAcur; float media; srand(time(NULL)); //carrega conjunto de dados CorpusMatriz objCorpus(atributos, ',', true, true); objCorpus.carregarArquivo( "../../../inputs/adult.data.medium" ); atributo = objCorpus.pegarPosAtributo("resposta"); classes.push_back("<=50K"); classes.push_back(">50K"); atributos = objCorpus.pegarAtributos(); atributos.pop_back(); //treina DecisionStump stump(atributos, classes); TreinadorAdaboost adab(stump, classes, 30, 0.01, false); novoatributo = objCorpus.criarAtributo("me"); cl = adab.executarTreinamento(objCorpus, atributo); cout << cl->descricaoConhecimento() << endl; // cl->gravarConhecimento("xpto"); // cl2 = new ClassificadorMaisEsperto; // cl->carregarConhecimento("xpto"); //classifica // cl2->executarClassificacao(objCorpus, novoatributo); cl->executarClassificacao(objCorpus, novoatributo); objCorpus.gravarArquivo("#testeout.txt"); //avalia cout << 100 * objAvalAcur.calcularDesempenho(objCorpus, atributo, novoatributo)[0] << "%\n"; //faz experimento int ndobras = 10; ValidadorKDobras objValidador(objAvalAcur, ndobras, false); vector< vector< float > > v; try{ v = objValidador.executarExperimento(adab, objCorpus, atributo, novoatributo); } catch(string s){ cout << "*" << s << endl; return 1; } catch(...){ cout << "Erro desconhecido" << endl; return 2; } media = 0; for (c=0;c<ndobras;c++){ cout << c << " - " << 100.*v[c][0] << "%\n"; media += v[c][0]; } cout << "*" << media/ndobras << "\n"; return 0; }