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 entender 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̃
Utilizaremos novamente a classe OLS. Ainda assim, precisamos criar uma matriz X̃. Fazemos isso manualmente adicionando uma coluna 'Feature' ao DataFrame da seguinte forma:
df['Feature_squared'] = df['Feature'] ** 2
Porém, se quisermos construir uma regressão polinomial de grau elevado, será necessário adicionar várias colunas como esta. Felizmente, o Scikit-Learn oferece uma maneira menos trabalhosa de realizar essa tarefa 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 usando 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 1-d de pontos entre -0.1 e 1.5. Eles são necessários para visualização. E como é um array 1-d, 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
Can you explain what the X̃ matrix represents in polynomial regression?
How does the PolynomialFeatures class work in practice?
What happens if I increase the degree n in the polynomial regression?
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 entender 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̃
Utilizaremos novamente a classe OLS. Ainda assim, precisamos criar uma matriz X̃. Fazemos isso manualmente adicionando uma coluna 'Feature' ao DataFrame da seguinte forma:
df['Feature_squared'] = df['Feature'] ** 2
Porém, se quisermos construir uma regressão polinomial de grau elevado, será necessário adicionar várias colunas como esta. Felizmente, o Scikit-Learn oferece uma maneira menos trabalhosa de realizar essa tarefa 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 usando 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 1-d de pontos entre -0.1 e 1.5. Eles são necessários para visualização. E como é um array 1-d, 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!