• Nenhum resultado encontrado

Recomenda¸c˜ ao de Parˆ ametros com Aprendizado Generativo Probabil´ıstico

Generativo Probabil´ıstico

A Recomenda¸c˜ao de parˆametros ´e uma das principais funcionalidades do sistema proposto. Com ela, o usu´ario pode especificar valores para alguns parˆametros e receber recomenda¸c˜oes sobre quais valores as features n˜ao observadas devem ter, de modo a ma- ximizar a probabilidade de uma determinada classe. Ressalta-se aqui que at´e mesmo qual valor da classe que se deseja obter com as features ´e um parˆametro, sendo este obrigat´o- rio para o algoritmo de recomenda¸c˜ao. Essa parametriza¸c˜ao aumenta a flexibilidade do sistema.

Este m´odulo ´e o ´unico escrito em Java e utilizando a biblioteca Weka. Essa escolha ´e devido a capacidade de recuperarmos as Probabilidades Condicionais calculadas pelo modelo para serem utilizadas no algoritmo de recomenda¸c˜ao.

Como a maior parte das funcionalidades do sistema est´a escrito em Python, foi necess´ario uma integra¸c˜ao desta componente escrita em Java. Para isso foi utilizada a

40 biblioteca JPype [7]. Esta ferramenta permite instanciar classes Java como objetos do Python, facilitando a programa¸c˜ao. O C´odigo 3.4 detalha como o processo de integra¸c˜ao ´e realizado. 1 2 def fit(self): 3 if not (isJVMStarted()): 4 classpath = "lib/bayesNetRecomendation.jar:lib/weka-stable-3.8.0.jar:lib/bounce-0.18.jar"

5 startJVM(getDefaultJVMPath(), "-Djava.class.path=%s" % classpath) 6

7 try:

8 self.notify("Loading data path...", ’SUP’)

9 path = Configuration.load_query_result("RECOMENDER") 10 data = pd.read_csv(path)

11 self.notify("Loading libraries...", ’SUP’) 12 lib = JPackage("com").dlp.bayesnetrecomendation 13 self.notify("Fitting recomender...", ’SUP’) 14 self.recomender = lib.BayesianRecomendator(path) 15 self.fields = data.columns.values

16 self.notify("OK", ’SUP’)

17 except Exception as e:

18 self.notify("ERROR - " + str(e), ’SUP’)

C´odigo Fonte 3.4: C´odigo do sistema respons´avel pela integra¸c˜ao com a componente escrita em Java

Nas linhas 2 a 4, usam-se m´etodos da biblioteca JPype para inicializa¸c˜ao da Java Virtual Machine (JVM) [6]. Nas linhas 8 e 9 os dados extra´ıdos pela consulta SQL e salvos em um arquivo csv s˜ao carregados para que o sistema reconhe¸ca quais os campos podem ser recomendados. A linhas 11 mostra o carregamento do pacote Java que possui a classe que ir´a realizar a recomenda¸c˜ao. J´a na linha 13 ´e mostrada instancia¸c˜ao do Recomendador, que tamb´em ´e respons´avel pela chamada do m´etodo de treinamento. Note que tal m´etodo recebe como parˆametro o caminho do arquivo csv onde os dados extra´ıdos est˜ao salvos.

Bayes, ou seja assume a indepˆendencia das vari´aveis dado o valor da classe.

Uma vez que o modelo Naive Bayes foi constru´ıdo, somos capazes de recuperar Probabilidades Condicionais do tipo P (X1 | C). A ideia b´asica por tr´as da recomen- da¸c˜ao realizada pelo sistema ´e a seguinte: assumindo a indepˆendencia entre as v´ari´aveis dado a classe, temos que a probabilidade de uma classe dado um conjunto de v´ari´aveis ´e igual a probabilidade da classe vezes o produt´orio entre as probabilidades de cada vari´avel dado a classe. A partir disso, uma vez que o sistema recebe um conjunto contendo parte dos parˆametros com valores associados, ´e obter os valores para os demais parˆametros de forma que o valor do produt´orio das probabilidades utilizando as parˆametros observa- dos acrescentado desse novo parˆametro com um respectivo valor associado seja o maior poss´ıvel.

