예제 #1
0
def run(dominios, targets, anotacoes, atributos):
    
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    
    print 50 * "*"
    print 50 * "-"
    print "Experimento GRE3D7 Randomico"
    print 50 * "-"
    
    for anotacao in anotacoes:
        contexto = anotacao["caracteristicas"]["context"]
        target = targets[contexto]
        
        A = ass.parse(anotacao["descricao"])
        
        atributos.remove("type")
        random.shuffle(atributos)
        atributos.insert(0, "type")
        
        descricao = IncrementalAlgorithmRelational2(dominios[contexto], target, atributos, False).run()
        B = ass.parse(descricao, target)
        
        DICE = ass.dice(A, B)
        MASI = ass.masi(A, B)
        
        if DICE == 1.0:
            acuracia = acuracia + 1
        numeroDescricoes = numeroDescricoes + 1
        
        mediaDice.append(DICE)
        mediaMasi.append(MASI)
        
        anotacao["dice"] = DICE
        anotacao["masi"] = MASI
        anotacao["algoritmo"] = descricao
    
#         print anotacao["descricao"]
#         print anotacao["algoritmo"]
#         print anotacao["caracteristicas"]
#         print anotacao["dice"] 
#         print anotacao["masi"] 
#         print 50 * "*"
        
    print "DICE: ", num.mean(mediaDice)
    print "MASI: ",num.mean(mediaMasi)
    print "ACURACIA: ",acuracia / numeroDescricoes
    print 50 * "*"
    print "\n"
    
    return anotacoes
        
예제 #2
0
def run(dominios, targets, anotacoes, atributos):
        
    frequencia = countAttributeFrequency(anotacoes)
    
    preferencia = getListaPreferencia(frequencia, atributos)
    
    frequencia = countAttributeFrequency(anotacoes)
        
    mediaDice = {}
    mediaMasi = {}
    acuracia = 0.
    numeroDescricoes = 0.
    
    for anotacao in anotacoes:
        contexto = anotacao["caracteristicas"]["context"]
        participante = str(anotacao["caracteristicas"]["trial"])
        
        A = ass.parse(anotacao["descricao"]) 
        
        #random.shuffle(atributos)
        descricao = IncrementalAlgorithmRelational3(dominios[contexto], targets[contexto], preferencia[participante], False).run()
        B = ass.parse(descricao, targets[contexto])
        
        DICE = ass.dice(A, B)
        MASI = ass.masi(A, B)
        
        if DICE == 1.0:
            acuracia = acuracia + 1
        numeroDescricoes = numeroDescricoes + 1
        
        if participante not in mediaDice.keys():
            mediaDice[participante] = []
            mediaMasi[participante] = []
        mediaDice[participante].append(DICE)
        mediaMasi[participante].append(MASI)
        
        anotacao["dice"] = DICE
        anotacao["masi"] = MASI
        anotacao["algoritmo"] = descricao
    
#         print anotacao["descricao"]
#         print anotacao["algoritmo"]
#         print anotacao["caracteristicas"]
#         print anotacao["dice"] 
#         print anotacao["masi"] 
#         print 100 * "*"
        
    print num.mean(mediaDice.values())
    print num.mean(mediaMasi.values())
    print acuracia / numeroDescricoes
    print "\n"
예제 #3
0
def run(dominios, targets, anotacoes, atributos, probabilidade):
        
    frequencia = countAttributeFrequency(anotacoes)
    
    lista_preferencia = getListaPreferencia(frequencia, atributos)
    
    frequencia = countAttributeFrequency(anotacoes)
    
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    
    for anotacao in anotacoes:
        contexto = anotacao["caracteristicas"]["context"]
        participante = str(anotacao["caracteristicas"]["trial"])
        
        A = ass.parse(anotacao["descricao"])
        
        #random.shuffle(atributos)
        descricao = IncrementalAlgorithmRelational5(dominios[contexto], targets[contexto], lista_preferencia, frequencia, probabilidade, 4480, False).run()
        B = ass.parse(descricao, targets[contexto])
        
        DICE = ass.dice(A, B)
        MASI = ass.masi(A, B)
        
        if DICE == 1.0:
            acuracia = acuracia + 1
        numeroDescricoes = numeroDescricoes + 1
        
        mediaDice.append(DICE)
        mediaMasi.append(MASI)
        
        anotacao["dice"] = DICE
        anotacao["masi"] = MASI
        anotacao["algoritmo"] = descricao
    
#         print anotacao["descricao"]
#         print anotacao["algoritmo"]
#         print anotacao["caracteristicas"]
#         print anotacao["dice"] 
#         print anotacao["masi"] 
#         print 100 * "*"
        
    print "Dice: ", num.mean(mediaDice)
    print "Masi: ",num.mean(mediaMasi)
    print "Acuracia: ",acuracia / numeroDescricoes
    print "\n"
예제 #4
0
def run(contextos, folds, atributos):
    
    print 100 * "-"
    print "Experimento GIVE"
    print "algoritmo IA com a lista de preferencia ordenada pela frequencia de atributos"
    print 100 * "-"
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    
    mediaFoldDice = {}
    mediaFoldMasi = {}
    acuraciaFold = {}
    numeroDescricoesFold = {}
    
    for i in range(1, len(folds)+1):
        fold = str(i)
        mediaFoldDice[fold] = []
        mediaFoldMasi[fold] = []
        acuraciaFold[fold] = 0.0
        numeroDescricoesFold[fold] = 0.0
        
        [treinamento, teste] = toList(folds, fold)
        
        frequencia = countAttributeFrequency(treinamento)
    
        preferencia = defineListaPreferencia(frequencia, atributos)
        
        for anotacao in teste:
            contexto = anotacao["caracteristicas"]["context"]
            participante = str(anotacao["caracteristicas"]["trial"])
            target = anotacao["caracteristicas"]["target"]
            
            A = ass.parse(anotacao["descricao"]) 
            
            #random.shuffle(atributos)
            descricao = IncrementalAlgorithmRelational3(contextos[contexto], target, preferencia, False).run()
            B = ass.parse(descricao)
            
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1
                acuraciaFold[fold] = acuraciaFold[fold] + 1
            numeroDescricoes = numeroDescricoes + 1
            numeroDescricoesFold[fold] = numeroDescricoesFold[fold] + 1
            
            mediaFoldDice[fold].append(DICE)
            mediaFoldMasi[fold].append(MASI)
            mediaDice.append(DICE)
            mediaMasi.append(MASI)
            
            anotacao["dice"] = DICE
            anotacao["masi"] = MASI
            anotacao["algoritmo"] = descricao
    
    #         print anotacao["descricao"]
    #         print anotacao["algoritmo"]
    #         print anotacao["caracteristicas"]
    #         print anotacao["dice"] 
    #         print anotacao["masi"] 
    #         print 100 * "*"
        print "Fold: " + fold
        print "DICE: " + str(num.mean(mediaFoldDice[fold]))
        print "MASI: " + str(num.mean(mediaFoldMasi[fold]))
        print "Acuracia: " + str(acuraciaFold[fold] / numeroDescricoesFold[fold])
        print 20 * "*"
    
    print 10 * "-" 
    print "Geral: "
    print "DICE: " + str(num.mean(mediaDice))
    print "MASI: " + str(num.mean(mediaMasi))
    print "Acuracia: " + str(acuracia / numeroDescricoes)
    print 10 * "-" 
    print "\n"
