Machine Learning [Python] – Non-linear Regression

In this tutorial, we will learn how to implement Non-Linear Regression. If the data shows a curvy trend, then linear regression will not produce very accurate results when compared to a non-linear regression because, as the name implies, linear regression presumes that the data behavior is linear.

Parts Required

  • Python interpreter (Spyder, Jupyter, etc.).

Procedure

Following are the steps required to perform this tutorial.

Packages Needed

Though Linear regression is very good to solve many problems, it cannot be used for all datasets. First recall how linear regression, could model a dataset. It models a linear relation between a dependent variable y and an independent variable x. It had a simple equation, of degree 1, for example, y = 4𝑥 + 2.

Non-linear regressions are a relationship between independent variables 𝑥 and a dependent variable 𝑦 which result in a non-linear function modeled data. Essentially any relationship that is not linear can be termed as non-linear and is usually represented by the polynomial of 𝑘 degrees (maximum power of 𝑥).

Non-linear functions can have elements like exponentials, logarithms, fractions, and others. For example:

Let’s take a look at a cubic function’s graph:

This function has 𝑥3 and 𝑥2 as independent variables. Also, the graphic of this function is not a straight line over the 2D plane. So this is a non-linear function.

Some other types of non-linear functions are:

Quadratic

Exponential

An exponential function with base c is defined by

where b ≠0, c > 0, c ≠1, and x is any real number. The base, c, is constant and the exponent, x, is a variable.

Logarithmic

The response 𝑦 is a result of applying a logarithmic map from input 𝑥’s to output variable 𝑦. Please consider that instead of 𝑥, we can use 𝑋, which can be a polynomial representation of the 𝑥’s. In general form, it would be written as

Sigmoidal/Logistic

Non-Linear Regression Example

In this example, we’re going to try and fit a non-linear model to the data points corresponding to China’s GDP from 1960 to 2014. The dataset has two columns, the first, a year between 1960 and 2014, the second, China’s corresponding annual gross domestic income in US dollars for that year.

Plotting the Dataset

This is what the data points look like. It kind of looks like either a logistic or exponential function. The growth starts off slow, then from 2005 on forward, the growth is very significant. And finally, it decelerates slightly in the 2010s.

Choosing a Model

From an initial look at the plot, we determine that the logistic function could be a good approximation, since it has the property of starting with slow growth, increasing growth in the middle, and then decreasing again at the end as illustrated below:

The formula for the logistic function is the following:

𝛽1: Controls the curve’s steepness,

𝛽2: Slides the curve on the x-axis.

Building The Model

Now, let’s build our regression model and initialize its parameters.

Lets look at a sample sigmoid line that might fit with the data:

Our task here is to find the best parameters for our model. Lets first normalize our x and y:

How we find the best parameters for our fit line?

We can use curve_fit which uses non-linear least squares to fit our sigmoid function, to data. Optimal values for the parameters so that the sum of the squared residuals of sigmoid (xdata, *popt) – ydata is minimized.

*popt are our optimized parameters.

Now we plot our resulting regression model.

Now, let’s find the accuracy of our model.

References

[1] https://medium.com/analytics-vidhya/non-linear-regression-analysis-e150447ac1a3

[2] https://www.kaggle.com/john77eipe/non-linear-regression

[3] https://codekarim.com/node/40

[4] IBM – Machine Learning with Python – A Practical Introduction

[5] Udemy – The Data Science Course 2020: Complete Data Science Bootcamp – 365 Careers

[6] Udemy – Machine Learning and Data Science (Python)

Leave a Reply

Your email address will not be published. Required fields are marked *