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 tập.
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 Machine Learning 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à Thời lượng 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 đi qua tất cả các điểm dữ liệu được vẽ. Đường này được định vị theo cách 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à "dư lượng" hoặc "lỗi".
Các đường đứt nét màu đỏ biểu thị 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 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 bằng Average_Pulse bằng cách sử dụng Hồi quy tuyến tính:
Ví 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()
Hãy tự mình thử »Ví dụ giải thích:
- Nhập các mô-đun bạn cần: Pandas, matplotlib và Scipy
- Cô lập Average_Pulse dưới dạng x. Cô lập Calorie_burnage thành y
- Nhận các giá trị khóa quan trọng với: độ dốc, đánh 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à điểm chặn để trả về một giá trị mới. Giá trị mới này biểu thị 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ẽ tạo ra 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ị tối đa và tối thiểu của trục
- Gắn nhãn trục: "Average_Pulse" và "Calorie_Burnage"
Đầu ra:
Bạn có nghĩ rằng dò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ỉ riêng biến Average_Pulse là không đủ để đưa ra dự đoán chính xác về Calorie_Burnage.