예제 #5
0
def run(dominios, targets, anotacoes, atributos):
        
    frequencia = countAttributeFrequency(anotacoes)
    
    lista_preferencia = {}
    
    
    lista_preferencia["target"]  = []
    while len(frequencia["target"]) != 0:
        maximo = max(frequencia["target"].values())
        
        for key in frequencia["target"].keys():
            if frequencia["target"][key] == maximo:
                lista_preferencia["target"].append(key)
                del(frequencia["target"][key])
       
    lista_preferencia["landmark"]  = []         
    while len(frequencia["landmark"]) != 0:
        maximo = max(frequencia["landmark"].values())
        
        for key in frequencia["landmark"].keys():
            if frequencia["landmark"][key] == maximo:
                lista_preferencia["landmark"].append(key)
                del(frequencia["landmark"][key])
    
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    
    for anotacao in anotacoes:
        contexto = anotacao["caracteristicas"]["context"]
        participante = str(anotacao["caracteristicas"]["trial"])
        
        A = ass.parse(anotacao["descricao"])
        
        #random.shuffle(atributos)
        descricao = IncrementalAlgorithmRelational3(dominios[contexto], targets[contexto], lista_preferencia, False).run()
        B = ass.parse(descricao, targets[contexto])
        
        DICE = ass.dice(A, B)
        MASI = ass.masi(A, B)
        
        if DICE == 1.0:
            acuracia = acuracia + 1
        numeroDescricoes = numeroDescricoes + 1
        
        mediaDice.append(DICE)
        mediaMasi.append(MASI)
        
        anotacao["dice"] = DICE
        anotacao["masi"] = MASI
        anotacao["algoritmo"] = descricao
    
#         print anotacao["descricao"]
#         print anotacao["algoritmo"]
#         print anotacao["caracteristicas"]
#         print anotacao["dice"] 
#         print anotacao["masi"] 
#         print 100 * "*"
        
    print num.mean(mediaDice)
    print num.mean(mediaMasi)
    print acuracia / numeroDescricoes
    print "\n"
    
    print lista_preferencia
예제 #6
0
def run(dominios, targets, folds, atributos, participantes, incluirParticipante):
    featureVector = parser.parseFeatureVector(dominios, targets)
    
    inputs = {}
    
    for fold in folds:
        frequencias = countAttributeFrequencyIndividual(folds, fold)
        inputs[fold] = parser.parseSVMInput(folds[fold], featureVector, participantes, frequencias, incluirParticipante)
        
    
    resultadoTotal = []
    dice = []
    masi = []
    acuracia = 0.0
    
#     print 10 * "*"
#     if incluirParticipante == True:
#         print "SVM com o id do participante"
#     else:
#         print "SVM sem o id do participante"
#     print 10 * "*"
    
    for fold in ["1","2","3","4","5","6"]:
        print "FOLD: " + fold
        resultados = svm.run(inputs, fold)
        resultadoTotal.append(resultados)
        acertos = resultados[0]
        total = resultados[1]
        expressoes = resultados[2]
        
        tp = resultados[3]
        tn = resultados[4]
        fp = resultados[5]
        fn = resultados[6]
        
        for expressao in expressoes:
            contexto = expressao["anotacao"]["caracteristicas"]["context"]
            
            descricao = defineExpressao(expressao["previsoes"], dominios[contexto], targets[contexto])
            descricaoR = expressao["anotacao"]["descricao"]
            
            A = ass.parse(descricao)
            B = ass.parse(descricaoR)
            
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1.0
            
            dice.append(DICE)
            masi.append(MASI)
#             if expressao["previsoes"]["relation"] > 0:
#                 print "Descricao Prevista : " + str(expressao["previsoes"])
#                 print "Descricao Prevista : " + str(descricao)
#                 print "Descricao Real : " + str(expressao["classes"])
#                 print "Descricao Real : " + str(descricaoR)
#                 print "Dice: " + str(DICE)
#                 print 30 * "-"
        
        for atributo in acertos.keys():
            print "Atributo: " + str(atributo)
            print "Acuracia: " + str(acertos[atributo] / total[atributo])
#             print "Verdadeiros Positivos: " + str(tp[atributo])
#             print "Falsos Positivos: " + str(fp[atributo])
#             print "Verdadeiros Negativos: " + str(tn[atributo])
#             print "Falsos Negativos: " + str(fn[atributo])
            print 10 * "-"
         
        print 50 * "*"
        
    print 50 * "*"
    print "Expressoes: "
    print "Dice Total: " + str(np.mean(dice))
    print "Masi Total: " + str(np.mean(masi))
    print "Acuracia: " + str(acuracia / len(dice))
    print 50 * "*"

    acertosT = {}
    totalT = {}
    
    for resultados in resultadoTotal:
        acertos = resultados[0]
        total = resultados[1]
        
        for atributo in acertos.keys():
            if atributo not in acertosT:
                acertosT[atributo] = 0.0
                totalT[atributo] = 0.0
            
            acertosT[atributo] = acertosT[atributo] + acertos[atributo]
            totalT[atributo] = totalT[atributo] + total[atributo]
            
    for atributo in acertosT.keys():
        print "Atributo: " + str(atributo)
        print "Acuracia: " + str(acertosT[atributo] / totalT[atributo])
        print 10 * "-"
        
    return resultadoTotal, dice, masi, acuracia
예제 #7
0
def run(dominios, targets, folds, atributos, participantesInput, incluirParticipante):
    featureVector = parser.parseFeatureVector(dominios, targets)
    
    inputs = {}
    frequencias = {}
    participantes = {}
    
    # Inicializa Vetor de Caracteristicas
    for fold in folds:
        frequencias[fold] = utils.countAttributeFrequencyIndividual(folds, fold)
        participantes[fold] = parser.descriptionsMeans(folds, fold, dominios)
        inputs[fold] = parser.parseSVMInput(folds[fold], featureVector, participantes[fold], frequencias[fold], incluirParticipante)
    
    resultadoTotal = []
    diceTotal = []
    masiTotal = []
    acuraciaTotal = 0.0
    
    for testeFold in folds:
        teste = folds[testeFold]
        inputTeste = inputs[testeFold]
        
        treinamentoFolds = {}
        inputsTreinamento = {}
        
        for foldAux in folds:
            if foldAux != testeFold:
                treinamentoFolds[foldAux] = folds[foldAux]
                inputsTreinamento[foldAux] = inputs[foldAux]
        
        combinacoes = run_validation(dominios, treinamentoFolds, featureVector, participantesInput, incluirParticipante)
         
        resultados = svm.run2(inputsTreinamento, inputTeste, combinacoes)
        resultadoTotal.append(resultados)
        acertos = resultados[0]
        total = resultados[1]
        expressoes = resultados[2]
         
        tp = resultados[3]
        tn = resultados[4]
        fp = resultados[5]
        fn = resultados[6]
         
        dice = []
        masi = []
        acuracia = 0
        
        for expressao in expressoes:
            contexto = expressao["anotacao"]["caracteristicas"]["context"]
             
            descricao = utils.defineExpressao(expressao["previsoes"], dominios[contexto], targets[contexto])
            descricaoR = expressao["anotacao"]["descricao"]
             
            A = ass.parse(descricao)
            B = ass.parse(descricaoR)
             
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
             
