2
respostas

não entendi decision boundary

Não sei se pelo fato de eu ser cego, mas não entendi o que essa curva de decisão permite saber e como que posso ter os mesmos insights sobre curva de decisão sem utilizar gráficos.

Alguém poderia me ajudar sobre este assunto?

Meu interesse é:

  1. entender melhor tudo o que o Guilherme fez com o numpy e o porquê ele fez isso (falo sobre os pontos/pixels);
  2. entender como posso fazer isso de forma não gráfica.

Obrigado desde já!

2 respostas

Olá Pietro! Tudo bem com você? Espero que sim!

Primeiro, queria te pedir desculpas pela demora em te trazer uma resposta.

O objetivo da aula é montar uma curva de decisão que se caracteriza por funcionar como uma fronteira, que separa os resultados das classificações. Para que fosse possível plotar a curva, era necessário ter mapeado todos os pontos de teste que a figura do plot poderia ter, ou seja, uma matriz com todas as coordenadas de um gráfico, e limitar corretamente a separação entre cada ponto, foi utilizado o conceito da quantidade de pixels para limitação.

O preditct(pontos) definiu todas as previsões que o mapa do gráfico de teste poderia ter, criando uma matriz Z de valores 0 e 1. Nessa matriz há um limite que separa o resultado “0” do resultado “1”, que ele pode ser encontrado a partir da linha 19 segundo o código abaixo:

# inicio do código
Z = modelo.predict(pontos)
Z = Z.reshape(xx.shape)

dz = pd.DataFrame(Z)
tab = dz.loc[19:24,0:5]
tab
# fim do código

O resultado de tab pode ser analisado na tabela abaixo:

012345
19000000
20100000
21111000
22111110
23111111
24111111

Como Z é uma matriz 100 por 100, foi preferido trazer apenas um pequeno corte dessa matriz. O limite entre as linhas e colunas onde existe a troca da previsão 0 por 1, é o contorno da curva de decisão.

A curva de decisão, tem o objetivo de ser apresentada graficamente, mas isso não nos impede de buscar outras formas de analisar essa curva. Existe uma extensão do Google Chrome que faz tabelas e gráficos acessíveis para usuários cegos chamada de SAS Graphics Accelerator. Ela é uma opção de ferramenta para analisar vários tipos de gráficos e tabelas de uma forma bem acessível. Você pode instalar esse extensão por esse link da Chrome Web Store, a plataforma é bem intuitiva, mas se você tiver dificuldades, o SAS oferece um guia de início na sua documentação. Além disso, para a sua carreira de cientista de dados essa extensão pode ser bastante útil, inclusive em outros cursos que você fez ou vai fazer aqui na Alura.

Pietro, como a resposta ultrapassou o limite de caracteres, terei que dividir em duas postagens.

Continuação da resposta.

É possível plotar a curva de decisão mostrada no SAS Graphics Accelerator, mas vai precisar adicionar um pouquinho mais de código. O SAS plota um gráfico a partir de coordenadas no eixo X e no eixo Y que podem ser enviadas por meio de um documento cvs, por exemplo. Então o que precisamos fazer é coletar as coordenadas X e Y utilizadas para definir a curva de decisão dessa aula e transformá-las em um arquivo csv. Primeiro, seguindo a lógica de que a curva de decisão é a reta entre a troca de 0 por 1 da matriz Z, podemos catalogar todos os pontos dessa matriz que há a troca de 0 para 1, primeiro, definimos nas variáveis nlinhas e ncolunas a quantidade de linhas e colunas da matriz Z:

# início de código
# matriz Z criada pelo professor
Z = modelo.predict(pontos)
Z = Z.reshape(xx.shape)
#
nlinhas, ncolunas = len(Z),len(Z[0])
# fim de código

Com essas variáveis, é possível percorrer toda a matriz Z, linha a linha de todas as colunas, criando dois laços de repetição for. E dentro desses laços comparamos se o elemento da matriz passou de 0 para 1, caso tenha ocorrido essa troca, salvamos os índices em uma lista, como se segue:

# início de código
indices_limite = []
for c in range(0,ncolunas):
    for l in range(1,nlinhas):
        if (Z[l][c]!=Z[l-1][c]):
            indices_limite.append([l,c])
# fim de código

Os índices de Z correspondem aos mesmos índices das variáveis xx e yy, que são as variáveis de coordenadas do eixo X (horas_esperadas) e Y(preco) do gráfico. Então, a partir desses índices, definimos as coordenadas X e Y da curva de decisão. Como nosso objetivo é transformar esses dados em um arquivo csv, já podemos estruturá-los como um DataFrame por meio de um dicionário, sabendo que a primeira coluna se refere a variável xx e a segunda a variável yy. Temos a seguinte construção:

# início de código
curva = {'horas_esperadas':[],'preco':[]}
for l in range(1,len(indices_limite)):
    curva['horas_esperadas'].append(xx[indices_limite[l][0]][indices_limite[l][1]])
    curva['preco'].append(yy[indices_limite[l][0]][indices_limite[l][1]])
# fim de código

Por fim, transformamos o dicionário curva em um DataFrame e criamos o arquivo csv:

# início de código
curva = pd.DataFrame(curva)
curva.to_csv('curva.csv', index=True)
# fim de código

Você pode ativar a extensão SAS e clicar na opção “Laboratory”, depois clicar em “Tables” (ou "Tabelas", em português) e importar o arquivo curva.csv como tabela para gerar a curva lá. Essa extensão é toda em inglês, se você tiver dificuldade com essa língua você pode utilizar o tradutor do próprio navegador, só lembre de desativar a tradução antes de submeter o gráfico, pois pode gerar um bug. E se você precisar de ajuda com o SAS, manda mensagem aqui que eu te ajudo!

Eu espero ter conseguido te ajudar! Se surgir outra dúvida estarei à disposição ;-)

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!