Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Residuals | Metrics to Evaluate the Model
Explore the Linear Regression Using Python

book
Residuals

If we look at the plot that shows the dependence of flavanoids on the number of phenols, it will be obvious that the use of linear regression, in this case, was not entirely correct. Moreover, how do we interpret how good our prediction is?

Some points will lie on our constructed line, and some will lie away from it. We can measure the distance between a point and a line along the y-axis. This distance is called the residual or error. The remainder is the difference between the observed value of the target and the predicted value. The closer the residual is to 0, the better our model performs. Let's calculate the residuals and present them as a chart.

residuals = Y_test - y_test_predicted

# Visualize the data
ax = plt.gca()
ax.set_xlabel('total_phenols')
ax.set_ylabel('residuals')
plt.scatter(X_test, residuals)
plt.show()
12345678
residuals = Y_test - y_test_predicted # Visualize the data ax = plt.gca() ax.set_xlabel('total_phenols') ax.set_ylabel('residuals') plt.scatter(X_test, residuals) plt.show()
copy

Output:

Our residuals formed three almost straight lines. This distribution is a sign that the model is not working. Ideally, the remains should be arranged symmetrically and randomly around the horizontal axis. Still, if the residual graph shows some pattern (linear or non-linear), it means that our model is not the best.

Task

Swipe to start coding

Try to find residuals to our previous challenge:

  1. [Line #29] Define the variable y_test_predicted as predicted data for X_test.
  2. [Line #30] Assign the difference between variables Y_test and y_test_predicted to the residuals.
  3. [Line #31] Print the variable residuals.

Solution

# Import the libraries
import pandas as pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Load the dataset
wine = load_wine()

# Configure pandas to show all features
pd.set_option('display.max_rows', None, 'display.max_columns', None)

# Define the DataFrame
data = pd.DataFrame(data = wine['data'], columns = wine['feature_names'])

# Define the target
data['total_phenols'] = wine.target

# Define the data we will work with
x = data[['flavanoids']]
y = data['total_phenols']

# Build and fit the model
X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size = 0.3, random_state = 1)
model = LinearRegression()
model.fit(X_train, Y_train)

# Work with residuals
y_test_predicted = model.predict(X_test)
residuals = Y_test - y_test_predicted
print(residuals)

Everything was clear?

How can we improve it?

Thanks for your feedback!

Section 4. Chapter 1
single

single

# Import the libraries
import pandas as pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Load the dataset
wine = load_wine()

# Configure pandas to show all features
pd.set_option('display.max_rows', None, 'display.max_columns', None)

# Define the DataFrame
data = pd.DataFrame(data = wine['data'], columns = wine['feature_names'])

# Define the target
data['total_phenols'] = wine.target

# Define the data we will work with
x = data[['flavanoids']]
y = data['total_phenols']

# Build and fit the model
X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size = 0.3, random_state = 1)
model = LinearRegression()
model.fit(X_train, Y_train)

# Work with residuals
y_test_predicted = ___
residuals = ___
___

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

some-alt