#             print 20 * "-"
#             print descricaoR
#             print descricao
#             print DICE
#             print 20 * "-"
             
            if DICE == 1.0:
                acuracia = acuracia + 1.0
                acuraciaTotal = acuraciaTotal + 1.0
             
            dice.append(DICE)
            masi.append(MASI)
            diceTotal.append(DICE)
            masiTotal.append(MASI)
         
#         for atributo in acertos.keys():
#             print "Attribute: " + str(atributo)
#             print "Accuracy: " + str(acertos[atributo] / total[atributo])
#             print 10 * "-"
#           
#         print 50 * "*"
#          
#         print "\n"
#         print "General:"
#         print 50 * "*"
#         print "Expressions: "
#         print "Dice: " + str(np.mean(dice))
#         print "Masi: " + str(np.mean(masi))
#         print "Accuracy: " + str(acuracia / len(dice))
#         print "\n"
     
#     print "\n"
#     print "General:"
#     print 50 * "*"
#     print "Expressions: "
#     print "Dice: " + str(np.mean(diceTotal))
#     print "Masi: " + str(np.mean(masiTotal))
#     print "Accuracy: " + str(acuraciaTotal / len(diceTotal))
#     print "\n"       
    acertosT = {}
    totalT = {}
    
    for resultados in resultadoTotal:
        acertos = resultados[0]
        total = resultados[1]
        
        for atributo in acertos.keys():
            if atributo not in acertosT:
                acertosT[atributo] = 0.0
                totalT[atributo] = 0.0
            
            acertosT[atributo] = acertosT[atributo] + acertos[atributo]
            totalT[atributo] = totalT[atributo] + total[atributo]
    
#     print "Attributes:"
#     print 15 * "-"     
#     for atributo in acertosT.keys():
#         print "Attribute: " + str(atributo)
#         print "Accuracy: " + str(acertosT[atributo] / totalT[atributo])
#         print 10 * "-"  
    
    return resultadoTotal, diceTotal, masiTotal, acuraciaTotal
def run(dominios, targets, folds, atributos, participantes, incluirParticipante):
    featureVector = parser.parseFeatureVector(dominios, targets)
    
    inputs = {}
    
    # Cross Validation
    #folds = cross.crossValidation(6, annotations)
    
    # Inicializa Vetor de Caracteristicas
    for fold in folds:
        frequencias = countAttributeFrequencyIndividual(folds, fold)
        inputs[fold] = parser.parseSVMInputSecondVersion(folds[fold], featureVector, participantes, frequencias, incluirParticipante)
    
    resultadoTotal = []
    diceTotal = []
    masiTotal = []
    acuraciaTotal = 0.0
    
    for testeFold in folds:
        teste = folds[testeFold]
        inputTeste = inputs[testeFold]
        
        treinamentoFolds = {}
        inputsTreinamento = {}
        
        for foldAux in folds:
            if foldAux != testeFold:
                treinamentoFolds[foldAux] = folds[foldAux]
                inputsTreinamento[foldAux] = inputs[foldAux]
        
        acertos = {}
        total = {}
        tp = {}
        tn = {}
        fp = {}
        fn = {}
        
        keys = folds.keys()
        keys.sort()
        for fold in treinamentoFolds:
#             print "Fold: ", fold
#             print 50 * "-"
            resultados = svm.run(inputsTreinamento, fold)
            
            for combination in resultados.keys():
                if combination not in acertos.keys():
                    acertos[combination] = {}
                    total[combination] = {}
                    tp[combination] = {}
                    tn[combination] = {}
                    fp[combination] = {}
                    fn[combination] = {}
                
                for svm1 in resultados[combination][0].keys():
                    if svm1 not in acertos[combination].keys():
                        acertos[combination][svm1] = 0.0
                        total[combination][svm1] = 0.0
                        tp[combination][svm1] = 0.0
                        tn[combination][svm1] = 0.0
                        fp[combination][svm1] = 0.0
                        fn[combination][svm1] = 0.0
                    
                    acertos[combination][svm1] = acertos[combination][svm1] + resultados[combination][0][svm1]
                    total[combination][svm1] = total[combination][svm1] + resultados[combination][1][svm1]
                    tp[combination][svm1] = tp[combination][svm1] + resultados[combination][3][svm1]
                    tn[combination][svm1] = tn[combination][svm1] + resultados[combination][4][svm1]
                    fp[combination][svm1] = fp[combination][svm1] + resultados[combination][5][svm1]
                    fn[combination][svm1] = fn[combination][svm1] + resultados[combination][6][svm1]
        
        combinacoes = {}
        acuracias = {}
        for combination in acertos.keys():
            aux = combination.split(",")
            C = float(aux[0])
            gamma = float(aux[1])
            
#             print 20 * "-"
#             print str(C) + " - " + str(gamma)
#             print 20 * "-"
            
            for svm1 in acertos[combination].keys():
                acuracia = acertos[combination][svm1] / total[combination][svm1]
#                 print str(svm1) + ": " + str(acuracia)
                if svm1 not in combinacoes.keys():
                    acuracias[svm1] = acuracia
                    combinacoes[svm1] = {}
                    combinacoes[svm1]["C"] = C
                    combinacoes[svm1]["gamma"] = gamma
                elif acuracia > acuracias[svm1]:
                    acuracias[svm1] = acuracia
                    combinacoes[svm1]["C"] = C
                    combinacoes[svm1]["gamma"] = gamma
        
#         print "\n"
#         print "Combinacao: " + str(combinacoes)
         
         
        resultados = svm.run2(inputsTreinamento, inputTeste, combinacoes)
        resultadoTotal.append(resultados)
        acertos = resultados[0]
        total = resultados[1]
        expressoes = resultados[2]
         
        tp = resultados[3]
        tn = resultados[4]
        fp = resultados[5]
        fn = resultados[6]
         
        dice = []
        masi = []
         
        for expressao in expressoes:
            contexto = expressao["anotacao"]["caracteristicas"]["context"]
             
            descricao = defineExpressao(expressao["previsoes"], dominios[contexto], targets[contexto])
            descricaoR = expressao["anotacao"]["descricao"]
             
            A = ass.parse(descricao)
            B = ass.parse(descricaoR)
             
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
             
#             print 20 * "-"
#             print descricaoR
#             print descricao
#             print DICE
#             print 20 * "-"
             
            if DICE == 1.0:
                acuracia = acuracia + 1.0
                acuraciaTotal = acuraciaTotal + 1.0
             
            dice.append(DICE)
            masi.append(MASI)
            diceTotal.append(DICE)
            masiTotal.append(MASI)
         
