Classificação Multirrótulo: Calculando Similaridades entre Rótulos - Parte 4
Oi pessoal! Vamos continuar nossa aventura pelo R, RStudio e Classificação Multirrótulo? Vem comigo então.
Recapitulando
Este é o nosso script R até o momento:
A última coisa que fizemos foi o FOR para preencher automaticamente as matrizes que conterão os resultados das comparações.
Comando For
Antes de prosseguirmos, vamos dar uma olhada com um pouco mais de profundidade o comando For que usamos em nosso Script R. Você também pode ler este artigo aqui, que também é meu, para complementar o seu conhecimento sobre este comando!
A Figura a seguir mostra um formato básico de matriz usando como exemplo as matrizes do nosso problema, isto é, uma matriz com 5 colunas e 5 linhas:
Cada cruzamento entre linha e coluna corresponde a uma célula, então, Linha_1 com Coluna_1 temos a célula identificada como (linha_1 e coluna_1). Observe que a diagonal da tabela é o encontro de cada linha_x com sua coluna_x, exemplo: (linha_3, coluna_3).
Com essa Figura em mente fica muito mais fácil você entender o que acontece com o comando for e também os dataframes no R. Quando fazemos for(l in 1:5) estamos dizendo para o comando que ele deve ir da coluna 1 até a coluna 5 e a mudança de uma coluna para outra é feita de forma iterativa, ou automática, pelo comando for.
Este comando aqui L_1[,l] = (dataset_2[,l]==1), que vai dentro do for, é o mesmo que L1_1 = (dataset_2[,1]==1), L2_1 = (dataset_2[,2]==1) e assim por diante. Portanto, o comando L_1[,l] = (dataset_2[,l]==1) é uma abstração dos comandos repetitivos. O que fizemos foi automatizar a repetição.
Caso queira ver o comando em ação, você pode adicionar o comando cat() dentro do for e verificar o que está acontecendo, conforme o código a seguir:
# COM PRINT DAS VARIÁVEIS A CADA ITERAÇÃO
l = 1
for(l in 1:5){
cat("\nl =", l, "\n")
cat("ANTES: ")
print(L_0[,l])
L_0[,l] = (dataset_2[,l]==0)
cat("DEPOIS: ")
print(L_0[,l])
}
O \n é usado para pular linha na saída do console e tudo que está entre aspas é o texto que deverá ser impresso! Entre as aspas podemos colocar as variáveis usando vírgulas, e assim o valor da variável também é impressa no console.
Antes de executar este comando, crie novamente as matrizes, para que elas fiquem com os valores NAs em cada célula. Isto ajudará a ver melhor a diferença entre o antes e depois. Para isto, basta selecionar as linhas de código correspondentes e apertar CTRL+ENTER. A saída será a seguinte:
Fantástico não é mesmo?!!!! Quer imprimir as matrizes? Então faça o seguinte:
print(L_0)
print(L_1)
O comando print() vai imprir as variáveis que você colocar dentro dele. Veja que ele não é como cat() ok!? Se você quer imprimir na tela textos seus com as variáveis você deve usar cat(), se quer imprimir apenas os valores das variáveis, então use print(). A saída será:
Diminuindo número de linhas de código
Quer ver uma coisa legal? E se a gente usar um único for para as duas matrizes? Dá pra fazer. O ideal é que a gente sempre tente criar códigos com o máximo possível de otimização. Quero dizer que, ao invés de usarmos dois FORs, um para cada matriz, a gente pode usar um único for para as duas. Vejam:
# USANDO UM ÚNICO FOR PARA CALCULAR AS DUAS MATRIZES
l = 1
for(l in 1:5){
cat("\nl=", l)
L_0[,l] = (dataset_2[,l]==0)
L_1[,l] = (dataset_2[,l]==1)
}
Agora sim ficou bom ein! O cálculo é exatamente o mesmo, não muda absolutamente, no entanto, economizamos linhas e com isso o código também pode ficar mais legível.
Matriz de Similaridade
Agora que já sabemos um pouco sobre tabelas, matrizes, dataframes e outras coisas legais do R, podemos continuar com as similaridades. Recapitulando, para calcular o valor de a vamos usar a fórmula: a = ((Li == 1) E (Lj == 1)). Nós vamos, portanto, usar matrizes e dataframes para este cálculo, o que vai facilitar e muito a nossa vida. A matriz que precisamos construir é a seguinte:
Notem que essa matriz é composta por linhas e colunas as quais tem os nomes dos rótulos do nosso espaço de rótulos e é assim que deve ser para funcionar corretamente! São 5 rótulos e portanto teremos 25 combinações diferentes de pares de rótulos, vejam:
Agora imagina se o dataset for enorme e você ainda ter de fazer tudo isso manualmente? Não rola não é mesmo?! Então, vamos automatizar este processo também!
Marquei com cores diferentes as combinações que são compostas pelos mesmos rótulos mas em ordem diferente, apenas para enfatizar! Não podemos ignorar nenhuma dessas combinações pois, para os valores de a, b, c, e d da tabela de contingência o resultado será diferente!
Ótimo! Temos uma tabela de contingência que pode ser utilizada. Mas, vamos nos lembrar que precisamos usar esse mesmo padrão para quatro valores diferentes, isto é, temos de criar uma tabela para a, outra para b, outra pra c e outra para d. Não seria melhor então automatizar essa tarefa? Com certeza! E é isso o que veremos no próximo artigo!!!! Espero vocês lá. Até.
Download do script atualizado!!!
Este artigo foi escrito por Elaine Cecília Gatto - Cissa e publicado originalmente em Prensa.li.