Polynomial Regression | Python Machine Learning
Regression is defined as the method to find relationship between the independent (input variable used in the prediction) and dependent (which is the variable you are trying to predict) variables to predict the outcome. If your data points clearly will not fit a linear regression (a straight line through all data points), it might be ideal for Polynomial Regression . This means that, in Polynomial Regression, there isn't always a linear relationship between independent variable and dependent variable. Sometime the relation is exponential or Nth order. The equation of the Polynomial Regression having an nth degree can be written as:
Polynomial Regression example | Python
Here, some data of Pressure and Temperature related to each stages. So, using Polynomial Regression , check whether the data is showing the True or False in each stage. By checking the data available, found that there is a non-linear relationship between the Pressure and the Temperature. So, the goal is to build a Truth detector regression model using Polynomial Regression. Below are the steps to build such a model.
Import the Python libraries
import numpy as nm
import matplotlib.pyplot as mtp
import pandas as pd
Define dataset
df = pd.DataFrame({"Stages" : (["Stage_1", "Stage_2", "Stage_3", "Stage_4", "Stage_5", "Stage_6", "Stage_7","Stage_8","Stage_9", "Stage_10" ]),
"Temperature": ([1,2,3,4,5,6,7,8,9,10]),
"Pressure":[0.45,0.5,0.6,0.8,1.1,1.5,2,3,5,10]})
Extracted the dependent(y) and independent variable(x) from the dataset.
x = df[['Temperature']]
y = df['Pressure']
The dataset contains three columns (Stages, Temperature, and Pressure), but, here consider only two columns (Temperature and Pressure). In the following Polynomial Regression model , predict the output for Temperature 6.5 somewhere between stage_6 and stage_7.
In building Polynomial Regression, it is better to take the Linear regression model as reference and compare both the output.
Building the Linear regression model
linear_regs= LinearRegression()
linear_regs.fit(x,y)
Above code create a Simple Linear model using linear_regs object of LinearRegression class and fitted it to the dataset variables (x and y).
Building the Polynomial regression model
polynomial_regs= PolynomialFeatures(degree= 2)
x_poly= polynomial_regs.fit_transform(x)
Above code used polynomial_regs.fit_transform(x) , because first it convert your feature matrix into polynomial feature matrix, and then fitting it to the Polynomial regression model. The argument (degree= 2) depends on your choice. You can choose it according to our Polynomial features .
After executing the code, you will get another matrix x_poly, which you can be seen under the Spyder variable explorer:

Next step is to use another LinearRegression object , namely linear_reg_2, to fit your x_poly vector to the linear model.
linear_reg_2 =LinearRegression()
linear_reg_2.fit(x_poly, y)
Linear regression Plot
Visualize the result for Linear regression model as you did in Simple Linear Regression.
mpl.scatter(x,y,color="blue")
mpl.plot(x,linear_regs.predict(x), color="red")
mpl.title("Truth detection model(Linear Regression)")
mpl.xlabel("Temperature")
mpl.ylabel("Pressure")
mpl.show()
output: 
Here, you can see that the regression line is so far from the datasets. Actual values in blue data points and Predictions are in a red straight line. If you consider this output to predict the value of Temperature, in some cases which is far away from the real value. So, you need a curved model to fit the dataset other than a straight line.
Polynomial Regression Plot
mpl.scatter(x,y,color="blue")
mpl.plot(x, linear_reg_2.predict(polynomial_regs.fit_transform(x)), color="red")
mpl.title("Truth detection model(Polynomial Regression)")
mpl.xlabel("Temperature")
mpl.ylabel("Pressure")
mpl.show()
Here, you have taken linear_reg_2.predict(poly_regs.fit_transform(x), instead of x_poly, because you want a Linear regressor object to predict the polynomial features matrix .

In the above image you can see the predictions are close to the real values. The above plot will vary as you will change the degree.
Change degree= 3
polynomial_regs= PolynomialFeatures(degree= 3)
output: 
Above image will give you a more accurate plot when you change the degree=3.
Change degree= 4
polynomial_regs= PolynomialFeatures(degree= 4)
output: 
Above image will give you a most accurate plot. So, you will get more accurate results by increasing the degree of Polynomial.
Predicting the final result
Next step is to predict the final output using the models to see whether the data is true or false.
Linear Regression model
Here use the predict() method and will pass the value 6.5.
lin_pred = linear_regs.predict([[6.5]])
print("Linear Regression model Prediction : " , lin_pred)
Linear Regression model Prediction : [3.30378788]
Polynomial Regression model
Here also use the predict() method and will pass the value 6.5.
poly_pred = linear_reg_2.predict(polynomial_regs.fit_transform([[6.5]]))
print("Polynomial Regression model Prediction : ", poly_pred)
Polynomial Regression model Prediction : [1.58862453]
Above code confirms that the predicted output for the Polynomial Regression is [1.58862453], which is much closer to real value.
Full Source | Python
import numpy as nm
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as mpl
df = pd.DataFrame({"Stages" : (["Stage_1", "Stage_2", "Stage_3", "Stage_4", "Stage_5", "Stage_6", "Stage_7", "Stage_8", "Stage_9", "Stage_10" ]),
"Temperature": ([1,2,3,4,5,6,7,8,9,10]),
"Pressure":[0.45,0.5,0.6,0.8,1.1,1.5,2,3,5,10]})
x = df[['Temperature']]
y = df['Pressure']
linear_regs= LinearRegression()
linear_regs.fit(x,y)
polynomial_regs= PolynomialFeatures(degree= 4)
x_poly= polynomial_regs.fit_transform(x)
linear_reg_2 =LinearRegression()
linear_reg_2.fit(x_poly, y)
mpl.scatter(x,y,color="blue")
mpl.plot(x,linear_regs.predict(x), color="red")
mpl.title("Truth detection model(Linear Regression)")
mpl.xlabel("Temperature")
mpl.ylabel("Pressure")
mpl.show()
mpl.scatter(x,y,color="blue")
mpl.plot(x, linear_reg_2.predict(polynomial_regs.fit_transform(x)), color="red")
mpl.title("Truth detection model(Polynomial Regression)")
mpl.xlabel("Temperature")
mpl.ylabel("Pressure")
mpl.show()
lin_pred = linear_regs.predict([[6.5]])
print("Linear Regression model Prediction : " , lin_pred)
poly_pred = linear_reg_2.predict(polynomial_regs.fit_transform([[6.5]]))
print("Polynomial Regression model Prediction : ", poly_pred)
output:
Linear Regression model Prediction : [3.30378788]
Polynomial Regression model Prediction : [1.89498106]
Related Topics
- Simple Linear Regression | Python Data Science
- Multiple Linear Regression | Python Data Science
- Ordinary Least Squares Regression | Python Data Science
- Logistic Regression | Python Machine Learning
- K-Nearest Neighbor(KNN) | Python Machine Learning
- Decision Tree in Machine Learning | Python
- Random Forest | Python Machine Learning
- Support Vector Machine | Python Machine Learning