#         for atributo in acertos.keys():
#             print "Attribute: " + str(atributo)
#             print "Accuracy: " + str(acertos[atributo] / total[atributo])
#             print 10 * "-"
#           
#         print 50 * "*"
#          
#         print "\n"
#         print "General:"
#         print 50 * "*"
#         print "Expressions: "
#         print "Dice: " + str(np.mean(dice))
#         print "Masi: " + str(np.mean(masi))
#         print "Accuracy: " + str(acuracia / len(dice))
#         print "\n"
     
    print "\n"
    print "General:"
    print 50 * "*"
    print "Expressions: "
    print "Dice: " + str(np.mean(diceTotal))
    print "Masi: " + str(np.mean(masiTotal))
    print "Accuracy: " + str(acuraciaTotal / len(diceTotal))
    print "\n"       
    acertosT = {}
    totalT = {}
    
    for resultados in resultadoTotal:
        acertos = resultados[0]
        total = resultados[1]
        
        for atributo in acertos.keys():
            if atributo not in acertosT:
                acertosT[atributo] = 0.0
                totalT[atributo] = 0.0
            
            acertosT[atributo] = acertosT[atributo] + acertos[atributo]
            totalT[atributo] = totalT[atributo] + total[atributo]
    
    print "Attributes:"
    print 15 * "-"     
    for atributo in acertosT.keys():
        print "Attribute: " + str(atributo)
        print "Accuracy: " + str(acertosT[atributo] / totalT[atributo])
        print 10 * "-"        
예제 #9
0
def run(trials, folds, atributos, participantes, incluirParticipante):
    featureVector = parser.parseFeatureVector(trials)
    
    frequencias = {}
    inputs = {}
    for fold in folds:
        frequencias[fold] = countAttributeFrequency(folds, fold)
        participantes[fold] = parser.descriptionsMeans(folds, fold)
        inputs[fold] = parser.parseSVMInput(folds[fold], featureVector, participantes[fold], frequencias[fold], incluirParticipante)
    
    resultadoTotal = []
    dice = []
    masi = []
    acuracia = 0.0
    
#     print 10 * "*"
#     if incluirParticipante == True:
#         print "SVM com o id do participante"
#     else:
#         print "SVM sem o id do participante"
#     print 10 * "*"
    
    for fold in ["1","2","3","4","5","6", "7","8","9","10"]:
#         print "FOLD: " + fold
        resultados = tree.run(inputs, fold)
        resultadoTotal.append(resultados)
        acertos = resultados[0]
        total = resultados[1]
        expressoes = resultados[2]
        
        tp = resultados[3]
        tn = resultados[4]
        fp = resultados[5]
        fn = resultados[6]
        
        for expressao in expressoes:
            descricao = defineExpressao(expressao)
            descricaoR = expressao[expressao.keys()[0]]["anotacao"]["descricao"]
            
            A = ass.parse(descricao)
            B = ass.parse(descricaoR)
            
            if len(A) == 0 and len(B) == 0:
                DICE = 0.0
                MASI = 0.0
            else:
                DICE = ass.dice(A, B)
                MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1.0
            
            dice.append(DICE)
            masi.append(MASI)
            
#             print "Descricao Prevista : " + str(descricao)
#             print "Descricao Real : " + str(descricaoR)
#             print "Dice: " + str(DICE)
#             print 30 * "-"
        
#         for atributo in acertos.keys():
#             print "Atributo: " + str(atributo)
#             print "Acuracia: " + str(acertos[atributo] / total[atributo])
# #             print "Verdadeiros Positivos: " + str(tp[atributo])
# #             print "Falsos Positivos: " + str(fp[atributo])
# #             print "Verdadeiros Negativos: " + str(tn[atributo])
# #             print "Falsos Negativos: " + str(fn[atributo])
#             print 10 * "-"
#          
#         print 50 * "*"
        
#     print 50 * "*"
#     print "Expressoes: "
#     print "Dice Total: " + str(np.mean(dice))
#     print "Masi Total: " + str(np.mean(masi))
#     print "Acuracia: " + str(acuracia / len(dice))
#     print 50 * "*"

    acertosT = {}
    totalT = {}
    
    for resultados in resultadoTotal:
        acertos = resultados[0]
        total = resultados[1]
        
        for atributo in acertos.keys():
            if atributo not in acertosT:
                acertosT[atributo] = 0.0
                totalT[atributo] = 0.0
            
            acertosT[atributo] = acertosT[atributo] + acertos[atributo]
            totalT[atributo] = totalT[atributo] + total[atributo]
            
#     for atributo in acertosT.keys():
#         print "Atributo: " + str(atributo)
#         print "Acuracia: " + str(acertosT[atributo] / totalT[atributo])
#         print 10 * "-"
        
    return resultadoTotal, dice, masi, acuracia
