vector<float> AvaliadorAcuracia::calcularDesempenho( Corpus &corpus, int atributo_padrao, int atributo_teste ) { /** * * Calcula a porcentagem de acerto para um determinado atributo * */ vector<float> vectorAcuracia; int row = corpus.pegarQtdSentencas(), column, acertos = 0, totalTokens = 0; for ( register int i = 0; i < row; ++i ) { column = corpus.pegarQtdTokens( i ); for ( register int j = 0; j < column; ++j ) { if ( corpus.pegarValor(i,j,atributo_padrao) == corpus.pegarValor(i,j,atributo_teste) ) ++acertos; ++totalTokens; } } vectorAcuracia.push_back( (float)acertos / totalTokens ); return vectorAcuracia; }
bool ClassificadorAdaboostM1::executarClassificacao( Corpus &corpusProva, int atributo ) { vector<vector<double> > exemplos(corpusProva.pegarQtdTotalExemplos(), vector<double>(valores.size(), 0.0)); int k, indice; for (unsigned int t = 0; t < classificadores.size(); t++) { (classificadores[t])->executarClassificacao(corpusProva, atributo); k = 0; for (int i = 0; i < corpusProva.pegarQtdSentencas(); i++) { for (int j = 0; j < corpusProva.pegarQtdExemplos(i); j++) { indice = -1; for (unsigned int a = 0; a < valores.size() - 1; a++) if (valores[a] == corpusProva(i, j, atributo)) { indice = a; a = valores.size(); } if (indice == -1) indice = valores.size() - 1; exemplos[k][indice] -= log(betas[t]); k++; } } } double maxBeta; int maxAtr; k = 0; for (int i = 0; i < corpusProva.pegarQtdSentencas(); i++) { for (int j = 0; j < corpusProva.pegarQtdExemplos(i); j++) { maxBeta = exemplos[k][valores.size()-1]; maxAtr = valores.size() - 1; for (unsigned int a = 0; a < valores.size() - 1; a++) { if (maxBeta <= exemplos[k][a]) { maxBeta = exemplos[k][a]; maxAtr = a; } } corpusProva(i, j, atributo, valores[maxAtr]); k++; } } return true; }
vector<float> AvaliadorMatrizConfusao::calcularDesempenho( Corpus &corpus, int atributo_padrao, int atributo_teste ) { /** * * Calcula somatorio de verdadeiros e negativos por classe * */ vector<float> vectorMatriz; int row = corpus.pegarQtdSentencas(), column, numeroClasses = classes.size(), tam, posVerdadeiro, posResposta; string resposta, verdade; tam = numeroClasses*numeroClasses; vectorMatriz.resize(tam); for ( register int c = 0; c < tam; ++c ) vectorMatriz[c] = 0.0; for ( register int i = 0; i < row; ++i ) { column = corpus.pegarQtdTokens( i ); for ( register int j = 0; j < column; ++j ) { verdade = corpus(i,j,atributo_padrao); resposta = corpus(i,j,atributo_teste); posVerdadeiro = posResposta = -1; for ( register int c = 0; c < numeroClasses; ++c ){ if (classes[c]==verdade) posVerdadeiro = c; if (classes[c]==resposta) posResposta = c; } if (posVerdadeiro == -1 || posResposta == -1 ){ cout << "Classe não encontrada, uma exceção será gerada."; throw "Classe não encontrada pela matriz de confusão"; } vectorMatriz[posVerdadeiro*numeroClasses+posResposta]++; } } ultimaMatriz = vectorMatriz; return vectorMatriz; }