Aprendizagem de Máquina

Fundamentos e Aplicações

Prof. Dr. Raphael Teixeira       Prof. Dr. Cleison Silva

Regressão polinomial

O problema de regressão pode ser conduzido utilizando a biblioteca scikit-learn do Python - Considerando os dados novamente:

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)

# Número de amostras
N = 10

# Entrada
x = np.linspace(0, 2*np.pi, N)

# base de tempo para a sin(x)
x_true = np.linspace(0, 2*np.pi, 100)
# Ruído gaussiano
noise = np.random.normal(0, 0.2, N)

# Saída
y = np.sin(x) + noise

# reshape para ML
X = x.reshape(-1,1)

plt.scatter(x, y, label='Dados ruidosos')
plt.plot(x_true, np.sin(x_true), color='green', label='Função verdadeira')
plt.legend()
plt.show()

Regressão polinomial sklearn

O problema de regressão pode ser conduzido utilizando a biblioteca scikit-learn do Python - Considerando os dados novamente:

Regressão polinomial sklearn

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# 1. Transformação: x -> [1, x, x^2, ..., x^M]
M = 3
poly = PolynomialFeatures(degree=M)

X = poly.fit_transform(X)

X
array([[  1.        ,   0.        ,   0.        ,   0.        ],
       [  1.        ,   0.6981317 ,   0.48738787,   0.34026092],
       [  1.        ,   1.3962634 ,   1.94955149,   2.72208739],
       [  1.        ,   2.0943951 ,   4.38649084,   9.18704494],
       [  1.        ,   2.7925268 ,   7.79820595,  21.77669912],
       [  1.        ,   3.4906585 ,  12.18469679,  42.53261547],
       [  1.        ,   4.1887902 ,  17.54596338,  73.49635954],
       [  1.        ,   4.88692191,  23.88200571, 116.70949686],
       [  1.        ,   5.58505361,  31.19282379, 174.21359298],
       [  1.        ,   6.28318531,  39.4784176 , 248.05021344]])

Regressão polinomial sklearn

# 2. Ajuste do Modelo (Equação Normal Interna)
model = LinearRegression()
model.fit(X, y)

# 3. Predição (na mesma base fina x_true, para uma curva suave)
X_true = poly.transform(x_true.reshape(-1, 1))
y_pred = model.predict(X_true)

# Visualização
plt.figure(figsize=(8, 5))
plt.scatter(x, y, facecolor="none", edgecolor="blue", s=80, label='Dados')
plt.plot(x_true, np.sin(x_true), color='green', label='$\sin(x)$')
plt.plot(x_true, y_pred, color='red', label=f'Sklearn (M={M})')
plt.legend()
plt.show()

print(f"Coeficientes aprendidos: {model.coef_}")
print(f"Intercepto (w0): {model.intercept_}")

Coeficientes aprendidos: [ 0.          1.73149405 -0.80743998  0.08504063]
Intercepto (w0): 0.006211319126946127