HOWTO · Python

Faça ajuste de curva exponencial e logarítmica em Python

Este tutorial demonstra como fazer o ajuste de curva exponencial e logarítmico em Python.

Nesta página

O ajuste de curvas é uma ferramenta muito eficiente e amplamente utilizada para análise. O método de ajuste de curvas estuda a relação entre variáveis independentes, também conhecidas como preditores, e variáveis dependentes, conhecidas como variáveis de resposta. Este método visa fornecer o modelo mais adequado para ajustar uma certa quantidade de pontos de dados.

Existem dois tipos de ajuste de curvas:

  • Ajuste de curva logarítmica
  • Ajuste de curva exponencial

Neste tutorial, mostraremos métodos sobre como fazer o ajuste de curva logarítmico e o ajuste de curva exponencial em Python. Ambos usam o mesmo truque: tirar o logaritmo de uma variável para que o modelo se torne uma linha reta e, em seguida, ajustar essa linha com um ajuste polinomial de mínimos quadrados.

Bibliotecas e módulos usados para ajuste de curvas logarítmicas e exponenciais em Python

Vamos discutir as possíveis bibliotecas e módulos que você pode usar para executar programas.

a biblioteca NumPy

As funções que usaremos da biblioteca NumPy são as seguintes.

  • array() - Esta função é usada para criar uma matriz NumPy que é um conjunto do mesmo tipo de valores e tem valor de índice na forma de tuplas.
  • log() - Esta função é mais uma operação matemática que ajuda a calcular o logaritmo natural de um número. Esse número faz parte dos elementos da matriz de entrada.
  • exp() - Esta função também é uma operação matemática usada para calcular a exponencial de elementos presentes em uma matriz NumPy de entrada.
  • polyfit() - Esta função ajuda no ajuste de quaisquer dados em uma função polinomial. Ela faz um ajuste polinomial de mínimos quadrados.

a biblioteca Matplotlib

A biblioteca Matplotlib é usada principalmente para plotagem em Python. Esta biblioteca é geralmente usada para criar visualizações em Python. Um módulo desta biblioteca conhecido como módulo pyplot é usado neste tutorial.

O módulo pyplot da biblioteca Matplotlib é um módulo de código aberto que ajuda a fazer a biblioteca Matplotlib funcionar como o MATLAB. Este módulo tem muitas funções que nos ajudam a realizar operações como criar uma área de plotagem, criar rótulos em um gráfico, e muito mais.

o ajuste de curva logarítmica

Um modelo logarítmico tem a forma y = a * log(x) + b. Como o modelo é linear em log(x), você pode ajustá-lo executando um ajuste de linha reta de y em relação a log(x) — polyfit com grau 1 faz exatamente isso e retorna a e b:

import numpy as np

x = np.array([5, 10, 15, 20, 25])
y = np.array([3, 6, 9, 12, 15])

log_x = np.log(x)

coefficients = np.polyfit(log_x, y, 1)
print(coefficients)

Resultado:

[ 7.2647162  -9.64806344]

Portanto, o modelo ajustado é y = 7,2647 * log(x) - 9,6481. Para plotar, desenhe os dados e a linha ajustada em relação a log(x):

import numpy as np
import matplotlib.pyplot as plt

x = np.array([5, 10, 15, 20, 25])
y = np.array([3, 6, 9, 12, 15])

log_x = np.log(x)
slope, intercept = np.polyfit(log_x, y, 1)

fitted = slope * log_x + intercept
plt.plot(log_x, y, "o")
plt.plot(log_x, fitted)
plt.show()

Resultado:

logarithmic curve in python

No programa acima, primeiro importamos as bibliotecas necessárias e criamos duas matrizes NumPy como nossos dados primários. Tiramos o logaritmo apenas dos valores de x — o modelo é linear em log(x), então o próprio y não é transformado. A função polyfit() então ajusta uma linha reta a y em relação a log(x), e seus dois valores retornados são os coeficientes da equação logarítmica.

Observe que os dados de exemplo acima crescem linearmente em x, então trate isso como uma demonstração do procedimento; em dados reais, verifique o quanto a curva ajustada realmente corresponde antes de confiar no modelo.

o ajuste de curva exponencial

Um modelo exponencial tem a forma y = c * e^(d * x). Tirar o logaritmo natural de ambos os lados resulta em log(y) = log(c) + d * x, que novamente é uma linha reta — desta vez de log(y) em relação a x. Ajuste essa linha, e o intercepto lhe dá log(c):

import numpy as np

a = np.array([6, 12, 18, 24, 30])
b = np.array([4, 8, 12, 16, 20])

log_b = np.log(b)

coefficients = np.polyfit(a, log_b, 1)
print(coefficients)

Resultado:

[0.06520038 1.17018581]

A inclinação é d = 0,0652 e o intercepto é log(c) = 1,1702, então o modelo ajustado é b = e^1,1702 * e^(0,0652 * a). Para plotar, avalie esse modelo nos pontos de dados:

import numpy as np
import matplotlib.pyplot as plt

a = np.array([6, 12, 18, 24, 30])
b = np.array([4, 8, 12, 16, 20])

slope, intercept = np.polyfit(a, np.log(b), 1)
fitted = np.exp(intercept) * np.exp(slope * a)

plt.plot(a, b, "o")
plt.plot(a, fitted)
plt.show()

Resultado:

exponential curve in python

O mesmo procedimento é seguido como fizemos no ajuste de curva logarítmica, espelhado: lá transformamos a entrada (log(x)), aqui transformamos a saída (log(b)) e depois desfazemos a transformação com exp() ao avaliar o modelo ajustado. Como no exemplo logarítmico, os dados de exemplo são lineares, então isso demonstra a mecânica do ajuste exponencial, em vez de um caso em que o modelo exponencial é a escolha natural.