O primeiro passo ´e calcular a probabilidade a priori que obtemos por meio das vari´aveis observadas. Isso ´e poss´ıvel devido o armazenamento esses dados. Para uma maior facilidade de implementa¸c˜ao, esses probabilidades foram armazenadas em uma estrutura de dados que facilite o acesso.

De posse da probabilidade a priori dado as vari´aveis observadas e o valor da classe, iteramos por todas as probabilidades armazenadas para a vari´avel n˜ao observada a pro- cura daquela que maximize a probabilidade posteriori. Com isso obtemos a resposta e retornamos ao usu´ario.

No trecho de C´odigo 3.5 ´e apresentado o m´etodo respons´avel pela recomenda¸c˜ao. O m´etodo recebe uma lista de vari´aveis observadas, ou seja, s˜ao as vari´aveis que o usu´ario definiu os valores. O segundo parˆametro ´e a vari´avel classe, que define com rela¸c˜ao a que valor da classe devemos procurar as Probabilidades Condicionais. J´a o ´ultimo parˆametro ´e o nome da vari´avel que queremos a recomenda¸c˜ao, ou seja a vari´avel n˜ao observada. Note que a recomenda¸c˜ao ocorre para uma vari´avel por vez, isso quer dizer que se o usu´ario na interface do sistema deixar mais que uma vari´avel n˜ao observada, o sistema se encarregar´a de chamar este m´etodo para cada uma delas.

1 public String recomender(List<Variable> aPrioriVariables, Variable B,

String posterioriVariableName) throws Exception {

2 double maxProbability = 0, prioriProbability = 1;

3 String variableValueRecomedation = null; 4 for (Variable temp : aPrioriVariables) {

42 5 double cp = network.getConditionalProbability(temp, B); 6 prioriProbability *= cp; 7 } 8 List<ConditionalProbability> cps = network.getCpts().get(posterioriVariableName); 9 for (ConditionalProbability cp : cps) { 10 if (cp.getB().getName().equals(B.getName()) && cp.getB().getValue().equals(B.getValue())) {

11 double tempProbability = prioriProbability;

12 tempProbability *= cp.getProbability(); 13 if (tempProbability > maxProbability) { 14 maxProbability = tempProbability; 15 variableValueRecomedation = cp.getA().getValue(); 16 } 17 } 18 } 19 return variableValueRecomedation; 20 }

C´odigo Fonte 3.5: Algoritmo para recomenda¸c˜ao de parˆametros

No C´odigo 3.5, o loop das linhas 4 a 7 recupera as probabilidades de cada uma das var´ıaveis observadas dado a vari´avel de classe. J´a na linha 8 recuperamos todas as probabilidades condicionais armazenadas. Das linhas 9 a 18, ´e realizada a itera¸c˜ao sobre todas as Probabilidades Condicionais relativas a vari´avel n˜ao observada, procurando por aquelas onde a v´ariavel de classe possui o mesmo valor da informada como parˆametro do m´etodo.

Cap´ıtulo 4

Estudo de Caso com o Sistema de

Gerenciamento de Workflows

Cient´ıficos SciCumulus

