Construindo Regressão Polinomial
Carregando Arquivo
Para este capítulo, temos um arquivo chamado poly.csv
, que vamos carregar primeiro e analisar seu conteúdo:
123456import 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))
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:
123456789import 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()
É 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 X̃. 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 X̃ 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)
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 X̃, 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.
12345678910111213141516171819import 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()
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.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 5.26
Construindo 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:
123456import 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))
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:
123456789import 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()
É 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 X̃. 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 X̃ 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)
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 X̃, 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.
12345678910111213141516171819import 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()
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.
Obrigado pelo seu feedback!