예제 #10
0
def parseSVMInput(anotacoes, featureVector, participantes, frequencias, incluiParticipante = True):
    input = []
    atributos = ["type", "colour", "hpos", "vpos", "near", "left", "right", "below", "above"]
    
    for participante in anotacoes:
        for anotacao in anotacoes[participante]:
            classes = {}
            vetor = []
            participante = anotacao["caracteristicas"]["trial"]
            contexto = anotacao["caracteristicas"]["context"]
            target = anotacao["caracteristicas"]["target"]
            
            if incluiParticipante == True:
                vetor.append(int(participante))
                
                genero = anotacao["caracteristicas"]["genre"]
                if genero == "m":
                    vetor.append(0)
                else:
                    vetor.append(1)
                    
                idade = int(anotacao["caracteristicas"]["age"])
                if idade <= 20:
                    vetor.append(0)
                elif idade > 20 and idade <= 25:
                    vetor.append(1)
                elif idade >= 26 and idade <= 30:
                    vetor.append(2)
                elif idade > 30 and idade <= 40:
                    vetor.append(3)
                elif idade > 40 and idade <= 50:
                    vetor.append(4)
                elif idade > 50 and idade <= 60:
                    vetor.append(5)
                else:
                    vetor.append(6)
                
                for atributo in atributos:
                    if atributo in frequencias[participante]["target"].keys():
                        vetor.append(frequencias[participante]["target"][atributo])
                    else:
                        vetor.append(0)
                                   
                for atributo in atributos:
                    if atributo in frequencias[participante]["landmark"].keys():
                        vetor.append(frequencias[participante]["landmark"][atributo])
                    else:
                        vetor.append(0)
            
                vetor.append(participantes[participante]["overspecification"])
                vetor.append(participantes[participante]["tg_description_size"])
                vetor.append(participantes[participante]["lm_description_size"])
                vetor.append(participantes[participante]["lm2_description_size"])
                vetor.append(participantes[participante]["num_relations"])
                vetor.append(participantes[participante]["overspecified_mean"])
                vetor.append(participantes[participante]["underspecified_mean"])
                vetor.append(participantes[participante]["minimal_mean"])
                      
            if featureVector[contexto]["relation"] == "none":
                vetor.append(0)
            elif featureVector[contexto]["relation"] == "horizontal":
                vetor.append(0)
            else:
                vetor.append(1)
            
            vetor.append(featureVector[contexto]["num_tg_col"])
            vetor.append(featureVector[contexto]["num_lm_col"])
            vetor.append(featureVector[contexto]["num_tg_type"])
            vetor.append(featureVector[contexto]["num_lm_type"])
            vetor.append(featureVector[contexto]["tg_lm_col"])
            vetor.append(featureVector[contexto]["tg_lm_type"])
            
            vetor.append(featureVector[contexto]["dp_tg_col"])
            vetor.append(featureVector[contexto]["dp_lm_col"])
            vetor.append(featureVector[contexto]["dp_tg_type"])
            vetor.append(featureVector[contexto]["dp_lm_type"])
            vetor.append(featureVector[contexto]["dp_tg_hpos"])
            vetor.append(featureVector[contexto]["dp_lm_hpos"])
            vetor.append(featureVector[contexto]["dp_tg_vpos"])
            vetor.append(featureVector[contexto]["dp_lm_vpos"])
      
            vetor.append(featureVector[contexto]["saliency_col"])
            vetor.append(featureVector[contexto]["saliency_type"])
            vetor.append(featureVector[contexto]["saliency_hpos"])
            vetor.append(featureVector[contexto]["saliency_vpos"])
            
            if "type" in anotacao["descricao"][target].keys():
                classes["type"] = 1
            else:
                classes["type"] = 0
            
            if "colour" in anotacao["descricao"][target].keys():
                classes["colour"] = 1
            else:
                classes["colour"] = 0
                
            if "hpos" in anotacao["descricao"][target].keys():
                classes["hpos"] = 1
            else:
                classes["hpos"] = 0
                
            if "vpos" in anotacao["descricao"][target].keys():
                classes["vpos"] = 1
            else:
                classes["vpos"] = 0
                
            if "near" in anotacao["descricao"][target].keys():
                classes["relation"] = 1
            elif "left" in anotacao["descricao"][target].keys():
                classes["relation"] = 2
            elif "right" in anotacao["descricao"][target].keys():
                classes["relation"] = 4
            elif "above" in anotacao["descricao"][target].keys():
                classes["relation"] = 3
            elif "below" in anotacao["descricao"][target].keys():
                classes["relation"] = 5
            else:
                classes["relation"] = 0
                
            if "landmark" in anotacao["caracteristicas"].keys():
                landmark = anotacao["caracteristicas"]["landmark"]
                
                if "type" in anotacao["descricao"][landmark].keys():
                    classes["lm_type"] = 1
                else:
                    classes["lm_type"] = 0
                
                if "colour" in anotacao["descricao"][landmark].keys():
                    classes["lm_colour"] = 1
                else:
                    classes["lm_colour"] = 0
                
                if "vpos" in anotacao["descricao"][landmark].keys():
                    classes["lm_vpos"] = 1
                else:
                    classes["lm_vpos"] = 0
                    
                if "hpos" in anotacao["descricao"][landmark].keys():
                    classes["lm_hpos"] = 1
                else:
                    classes["lm_hpos"] = 0
                    
                if "near" in anotacao["descricao"][landmark].keys():
                    classes["lm_relation"] = 1
                elif "left" in anotacao["descricao"][landmark].keys():
                    classes["lm_relation"] = 2
                elif "right" in anotacao["descricao"][landmark].keys():
                    classes["lm_relation"] = 4
                elif "above" in anotacao["descricao"][landmark].keys():
                    classes["lm_relation"] = 3
                elif "below" in anotacao["descricao"][landmark].keys():
                    classes["lm_relation"] = 5
                else:
                    classes["lm_relation"] = 0
            else:
                classes["lm_type"] = 0
                classes["lm_colour"] = 0
                classes["lm_vpos"] = 0
                classes["lm_hpos"] = 0
                classes["lm_relation"] = 0
                
            if "second-landmark" in anotacao["caracteristicas"].keys():
                landmark = anotacao["caracteristicas"]["second-landmark"]
                
                if "type" in anotacao["descricao"][landmark].keys():
                    classes["lm2_type"] = 1
                else:
                    classes["lm2_type"] = 0
                
                if "colour" in anotacao["descricao"][landmark].keys():
                    classes["lm2_colour"] = 1
                else:
                    classes["lm2_colour"] = 0
                
                if "vpos" in anotacao["descricao"][landmark].keys():
                    classes["lm2_vpos"] = 1
                else:
                    classes["lm2_vpos"] = 0
                    
                if "hpos" in anotacao["descricao"][landmark].keys():
                    classes["lm2_hpos"] = 1
                else:
                    classes["lm2_hpos"] = 0
            else:
                classes["lm2_type"] = 0
                classes["lm2_colour"] = 0
                classes["lm2_vpos"] = 0
                classes["lm2_hpos"] = 0
                 
            classes["description_size"] = len(ass.parse(anotacao["descricao"])) / 2
               
            data = {}
            data["data"] = vetor
            data["classes"] = classes
            data["anotacao"] = anotacao
            input.append(data)
    
    return input
예제 #11
0
def run(dominios, targets, folds, atributos, probabilidade):
    
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    mediaDiceSuperespecificada = []
    mediaMasiSuperespecificada = []
    acuraciaSuperespecificada = 0.
    numeroDescricoesSuperespecificada = 0.
    
    for i in range(1, len(folds)+1):
        fold = str(i)
        print "Fold: ", fold
        print 50 * "-"
        
        [treinamento, teste] = toList(folds, fold)
        frequencia = countAttributeFrequency(treinamento)
    
        preferencia = getListaPreferencia(frequencia, atributos)
        
        frequencia = countAttributeFrequency(treinamento)
        
        mediaFoldDice = []
        mediaFoldMasi = []
        acuraciaFold = 0.
        numeroDescricoesFold = 0.
        mediaFoldDiceSuperespecificada = []
        mediaFoldMasiSuperespecificada = []
        acuraciaFoldSuperespecificada = 0.
        numeroDescricoesFoldSuperespecificada = 0.
    
        for anotacao in teste:
            contexto = anotacao["caracteristicas"]["context"]
            participante = str(anotacao["caracteristicas"]["trial"])
            
            numeroExpressoesParticipante = 0
            for annotation in treinamento:
                if annotation["caracteristicas"]["trial"] == participante:
                    numeroExpressoesParticipante = numeroExpressoesParticipante + 1
            
            A = ass.parse(anotacao["descricao"]) 
            
            #random.shuffle(atributos)
            #descricao = IncrementalAlgorithmRelational3(dominios[contexto], targets[contexto], preferencia[participante], False).run()
            descricao = IncrementalAlgorithmRelational5(dominios[contexto], targets[contexto], preferencia[participante],
                                                        frequencia[participante], probabilidade, numeroExpressoesParticipante, False).run()
            B = ass.parse(descricao, targets[contexto])
            
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1
                acuraciaFold = acuraciaFold + 1
            numeroDescricoes = numeroDescricoes + 1
            numeroDescricoesFold = numeroDescricoesFold + 1
            
            mediaDice.append(DICE)
            mediaMasi.append(MASI)
            
            mediaFoldDice.append(DICE)
            mediaFoldMasi.append(MASI)
            
            anotacao["dice_personalizado"] = DICE
            anotacao["masi_personalizado"] = MASI
            anotacao["algoritmo_personalizado"] = descricao
            
            
            descricao = IncrementalAlgorithmRelationalOverspecified(dominios[contexto], targets[contexto], preferencia[participante],
                                                        frequencia[participante], probabilidade, numeroExpressoesParticipante, False).run()
            B = ass.parse(descricao, targets[contexto])
            
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuraciaSuperespecificada = acuraciaSuperespecificada + 1
                acuraciaFoldSuperespecificada = acuraciaFoldSuperespecificada + 1
            numeroDescricoesSuperespecificada = numeroDescricoesSuperespecificada + 1
            numeroDescricoesFoldSuperespecificada = numeroDescricoesFoldSuperespecificada + 1
            
            mediaDiceSuperespecificada.append(DICE)
            mediaMasiSuperespecificada.append(MASI)
            
            mediaFoldDiceSuperespecificada.append(DICE)
            mediaFoldMasiSuperespecificada.append(MASI)
            
            anotacao["dice_personalizado_superespecificado"] = DICE
            anotacao["masi_personalizado_superespecificado"] = MASI
            anotacao["algoritmo_personalizado_superespecificado"] = descricao