A fim de obter resultados experimentais com a solu¸c˜ao criada, foram utilizados os dados de proveniˆencia criados pelo SGWfC SciCumulus durante execu¸c˜oes do worflow cient´ıfico SciPhy [29] no ambiente de Computa¸c˜ao em Nuvem. O SciPhy ´e um workflow cient´ıfico da ´area da Biologia desenvolvido para construir ´arvores filogen´eticas. Como os dados salvos pelo SciCumulus est˜ao numa base de dados relacional, a extra¸c˜ao de dados se d´a por meio de consultas SQL. Para os testes foi utilizada uma base de dados reais, mas que devido `a ausˆencia de execu¸c˜oes com falha, sofreu algumas modifica¸c˜oes.

Estamos interessados em analisar os quatro modelos que desempenham as tarefas executadas pelo sistema: Detec¸c˜ao de Falhas e Recomend¸c˜ao de Parˆametros. A tarefa de Detec¸c˜ao de Falhas pode ser executada sob 3 perspectivas distintas: com o classificador determin´ıstico SVM, como o classificador probabil´ıstico Naive Bayes e com o detector de anomalias SVM OneClass.

Para realizar a tarefa de Detec¸c˜ao de Falhas usando o modelo de Aprendizado de M´aquina SVM temos a necessidade de dados que sejam tanto de execu¸c˜oes de sucesso quanto de falha para treinamento do modelo.

1 select sir.num_aligns, sir.length, sir.model1, sir.prob1, sir.model2,

sir.prob2, 2

44

3 case

4 when pea_sids.failure_tries <> 0 or pea_sids.exitstatus <> 0 then true 5 when pea_sim.failure_tries <> 0 or pea_sim.exitstatus <> 0 then true 6 when pea_sirs.failure_tries <> 0 or pea_sirs.exitstatus <> 0 then true 7 when pea_simg.failure_tries <> 0 or pea_simg.exitstatus <> 0 then true 8 when pea_sir.failure_tries <> 0 or pea_sir.exitstatus <> 0 then true

9 when ((sir.model1 = ’WAG+G’ AND sir.length > 250) OR (sir.model2 = ’JTT+G’ and sir.prob2 > 1000)) then true

10 else false

11 end as erro

12

13 from sciphy.idataselection sids, sciphy.imafft sim, sciphy.ireadseq sirs, sciphy.imodelgenerator simg, sciphy.iraxml sir,

14 public.eactivation pea_sids, public.eactivation pea_sim, public.eactivation pea_sirs, public.eactivation pea_simg, public.eactivation pea_sir

15

16 where sids.name = sim.name and

17 sids.name = sirs.name and 18 sids.name = simg.name and 19 sids.name = sir.name and

20 sids.taskid = pea_sids.taskid and 21 sim.taskid = pea_sim.taskid and 22 sirs.taskid = pea_sirs.taskid and 23 simg.taskid = pea_simg.taskid and 24 sir.taskid = pea_sir.taskid;

C´odigo Fonte 4.1: Consulta de extra¸c˜ao de dados para treinamento do modelo SVM Em 4.1 ´e poss´ıvel visualizar a consulta utilizada para os testes do SVM, Naive Bayes e removendo a ´ultima coluna e acrescentando a restri¸c˜ao para retornar registro de falhas apenas, temos tamb´em a consulta para o modelo One-Class. Observe que a consulta possui um trecho que ´e respons´avel por modificar os dados para que haja dados de execu¸c˜oes com falha. OS dados extra´ıdos s˜ao os parˆametros de entrada da atividade desempenhada pelo programa RAxML, sendo eles num aligns, length, model1, prob1, model2, prob2 e o estado da execu¸c˜ao para esses parˆametros referenciada pela coluna

erro. Esta consulta retornou 400 tuplas da base de dados de proveniˆencia. Para o caso dos modelos supervisionados, a divid˜ao dos dados se deu com 376 exemplos de sucesso de execu¸c˜ao e 24 exemplos de falha.

A base de dados de proveniˆencia foi dividida para as fases de treinamento e teste dos modelos. A divis˜ao foi feita tirando 80% dos dados iniciais para treinamento, enquanto os 20% finais ficaram para teste.

Todas as execu¸c˜oes foram executadas numa m´aquina com as seguintes configura- ¸c˜oes: processador Celeron(R) Dual-Core CPU T3300 @ 2.00GHz × 2, Mem´oria RAM 4GB DDR2, Disco R´ıgido de 132GB e taxa de transferˆencia de 300 MBps. O Sistema Operacional ´e o Ubuntu, uma distribui¸c˜ao do Linux, na vers˜ao 14.04 LTS 64 bits.

4.1

Resultados do Classificador SVM

O modelo SVM possui alguns paramˆetros a serem calibrados. Dependendo do tipo de kernel utilizado, diferentes parˆametros s˜ao necess´arios. Contudo, fixaremos alguns parˆametros para todos os experimentos com o SVM. O primeiro ´e o parˆametro C, que ´e respons´avel por escalar a penalidade do modelo durante o treinamento, ser´a fixado com o valor 1. Esta penalidade ´e calculada com base na taxa de erro do modelo a cada itera¸c˜ao do algoritmo do SVM, com o intuito de analisar se o modelo est´a sendo aprimorado a cada itera¸c˜ao. Um valor muito alto do C pode causar um overfitting do modelo, enquanto um valor muito baixo pode causar um underfitting.

A fun¸c˜ao de kernel Radial Basis Function (RBF), que ´e o que assume uma dis- tribui¸c˜ao Gaussiana dos exemplos, admite o parˆametro gamma. Este parˆametro define o quanto um ´unico exemplo afeta o modelo, ou seja, quanto maior o valor, maior a influˆen- cia de um ´unico exemplo na constru¸c˜ao do modelo. J´a o kernel Polinomial, tem como parˆametro o degree, que nada mais ´e que o grau do polinˆomio usado para a fronteira de decis˜ao do modelo. Ainda foram testado os kernels Sigmoid e Linear. Esses kernels foram usados para teste tanto por serem os j´a dispon´ıveis pelo sklearn, quanto por serem os mais comuns para este tipo de tarefa.

A Tabela 4.1 traz dados sobre m´etricas coletadas a partir de execu¸c˜oes do sistema utilizando o classificador SVM. Apesar de serem apresentadas trˆes m´etricas, ser´a levada em conta para a an´alise a Precis˜ao. Essa escolha se d´a pelo fato desta m´etrica demonstrar

46 Kernel gamma degree Precision Recall F1-Score Treinamento (s)

RBF 0.1 - 0.90 0.95 0.93 0.20510s RBF 0.5 - 0.90 0.95 0.93 0.20024s RBF 1.0 - 0.90 0.95 0.93 0.20392s Polynomial - 3 0.92 0.91 0.92 0.33175s Polynomial - 4 0.90 0.93 0.91 0.35512s Polynomial - 5 0.92 0.76 0.83 0.33089s Sigmoid - - 0.90 0.95 0.93 0.16226s Linear - - 0.93 0.84 0.88 0.32627s

Tabela 4.1: Execu¸c˜oes do SVM

a porcentagem de acerto do modelo com rela¸c˜ao as suas predi¸c˜oes de uma classe.

Foi poss´ıvel perceber que o modelo com kernel RBF n˜ao teve modifica¸c˜oes ao variar o parˆametro gamma. Sua Precis˜ao se manteve em 90% para o conjunto de teste.

O kernel Polinomial para o degree igual a 3 ou 5 obteve melhor resultado relativo `a Precis˜ao que o kernel RBF, alcan¸cando o valor de 92%. Contudo o tempo de treinamento tamb´em foi superior.

Com resultados semalhantes ao kernel RBF, ficou o kernel Sigmoid. Sua diferen¸ca fica por conta do menor tempo de treinamento entre todos os kernel utilizados nestes experimentos.

O melhor resultado para a Precis˜ao ficou com o kernel Linear. Sua precis˜ao foi de 93%, e um tempo de treinamento entre os de maior e menor valores.

Devido ao desbalanceamento dos dados, a Precis˜ao superior do kernel Linear, de- monstra que para este caso, ele teve a melhor capacidade de generaliza¸c˜ao.

Documentos relacionados