Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Interpolação vs Extrapolação | Regressão Polinomial
Regressão Linear com Python

bookInterpolação vs Extrapolação

No capítulo anterior, observamos que nossas previsões utilizando diferentes modelos estão se tornando mais diversas nas extremidades.

Para ser mais preciso, as previsões ficam estranhas no momento em que ultrapassamos o intervalo de valores do conjunto de treinamento. Prever valores fora do intervalo do conjunto de treinamento é chamado de extrapolação, enquanto prever valores dentro do intervalo é chamado de interpolação.

A regressão não lida bem com a extrapolação. Ela é utilizada para interpolação e pode gerar previsões absurdas quando novas instâncias estão fora do intervalo do conjunto de treinamento.

Intervalos de Confiança

Utilizando a classe OLS, também é possível obter os intervalos de confiança para a linha de regressão em qualquer ponto. No entanto, a sintaxe é um pouco complexa:

lower = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']

Onde alpha é o nível de confiança, geralmente definido como 0.05.
Com o código acima, você obterá os limites inferior e superior do intervalo de confiança da linha de regressão no ponto X_new_tilde (ou um array de limites superiores e inferiores se X_new_tilde for um array).

Diante disso, agora podemos plotar a linha de regressão juntamente com seu intervalo de confiança:

12345678910111213141516171819202122
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 4 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
copy

Sem conhecer a distribuição de um alvo, não é possível encontrar exatamente a linha de regressão. Tudo o que fazemos é tentar aproximá-la com base em nossos dados. O intervalo de confiança da linha de regressão é o intervalo no qual a linha de regressão exata se encontra com o nível de confiança alpha.
É possível observar que o intervalo se torna cada vez maior à medida que se afasta do intervalo do conjunto de treinamento.

Note
Nota

Os intervalos de confiança são construídos assumindo que o modelo foi escolhido corretamente (por exemplo, Regressão Linear Simples ou Regressão Polinomial de grau 4).

Se o modelo for escolhido de forma inadequada, o intervalo de confiança se torna não confiável, assim como a própria linha. Você aprenderá como selecionar o melhor modelo na próxima seção.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 5.26

bookInterpolação vs Extrapolação

Deslize para mostrar o menu

No capítulo anterior, observamos que nossas previsões utilizando diferentes modelos estão se tornando mais diversas nas extremidades.

Para ser mais preciso, as previsões ficam estranhas no momento em que ultrapassamos o intervalo de valores do conjunto de treinamento. Prever valores fora do intervalo do conjunto de treinamento é chamado de extrapolação, enquanto prever valores dentro do intervalo é chamado de interpolação.

A regressão não lida bem com a extrapolação. Ela é utilizada para interpolação e pode gerar previsões absurdas quando novas instâncias estão fora do intervalo do conjunto de treinamento.

Intervalos de Confiança

Utilizando a classe OLS, também é possível obter os intervalos de confiança para a linha de regressão em qualquer ponto. No entanto, a sintaxe é um pouco complexa:

lower = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = regression_model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']

Onde alpha é o nível de confiança, geralmente definido como 0.05.
Com o código acima, você obterá os limites inferior e superior do intervalo de confiança da linha de regressão no ponto X_new_tilde (ou um array de limites superiores e inferiores se X_new_tilde for um array).

Diante disso, agora podemos plotar a linha de regressão juntamente com seu intervalo de confiança:

12345678910111213141516171819202122
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 4 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
copy

Sem conhecer a distribuição de um alvo, não é possível encontrar exatamente a linha de regressão. Tudo o que fazemos é tentar aproximá-la com base em nossos dados. O intervalo de confiança da linha de regressão é o intervalo no qual a linha de regressão exata se encontra com o nível de confiança alpha.
É possível observar que o intervalo se torna cada vez maior à medida que se afasta do intervalo do conjunto de treinamento.

Note
Nota

Os intervalos de confiança são construídos assumindo que o modelo foi escolhido corretamente (por exemplo, Regressão Linear Simples ou Regressão Polinomial de grau 4).

Se o modelo for escolhido de forma inadequada, o intervalo de confiança se torna não confiável, assim como a própria linha. Você aprenderá como selecionar o melhor modelo na próxima seção.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4
some-alt