Khoa học dữ liệu - Hồi quy tuyến tính


Chúng tôi đang thiếu một biến quan trọng ảnh hưởng đến Calorie_Burnage, đó là Thời lượng của buổi đào tạo.

Thời lượng kết hợp với Average_Pulse sẽ cùng nhau giải thích Calorie_Burnage chính xác hơn.


Hồi quy tuyến tính

Thuật ngữ hồi quy được sử dụng khi bạn cố gắng tìm mối quan hệ giữa các biến.

Trong Học máy và trong mô hình thống kê, mối quan hệ đó được sử dụng để dự đoán kết quả của các sự kiện.

Trong mô-đun này, chúng tôi sẽ đề cập đến các câu hỏi sau:

  • Chúng ta có thể kết luận rằng Average_Pulse và Duration có liên quan đến Calorie_Burnage không?
  • Chúng ta có thể sử dụng Average_Pulse và Duration để dự đoán Calorie_Burnage không?

Phương pháp bình phương tối thiểu

Hồi quy tuyến tính sử dụng phương pháp bình phương nhỏ nhất.

Khái niệm này là vẽ một đường thẳng qua tất cả các điểm dữ liệu được vẽ trên đồ thị. Đường được định vị theo cách mà nó giảm thiểu khoảng cách đến tất cả các điểm dữ liệu.

Khoảng cách được gọi là "phần dư" hoặc "sai số".

Các đường đứt nét màu đỏ thể hiện khoảng cách từ các điểm dữ liệu đến hàm toán học được vẽ.

Hồi quy tuyến tính - Hình vuông nhỏ nhất

Hồi quy tuyến tính sử dụng một biến giải thích

Trong ví dụ này, chúng tôi sẽ cố gắng dự đoán Calorie_Burnage với Average_Pulse bằng cách sử dụng Hồi quy tuyến tính:

Thí dụ

import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats

full_health_data = pd.read_csv("data.csv", header=0, sep=",")

x = full_health_data["Average_Pulse"]
y = full_health_data ["Calorie_Burnage"]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
 return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, slope * x + intercept)
plt.ylim(ymin=0, ymax=2000)
plt.xlim(xmin=0, xmax=200)
plt.xlabel("Average_Pulse")
plt.ylabel ("Calorie_Burnage")
plt.show()

Giải thích ví dụ:

  • Nhập các mô-đun bạn cần: Pandas, matplotlib và Scipy
  • Cô lập Average_Pulse thành x. Cô lập Calorie_burnage là y
  • Nhận các giá trị khóa quan trọng với: độ dốc, điểm chặn, r, p, std_err = stats.linregress (x, y)
  • Tạo một hàm sử dụng các giá trị độ dốc và giá trị chặn để trả về một giá trị mới. Giá trị mới này đại diện cho vị trí trên trục y, giá trị x tương ứng sẽ được đặt
  • Chạy từng giá trị của mảng x thông qua hàm. Điều này sẽ dẫn đến một mảng mới với các giá trị mới cho trục y: mymodel = list (map (myfunc, x))
  • Vẽ biểu đồ phân tán ban đầu: plt.scatter (x, y)
  • Vẽ đường hồi quy tuyến tính: plt.plot (x, mymodel)
  • Xác định giá trị lớn nhất và nhỏ nhất của trục
  • Gắn nhãn trục: "Average_Pulse" và "Calorie_Burnage"

Đầu ra:

Hồi quy tuyến tính - Một biến - Bình phương nhỏ nhất

Bạn có nghĩ rằng đường này có thể dự đoán chính xác Calorie_Burnage không?

Chúng tôi sẽ chỉ ra rằng chỉ biến Average_Pulse là không đủ để đưa ra dự đoán chính xác về Calorie_Burnage.