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 matrizNumPyque é 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 matrizNumPyde 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:
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:
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.