Hồi quy tuyến tính là một thuật toán học máy dựa trên việc học có giám sát. Nó thực hiện một nhiệm vụ hồi quy. Mô hình hồi quy một giá trị dự đoán mục tiêu dựa trên các biến độc lập. Nó chủ yếu được sử dụng để tìm ra mối quan hệ giữa các biến và dự báo. Các mô hình hồi quy khác nhau khác nhau dựa trên – loại mối quan hệ giữa các biến phụ thuộc và độc lập, chúng đang xem xét và số lượng biến độc lập đang được sử dụng. 

Nếu bạn chưa hiểu rõ về Hồi quy tuyến tính, bạn có thể tham khảo tại series này.

Bài viết này sẽ trình bày cách sử dụng các thư viện Python khác nhau để triển khai hồi quy tuyến tính trên một tập dữ liệu nhất định. Chúng ta sẽ chứng minh một mô hình tuyến tính nhị phân vì điều này sẽ dễ hình dung hơn.

Trong phần trình diễn này, mô hình sẽ sử dụng Gradient Descent để học. Bạn có thể tìm hiểu về nó ở đây.

1. Bước 1: Nhập tất cả các thư viện bắt buộc

import numpy as np 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
from sklearn import preprocessing, svm 
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LinearRegression 

2. Bước 2: Đọc tập dữ liệu

Bạn có thể tải xuống bộ dữ liệu tại đây.

cd C:\Users\Dev\Desktop\Kaggle\Salinity 
  
# Changing the file read location to the location of the dataset 
df = pd.read_csv('bottle.csv') 
df_binary = df[['Salnty', 'T_degC']] 
  
# Taking only the selected two attributes from the dataset 
df_binary.columns = ['Sal', 'Temp'] 
  
# Renaming the columns for easier writing of the code 
df_binary.head() 
  
# Displaying only the 1st  rows along with the column names 

3. Bước 3: Khám phá phân tán dữ liệu

sns.lmplot(x ="Sal", y ="Temp", data = df_binary, order = 2, ci = None) 
  
# Plotting the data scatter 

4. Bước 4: Làm sạch dữ liệu

# Eliminating NaN or missing input numbers 
df_binary.fillna(method ='ffill', inplace = True) 

5. Bước 5: Đào tạo mô hình của chúng ta

X = np.array(df_binary['Sal']).reshape(-1, 1) 
y = np.array(df_binary['Temp']).reshape(-1, 1) 
  
# Separating the data into independent and dependent variables 
# Converting each dataframe into a numpy array  
# since each dataframe contains only one column 
df_binary.dropna(inplace = True) 
  
# Dropping any rows with Nan values 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25) 
  
# Splitting the data into training and testing data 
regr = LinearRegression() 
  
regr.fit(X_train, y_train) 
print(regr.score(X_test, y_test))

6. Bước 6: Khám phá kết quả của chúng ta

y_pred = regr.predict(X_test) 
plt.scatter(X_test, y_test, color ='b') 
plt.plot(X_test, y_pred, color ='k') 
  
plt.show() 
# Data scatter of predicted values 

Điểm chính xác thấp của mô hình của chúng ta cho thấy rằng mô hình hồi quy của chúng ta không phù hợp lắm với dữ liệu hiện có. Điều này cho thấy rằng dữ liệu của chúng ta không phù hợp với hồi quy tuyến tính. Nhưng đôi khi, một tập dữ liệu có thể chấp nhận một công cụ hồi quy tuyến tính nếu chúng ta chỉ xem xét một phần của nó. Hãy để chúng ta kiểm tra khả năng đó.

7. Bước 7: Làm việc với tập dữ liệu nhỏ hơn

df_binary500 = df_binary[:][:500] 
  
# Selecting the 1st 500 rows of the data 
sns.lmplot(x ="Sal", y ="Temp", data = df_binary500, 
                               order = 2, ci = None) 

Chúng ta đã có thể thấy rằng 500 hàng đầu tiên tuân theo mô hình tuyến tính. Tiếp tục các bước tương tự như trước.

df_binary500.fillna(method ='ffill', inplace = True) 
  
X = np.array(df_binary500['Sal']).reshape(-1, 1) 
y = np.array(df_binary500['Temp']).reshape(-1, 1) 
  
df_binary500.dropna(inplace = True) 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25) 
  
regr = LinearRegression() 
regr.fit(X_train, y_train) 
print(regr.score(X_test, y_test)) 

brightness_4
y_pred = regr.predict(X_test) 
plt.scatter(X_test, y_test, color ='b') 
plt.plot(X_test, y_pred, color ='k') 
  
plt.show() 

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!