#             print anotacao["descricao"]
#             print anotacao["algoritmo"]
#             print anotacao["caracteristicas"]
#             print anotacao["dice"] 
#             print anotacao["masi"] 
#             print 50 * "*"
            
        print "Dice: ", num.mean(mediaFoldDice)
        print "Masi: ",num.mean(mediaFoldMasi)
        print "Acuracia: ",acuraciaFold / numeroDescricoesFold
        print "Dice Superespecificado: ", num.mean(mediaFoldDiceSuperespecificada)
        print "Masi Superespecificado: ",num.mean(mediaFoldMasiSuperespecificada)
        print "Acuracia Superespecificado: ",acuraciaFoldSuperespecificada / numeroDescricoesFoldSuperespecificada
        print "\n"
        
    print "Dice: ", num.mean(mediaDice)
    print "Masi: ",num.mean(mediaMasi)
    print "Acuracia: ",acuracia / numeroDescricoes
    print "Dice Superespecificado: ", num.mean(mediaDiceSuperespecificada)
    print "Masi Superespecificado: ",num.mean(mediaMasiSuperespecificada)
    print "Acuracia Superespecificado: ",acuraciaSuperespecificada / numeroDescricoesSuperespecificada
    print "\n"
    
    return folds
예제 #12
0
def run(dominios, folds, atributos, targets, probabilidade):
    
    diceGeral = []
    masiGeral = []
    acuraciaGeral = []
    diceGeralSuperespecificada = []
    masiGeralSuperespecificada = []
    acuraciaGeralSuperespecificada = []
    anotacoes = {}
    
    print 50 * "*"
    print 50 * "-"
    print "Experimento Stars Global"
    print 50 * "-"
    
    for fold in folds:
        print 50 * "-"
        print "FOLD: ", fold
        print 50 * "-"
        [treinamento, teste] = toList(folds, fold)
        
        anotacoes[fold] = {}
    
        frequencia = countAttributeFrequency(treinamento)
        
        lista_preferencia = getListaPreferencia(frequencia, atributos)
        
        frequencia = countAttributeFrequency(treinamento)
        
        # inclui os atributos nao mencionados no final da lista de preferencia
#         random.shuffle(atributos)
#         for atributo in atributos:
#             if atributo not in lista_preferencia["target"]:
#                 lista_preferencia["target"].append(atributo)
#               
#             if atributo not in lista_preferencia["landmark"]:
#                 lista_preferencia["landmark"].append(atributo)
        
        mediaDice = []
        mediaMasi = []
        mediaDiceSuperespecificada = []
        mediaMasiSuperespecificada = []
        acuracia = 0.
        acuraciaSuperespecificada = 0.
        numeroDescricoes = 0.
        numeroDescricoesSuperespecificada = 0.
        
        for anotacao in teste:
            contexto = anotacao["caracteristicas"]["context"]
            participante = str(anotacao["caracteristicas"]["trial"])
            
            A = ass.parse(anotacao["descricao"])
            
            
            descricao = IncrementalAlgorithmRelational5(dominios[contexto], targets[contexto], lista_preferencia, frequencia, probabilidade, len(treinamento), False).run()
            B = ass.parse(descricao)
                
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1
            numeroDescricoes = numeroDescricoes + 1
            
            mediaDice.append(DICE)
            mediaMasi.append(MASI)
            
            anotacao["dice_global"] = DICE
            anotacao["masi_global"] = MASI
            anotacao["algoritmo_global"] = descricao
            
            descricao = IncrementalAlgorithmRelationalOverspecified(dominios[contexto], targets[contexto], lista_preferencia, frequencia, probabilidade, len(treinamento), False).run()
            B = ass.parse(descricao)
                
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuraciaSuperespecificada = acuraciaSuperespecificada + 1
            numeroDescricoesSuperespecificada = numeroDescricoesSuperespecificada + 1
            
            mediaDiceSuperespecificada.append(DICE)
            mediaMasiSuperespecificada.append(MASI)
            
            anotacao["dice_global_superespecificado"] = DICE
            anotacao["masi_global_superespecificado"] = MASI
            anotacao["algoritmo_global_superespecificado"] = descricao
            
            anotacoes[fold][participante] = anotacao
            
#             print anotacao["descricao"]
#             print anotacao["algoritmo_global"]
#             print anotacao["caracteristicas"]
#             print anotacao["dice_global"] 
#             print anotacao["masi_global"] 
#             print 50 * "*"
            
        print "DICE: ", num.mean(mediaDice)
        print "MASI: ", num.mean(mediaMasi)
        print "ACURACIA: ", acuracia / numeroDescricoes
        print "\n"
        
        diceGeral.append(num.mean(mediaDice))
        masiGeral.append(num.mean(mediaMasi))
        acuraciaGeral.append(acuracia / numeroDescricoes)
        diceGeralSuperespecificada.append(num.mean(mediaDiceSuperespecificada))
        masiGeralSuperespecificada.append(num.mean(mediaMasiSuperespecificada))
        acuraciaGeralSuperespecificada.append(acuraciaSuperespecificada / numeroDescricoesSuperespecificada)
        
#         for key in lista_preferencia:
#             print key, lista_preferencia[key]
    print 50 * "-"
    print "GERAL: "
    print 50 * "-"
    print "DICE: ", num.mean(diceGeral)
    print "MASI: ", num.mean(masiGeral)
    print "ACURACIA: ", num.mean(acuraciaGeral)
    print "DICE SUPERESPECIFICADO: ", num.mean(diceGeralSuperespecificada)
    print "MASI SUPERESPECIFICADO: ", num.mean(masiGeralSuperespecificada)
    print "ACURACIA SUPERESPECIFICADA: ", num.mean(acuraciaGeralSuperespecificada)
    print 50 * "*"
    print "\n"
    
    return anotacoes
