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

bookConstruindo Regressão Polinomial

Carregando Arquivo

Para este capítulo, temos um arquivo chamado poly.csv, que vamos carregar primeiro e analisar seu conteúdo:

123456
import pandas as pd 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) print(df.head(5))
copy

Aqui temos uma variável de entrada e o alvo. Em seguida, construiremos um gráfico de dispersão para compreender a relação entre a variável e o alvo:

123456789
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

É difícil imaginar uma linha reta ajustando bem esses dados, portanto, a Regressão Polinomial será uma escolha muito melhor.

Construção da Matriz X̃

Será utilizada novamente a classe OLS. No entanto, é necessário criar manualmente a matriz . Isso é feito adicionando uma coluna ao DataFrame com o quadrado de 'Feature', conforme o exemplo:

df['Feature_squared'] = df['Feature'] ** 2

Porém, para construir uma regressão polinomial de grau elevado, seria necessário adicionar várias colunas dessa forma. Felizmente, o Scikit-Learn oferece uma maneira mais prática utilizando a classe PolynomialFeatures.

O método fit_transform(X) espera que X seja um array 2D ou um DataFrame do pandas. Se seu X for um array numpy 1D, o método reshape(-1,1) irá transformá-lo em um array 2D com o mesmo conteúdo:

X = X.reshape(-1,1)

Se seu X for uma coluna de um DataFrame, você pode usar X = df[['col1']] para obter um DataFrame ao invés de uma Series do pandas, que não é adequada para o fit_transform():

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Assim, para construir um para a Regressão Polinomial de grau n, utilizamos:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Nota

A classe PolynomialFeatures também adiciona uma coluna com 1s, portanto não é necessário utilizar sm.add_constant().

Construção da Regressão Polinomial e Realização das Previsões

Sabendo como obter um , estamos prontos para construir a Regressão Polinomial da mesma forma que os modelos anteriores:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Para prever novos valores, X_new também deve ser transformado utilizando PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

O exemplo executável a seguir mostra todo o processo de construção da regressão polinomial. X_new aqui é um array unidimensional de pontos entre -0.1 e 1.5. Eles são necessários para visualização. E como é um array unidimensional, devemos aplicar o método reshape(-1,1) antes de utilizá-lo na classe PolynomialFeatures.

12345678910111213141516171819
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 = 2 # 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).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Sinta-se à vontade para experimentar os valores de n na oitava linha. Você verá como o gráfico muda dependendo do grau da regressão polinomial. Se prestar atenção, poderá notar como as previsões diferem para valores da variável independente menores que 0 ou maiores que 1.4. Esse será o tema do próximo capítulo.

question mark

Considere o seguinte código. Em qual caso o código será executado sem erros?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3

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

bookConstruindo Regressão Polinomial

Deslize para mostrar o menu

Carregando Arquivo

Para este capítulo, temos um arquivo chamado poly.csv, que vamos carregar primeiro e analisar seu conteúdo:

123456
import pandas as pd 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) print(df.head(5))
copy

Aqui temos uma variável de entrada e o alvo. Em seguida, construiremos um gráfico de dispersão para compreender a relação entre a variável e o alvo:

123456789
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

É difícil imaginar uma linha reta ajustando bem esses dados, portanto, a Regressão Polinomial será uma escolha muito melhor.

Construção da Matriz X̃

Será utilizada novamente a classe OLS. No entanto, é necessário criar manualmente a matriz . Isso é feito adicionando uma coluna ao DataFrame com o quadrado de 'Feature', conforme o exemplo:

df['Feature_squared'] = df['Feature'] ** 2

Porém, para construir uma regressão polinomial de grau elevado, seria necessário adicionar várias colunas dessa forma. Felizmente, o Scikit-Learn oferece uma maneira mais prática utilizando a classe PolynomialFeatures.

O método fit_transform(X) espera que X seja um array 2D ou um DataFrame do pandas. Se seu X for um array numpy 1D, o método reshape(-1,1) irá transformá-lo em um array 2D com o mesmo conteúdo:

X = X.reshape(-1,1)

Se seu X for uma coluna de um DataFrame, você pode usar X = df[['col1']] para obter um DataFrame ao invés de uma Series do pandas, que não é adequada para o fit_transform():

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Assim, para construir um para a Regressão Polinomial de grau n, utilizamos:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Nota

A classe PolynomialFeatures também adiciona uma coluna com 1s, portanto não é necessário utilizar sm.add_constant().

Construção da Regressão Polinomial e Realização das Previsões

Sabendo como obter um , estamos prontos para construir a Regressão Polinomial da mesma forma que os modelos anteriores:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Para prever novos valores, X_new também deve ser transformado utilizando PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

O exemplo executável a seguir mostra todo o processo de construção da regressão polinomial. X_new aqui é um array unidimensional de pontos entre -0.1 e 1.5. Eles são necessários para visualização. E como é um array unidimensional, devemos aplicar o método reshape(-1,1) antes de utilizá-lo na classe PolynomialFeatures.

12345678910111213141516171819
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 = 2 # 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).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Sinta-se à vontade para experimentar os valores de n na oitava linha. Você verá como o gráfico muda dependendo do grau da regressão polinomial. Se prestar atenção, poderá notar como as previsões diferem para valores da variável independente menores que 0 ou maiores que 1.4. Esse será o tema do próximo capítulo.

question mark

Considere o seguinte código. Em qual caso o código será executado sem erros?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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