Esta seção corresponde a Line Charts, do capítulo 3 de Grus (2019).
Como já vimos, um gráfico de linha se faz com plt.plot. Ele é a boa escolha para mostrar tendências.
Para ilustrar, um exemplo emprestado do aprendizado de máquina: o compromisso entre viés e variância. Aqui ele serve só como forma — três curvas que contam uma história.
from matplotlib import pyplot as pltvariance = [1, 2, 4, 8, 16, 32, 64, 128, 256]bias_squared = [256, 128, 64, 32, 16, 8, 4, 2, 1]total_error = [x + y for x, y inzip(variance, bias_squared)]xs = [i for i, _ inenumerate(variance)]# dá para fazer várias chamadas a plt.plot# para mostrar várias séries no mesmo gráficoplt.plot(xs, variance, 'g-', label='variância') # linha verde sólidaplt.plot(xs, bias_squared, 'r-.', label='viés²') # traço-ponto vermelhoplt.plot(xs, total_error, 'b:', label='erro total') # linha azul pontilhada# como atribuímos label a cada série, a legenda sai de graça# loc=9 significa "centro no topo"plt.legend(loc=9)plt.xlabel("complexidade do modelo")plt.xticks([])plt.title("O compromisso viés-variância")plt.show()
Figura 15.1: O compromisso viés-variância: nove modelos, do mais simples ao mais complexo
Repare no que o gráfico mostra, e por que ele é o exemplo certo para uma seção sobre tendências.
Conforme a complexidade do modelo cresce da esquerda para a direita, o viés ao quadrado cai — modelos mais complexos erram menos sistematicamente. Ao mesmo tempo, a variância sobe — modelos mais complexos mudam mais de um conjunto de treino para outro.
O erro total, que é a soma dos dois, tem forma de U. Ele cai enquanto a redução de viés compensa o aumento de variância, e volta a subir quando a variância domina.
O ponto mais baixo do U é o que se procura: o modelo tão complexo quanto vale a pena, e não mais.
Isso dá forma visual ao diagnóstico de viés e variância. Se você está à esquerda do mínimo, tem problema de viés e precisa de mais complexidade. Se está à direita, tem problema de variância e precisa de menos — ou de mais dados, que empurram a curva de variância para baixo e deslocam o mínimo para a direita.
E note o que o gráfico deliberadamente não diz. O plt.xticks([]) apaga os números do eixo x: não existe uma escala de “complexidade” para marcar ali. Os números que sobram no eixo y também não significam nada em particular — são unidades inventadas para que as três curvas caibam no mesmo desenho. O gráfico não afirma quanto vale a complexidade nem quanto vale o erro; ele afirma a forma da relação entre os dois.
Séries múltiplas e legenda
O padrão é chamar plt.plot várias vezes antes de plt.show(). Cada chamada acrescenta uma série ao mesmo gráfico.
A string curta que aparece como terceiro argumento — 'g-', 'r-.', 'b:' — é uma abreviação que combina cor e estilo de linha: g de verde, r de vermelho, b de azul, e -, -., : para sólido, traço-ponto e pontilhado.
ImportanteCor sozinha não basta
A abreviação é conveniente, mas repare que cada série aqui tem cor e estilo diferentes, não apenas cor.
Isso não é preciosismo. Cerca de 8% dos homens têm alguma forma de daltonismo, gráficos são impressos em preto e branco com frequência, e projetores distorcem cor. Um gráfico que distingue séries só por cor deixa de funcionar em todos esses casos.
Estilo de linha, marcador e espessura são redundâncias baratas — e é por isso que os gráficos deste livro as usam.
Grus, Joel. 2019. Data Science from Scratch: First Principles with Python. 2nd ed. O’Reilly Media.