예제 #13
0
def run(dominios, targets, anotacoes, atributos):
    
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    
    print 50 * "*"
    print 50 * "-"
    print "Experimento Zoom Randomico"
    print 50 * "-"
    
    for anotacao in anotacoes:
        contexto = anotacao["caracteristicas"]["context"]
        target = targets[contexto]
        
        A = []
        for expressao in anotacao["anotacoes"].keys():
            A.extend(ass.parse(anotacao["anotacoes"][expressao]))
        A = set(A)
        
        atributos.remove("type")
        random.shuffle(atributos)
        atributos.insert(0, "type")
        
        descricao = ie.run(dominios[contexto], target, atributos, False)
        
        B = []
        i = 0
        for expressao in descricao.keys():
            B.extend(ass.parse(descricao[expressao], targets[contexto][i]))
            i = i + 1
        B = set(B)
        
        DICE = ass.dice(A, B)
        MASI = ass.masi(A, B)
        
        if DICE == 1.0:
            acuracia = acuracia + 1
        numeroDescricoes = numeroDescricoes + 1
        
        mediaDice.append(DICE)
        mediaMasi.append(MASI)
        
        anotacao["dice"] = DICE
        anotacao["masi"] = MASI
        anotacao["algoritmo"] = descricao
    
#         print anotacao["descricao"]
#         print anotacao["algoritmo"]
#         print anotacao["caracteristicas"]
#         print anotacao["dice"] 
#         print anotacao["masi"] 
#         print 50 * "*"
        
    print "DICE: ", num.mean(mediaDice)
    print "MASI: ",num.mean(mediaMasi)
    print "ACURACIA: ",acuracia / numeroDescricoes
    print 50 * "*"
    print "\n"
    
    return anotacoes
        
예제 #14
0
def run(contextos, anotacoes, atributos):
        
    frequencia = countAttributeFrequency(anotacoes)
    
    lista_preferencia = {}
    preferencia = {}
    
    for participante in frequencia.keys():
        if participante not in lista_preferencia.keys():
            lista_preferencia[participante]  = {}
            lista_preferencia[participante]["target"]  = []
            lista_preferencia[participante]["landmark"]  = []
            preferencia[participante]  = {}
            preferencia[participante]["target"]  = []
            preferencia[participante]["landmark"]  = []
    
        while len(frequencia[participante]["target"]) != 0:
            maximo = max(frequencia[participante]["target"].values())
            
            for key in frequencia[participante]["target"].keys():
                if frequencia[participante]["target"][key] == maximo:
                    lista_preferencia[participante]["target"].append(key)
                    del(frequencia[participante]["target"][key])
                  
        while len(frequencia[participante]["landmark"]) != 0:
            maximo = max(frequencia[participante]["landmark"].values())
            
            for key in frequencia[participante]["landmark"].keys():
                if frequencia[participante]["landmark"][key] == maximo:
                    lista_preferencia[participante]["landmark"].append(key)
                    del(frequencia[participante]["landmark"][key])
    
    
        for atributo in lista_preferencia[participante]["target"]:
            if atributo in atributos:
                preferencia[participante]["target"].append(atributo)
        
        preferencia[participante]["landmark"]  = []
        for atributo in lista_preferencia[participante]["landmark"]:
            if atributo in atributos:
                preferencia[participante]["landmark"].append(atributo)
        
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    
    frequencia = countAttributeFrequency(anotacoes)
    
    for anotacao in anotacoes:
        contexto = anotacao["caracteristicas"]["context"]
        participante = str(anotacao["caracteristicas"]["trial"])
        target = anotacao["caracteristicas"]["target"]
        
        A = ass.parse(anotacao["descricao"]) 
        
        numeroExpressoesParticipante = 0
        
        for annotation in anotacoes:
            if annotation["caracteristicas"]["trial"] == participante:
                numeroExpressoesParticipante = numeroExpressoesParticipante + 1
        
        #random.shuffle(atributos)
        descricao = IncrementalAlgorithmRelational5(contextos[contexto], target, preferencia[participante],
                                                    frequencia[participante], 0.7, numeroExpressoesParticipante, True).run()
        B = ass.parse(descricao)
        
        DICE = ass.dice(A, B)
        MASI = ass.masi(A, B)
        
        if DICE == 1.0:
            acuracia = acuracia + 1
        numeroDescricoes = numeroDescricoes + 1
        
        mediaDice.append(DICE)
        mediaMasi.append(MASI)
        
        anotacao["dice"] = DICE
        anotacao["masi"] = MASI
        anotacao["algoritmo"] = descricao
    
#         print anotacao["descricao"]
#         print anotacao["algoritmo"]
#         print anotacao["caracteristicas"]
#         print anotacao["dice"] 
#         print anotacao["masi"] 
#         print 100 * "*"
        
    print "DICE: " + str(num.mean(mediaDice))
    print "MASI: " + str(num.mean(mediaMasi))
    print "Acuracia: " + str(acuracia / numeroDescricoes)
    print "\n"
예제 #15
0
def run(folds, atributos, probabilidade):
    
    diceGeral = []
    masiGeral = []
    acuraciaGeral = []
    diceGeralSuperespecificada = []
    masiGeralSuperespecificada = []
    acuraciaGeralSuperespecificada = []
    
    anotacoes = {}
    
    print 50 * "*"
    print 50 * "-"
    print "Experimento TUNA Furniture Personalizado"
    print 50 * "-"
    
    for fold in folds:
        print 50 * "-"
        print "FOLD: ", fold
        print 50 * "-"
        [treinamento, teste] = toList(folds, fold)
        
        anotacoes[fold] = {}
    
        frequencia = countAttributeFrequency(treinamento)
    
        preferencia = getListaPreferencia(frequencia, atributos)
        
        frequencia = countAttributeFrequency(treinamento)
            
            # inclui os atributos nao mencionados no final da lista de preferencia
#             random.shuffle(atributos)
#             for atributo in atributos:
#                 if atributo not in lista_preferencia[participante]["target"]:
#                     lista_preferencia[participante]["target"].append(atributo)
#                    
#                 if atributo not in lista_preferencia[participante]["landmark"]:
#                     lista_preferencia[participante]["landmark"].append(atributo)
        
        mediaDice = []
        mediaMasi = []
        acuracia = 0.
        numeroDescricoes = 0. 
        mediaDiceSuperespecificada = []
        mediaMasiSuperespecificada = []
        acuraciaSuperespecificada = 0.
        numeroDescricoesSuperespecificada = 0.  
        
        for anotacao in teste:
            participante = str(anotacao["caracteristicas"]["participante"])
            target = anotacao["caracteristicas"]["target"]
            
            numeroExpressoesParticipante = 0
            for annotation in treinamento:
                if annotation["caracteristicas"]["participante"] == participante:
                    numeroExpressoesParticipante = numeroExpressoesParticipante + 1
            
            A = ass.parse(anotacao["descricao"])
            
            descricao = IncrementalAlgorithmRelational5(anotacao["domain"], target, preferencia[participante], 
                                            frequencia[participante], probabilidade, numeroExpressoesParticipante, False).run()
            B = ass.parse(descricao)
                
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1
            numeroDescricoes = numeroDescricoes + 1
            
            mediaDice.append(DICE)
            mediaMasi.append(MASI)
            
            anotacao["dice_personalizado"] = DICE
            anotacao["masi_personalizado"] = MASI
            anotacao["algoritmo_personalizado"] = descricao
            
            descricao = IncrementalAlgorithmRelationalOverspecified(anotacao["domain"], target, preferencia[participante], 
                                            frequencia[participante], probabilidade, numeroExpressoesParticipante, False).run()
            B = ass.parse(descricao)
                
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuraciaSuperespecificada = acuraciaSuperespecificada + 1
            numeroDescricoesSuperespecificada = numeroDescricoesSuperespecificada + 1
            
            mediaDiceSuperespecificada.append(DICE)
            mediaMasiSuperespecificada.append(MASI)
            
            anotacao["dice_personalizado_superespecificado"] = DICE
            anotacao["masi_personalizado_superespecificado"] = MASI
            anotacao["algoritmo_personalizado_superespecificado"] = descricao
            
            #anotacoes[fold][participante] = anotacao
            
#             print anotacao["descricao"]
#             print anotacao["algoritmo_personalizado"]
#             print anotacao["caracteristicas"]
#             print anotacao["dice_personalizado"] 
#             print anotacao["masi_personalizado"] 
#             print 50 * "*"
            
        print "DICE: ", num.mean(mediaDice)
        print "MASI: ", num.mean(mediaMasi)
        print "ACURACIA: ", acuracia / numeroDescricoes
        print "\n"
        
        diceGeral.append(num.mean(mediaDice))
        masiGeral.append(num.mean(mediaMasi))
        acuraciaGeral.append(acuracia / numeroDescricoes)
        diceGeralSuperespecificada.append(num.mean(mediaDiceSuperespecificada))
        masiGeralSuperespecificada.append(num.mean(mediaMasiSuperespecificada))
        acuraciaGeralSuperespecificada.append(acuraciaSuperespecificada / numeroDescricoesSuperespecificada)
#         for participante in lista_preferencia:
#             print participante, lista_preferencia[participante]

    print 50 * "-"
    print "GERAL: "
    print 50 * "-"
    print "DICE: ", num.mean(diceGeral)
    print "MASI: ", num.mean(masiGeral)
    print "ACURACIA: ", num.mean(acuraciaGeral)
    print "DICE SUPERESPECIFICADO: ", num.mean(diceGeralSuperespecificada)
    print "MASI SUPERESPECIFICADO: ", num.mean(masiGeralSuperespecificada)
    print "ACURACIA SUPERESPECIFICADA: ", num.mean(acuraciaGeralSuperespecificada)
    print 50 * "*"
    print "\n"
    return folds
예제 #16
0
def run(dominios, targets, folds, atributos, probabilidade):
    
    mediaDice = []
    mediaMasi = []
    acuracia = 0.
    numeroDescricoes = 0.
    mediaDiceSuperespecificada = []
    mediaMasiSuperespecificada = []
    acuraciaSuperespecificada = 0.
    numeroDescricoesSuperespecificada = 0.
    
    for i in range(1, len(folds)+1):
        fold = str(i)
        
        print "Fold: ", fold
        print 50 * "-"
        
        [treinamento, teste] = toList(folds, fold)
        frequencia = countAttributeFrequency(treinamento)
        
        lista_preferencia = getListaPreferencia(frequencia, atributos)
        
        frequencia = countAttributeFrequency(treinamento)
        
        mediaFoldDice = []
        mediaFoldMasi = []
        acuraciaFold = 0.
        numeroDescricoesFold = 0.
        mediaFoldDiceSuperespecificada = []
        mediaFoldMasiSuperespecificada = []
        acuraciaFoldSuperespecificada = 0.
        numeroDescricoesFoldSuperespecificada = 0.
    
        for anotacao in teste:
            contexto = anotacao["caracteristicas"]["context"]
            participante = str(anotacao["caracteristicas"]["trial"])
            
            A = []
            for expressao in anotacao["anotacoes"].keys():
                A.extend(ass.parse(anotacao["anotacoes"][expressao]))
            A = set(A)
            
            #random.shuffle(atributos)
            descricao = ie5.run(dominios[contexto], targets[contexto], lista_preferencia, False)
            
            B = []
            i = 0
            for expressao in descricao.keys():
                B.extend(ass.parse(descricao[expressao], targets[contexto][i]))
                i = i + 1
            B = set(B)
            
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuracia = acuracia + 1
                acuraciaFold = acuraciaFold + 1
            numeroDescricoes = numeroDescricoes + 1
            numeroDescricoesFold = numeroDescricoesFold + 1
            
            mediaDice.append(DICE)
            mediaMasi.append(MASI)
            
            mediaFoldDice.append(DICE)
            mediaFoldMasi.append(MASI)
            
            anotacao["dice_global"] = DICE
            anotacao["masi_global"] = MASI
            anotacao["algoritmo_global"] = descricao
            
            descricao = ieo.run(dominios[contexto], targets[contexto], lista_preferencia, frequencia, probabilidade, len(treinamento), False)
            
            B = []
            i = 0
            for expressao in descricao.keys():
                B.extend(ass.parse(descricao[expressao], targets[contexto][i]))
                i = i + 1
            B = set(B)
            
            DICE = ass.dice(A, B)
            MASI = ass.masi(A, B)
            
            if DICE == 1.0:
                acuraciaSuperespecificada = acuraciaSuperespecificada + 1
                acuraciaFoldSuperespecificada = acuraciaFoldSuperespecificada + 1
            numeroDescricoesSuperespecificada = numeroDescricoesSuperespecificada + 1
            numeroDescricoesFoldSuperespecificada = numeroDescricoesFoldSuperespecificada + 1
            
            mediaDiceSuperespecificada.append(DICE)
            mediaMasiSuperespecificada.append(MASI)
            
            mediaFoldDiceSuperespecificada.append(DICE)
            mediaFoldMasiSuperespecificada.append(MASI)
            
            anotacao["dice_global_superespecificado"] = DICE
            anotacao["masi_global_superespecificado"] = MASI
            anotacao["algoritmo_global_superespecificado"] = descricao
        
#             print anotacao["descricao"]
#             print anotacao["algoritmo"]
#             print anotacao["caracteristicas"]
#             print anotacao["dice"] 
#             print anotacao["masi"] 
#             print 50 * "*"
            
        print "Dice: ", num.mean(mediaFoldDice)
        print "Masi: ",num.mean(mediaFoldMasi)
        print "Acuracia: ",acuraciaFold / numeroDescricoesFold
        print "Dice Superespecificado: ", num.mean(mediaFoldDiceSuperespecificada)
        print "Masi Superespecificado: ",num.mean(mediaFoldMasiSuperespecificada)
        print "Acuracia Superespecificado: ",acuraciaFoldSuperespecificada / numeroDescricoesFoldSuperespecificada
        print "\n"
        
    print "Dice: ", num.mean(mediaDice)
    print "Masi: ",num.mean(mediaMasi)
    print "Acuracia: ",acuracia / numeroDescricoes
    print "Dice Superespecificado: ", num.mean(mediaDiceSuperespecificada)
    print "Masi Superespecificado: ",num.mean(mediaMasiSuperespecificada)
    print "Acuracia Superespecificado: ",acuraciaSuperespecificada / numeroDescricoesSuperespecificada
    print "\n"
    
    return folds