|
|
|
|
|
|
|
|
|
|
|
import pandas as pd
|
|
|
import statsmodels.formula.api as smf
|
|
|
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
|
|
|
model = smf.ols('Calorie_Burnage ~ Average_Pulse + Duration', data=full_health_data)
|
|
|
'''
|
|
|
Giải thích: ols là Ordinary Least Squares(phương pháp bình phương tối thiểu)
|
|
|
👉Nghĩa là ta muốn tìm đường thẳng tốt nhất: Calorie_Burnage = a + b * Average_Pulse
|
|
|
trong đó:
|
|
|
a: hằng số (intercept)
|
|
|
b: hệ số góc (slope)
|
|
|
'''
|
|
|
results = model.fit()
|
|
|
print(results.summary())
|
|
|
'''
|
|
|
In ra bảng thống kê kết quả hồi quy tuyến tính, gồm:
|
|
|
coef: hệ số của từng biến.
|
|
|
std err: sai số chuẩn.
|
|
|
t, P>|t|: giá trị kiểm định thống kê.
|
|
|
R-squared: độ phù hợp của mô hình (giá trị càng gần 1 càng tốt).
|
|
|
F-statistic, Prob(F-statistic): độ tin cậy chung của mô hình.
|
|
|
Intercept: hệ số chặn 𝑎.
|
|
|
Average_Pulse: hệ số góc b.
|
|
|
'''
|
|
|
|
|
|
'''
|
|
|
Giải thích ví dụ:
|
|
|
Nhập thư viện statsmodels.formula.api dưới dạng smf. Statsmodels là một thư viện thống kê trong Python.
|
|
|
Sử dụng bộ dữ liệu full_health_data.
|
|
|
Tạo mô hình dựa trên phương pháp Bình phương tối thiểu thông thường với smf.ols(). Lưu ý rằng biến giải thích phải được viết trước trong dấu ngoặc đơn. Sử dụng tập dữ liệu full_health_data.
|
|
|
Bằng cách gọi .fit(), bạn sẽ nhận được biến results. Biến này chứa rất nhiều thông tin về mô hình hồi quy.
|
|
|
Gọi summary() để lấy bảng kết quả hồi quy tuyến tính.
|
|
|
'''
|
|
|
|
|
|
'''
|
|
|
+) Hàm hồi quy tuyến tính có thể được viết lại theo phương pháp toán học như sau:
|
|
|
Calorie_Burnage = Average_Pulse * 3.1695 + Duration * 5.8424 - 334.5194
|
|
|
|
|
|
+) Làm tròn đến hai chữ số thập phân:
|
|
|
Calorie_Burnage = Average_Pulse * 3.17 + Duration * 5.84 - 334.52
|
|
|
'''
|
|
|
|
|
|
|
|
|
'''
|
|
|
Xác định hàm hồi quy tuyến tính trong Python để thực hiện dự đoán.
|
|
|
|
|
|
Calorie_Burnage là gì nếu:
|
|
|
Nhịp tim trung bình là 110 và thời gian tập luyện là 60 phút?
|
|
|
Nhịp tim trung bình là 140 và thời gian tập luyện là 45 phút?
|
|
|
Nhịp tim trung bình là 175 và thời gian tập luyện là 20 phút?
|
|
|
'''
|
|
|
|
|
|
def Predict_Calorie_Burnage(Average_Pulse, Duration):
|
|
|
return(Average_Pulse * 3.165 + Duration * 5.8424 - 334.5194)
|
|
|
|
|
|
print(Predict_Calorie_Burnage(110, 60))
|
|
|
print(Predict_Calorie_Burnage(140, 45))
|
|
|
print(Predict_Calorie_Burnage(175, 20))
|
|
|
'''
|
|
|
Câu trả lời:
|
|
|
Nhịp tim trung bình là 110 và thời lượng luyện tập là 60 phút = 364 Calo
|
|
|
Nhịp tim trung bình là 140 và thời lượng luyện tập là 45 phút = 371 Calo
|
|
|
Nhịp tim trung bình là 175 và thời lượng luyện tập là 20 phút = 336 Calo
|
|
|
'''
|
|
|
|
|
|
|
|
|
'''
|
|
|
Hãy xem các hệ số:
|
|
|
Calorie_Burnage tăng lên 3,17 nếu Average_Pulse tăng thêm một.
|
|
|
Calorie_Burnage tăng 5,84 nếu Duration tăng thêm một.
|
|
|
'''
|
|
|
|
|
|
|
|
|
'''
|
|
|
Hãy xem giá trị P cho từng hệ số.
|
|
|
Giá trị P là 0,00 đối với Average_Pulse, Duration và Intercept.
|
|
|
Giá trị P có ý nghĩa thống kê đối với tất cả các biến vì nó nhỏ hơn 0,05.
|
|
|
Vì vậy, ở đây chúng ta có thể kết luận rằng Average_Pulse và Duration có mối quan hệ với Calorie_Burnage.
|
|
|
|
|
|
'''
|
|
|
|
|
|
'''
|
|
|
Sẽ có vấn đề với R bình phương nếu chúng ta có nhiều hơn một biến giải thích.
|
|
|
R bình phương gần như luôn tăng nếu chúng ta thêm nhiều biến hơn và sẽ không bao giờ giảm.
|
|
|
Điều này là do chúng ta đang thêm nhiều điểm dữ liệu hơn xung quanh hàm hồi quy tuyến tính.
|
|
|
Nếu chúng ta thêm các biến ngẫu nhiên không ảnh hưởng đến lượng Calorie_Burnage, chúng ta có nguy cơ kết luận sai rằng hàm hồi quy tuyến tính là phù hợp. R-bình phương hiệu chỉnh sẽ điều chỉnh cho vấn đề này.
|
|
|
Do đó, tốt hơn là nên xem xét giá trị R bình phương đã điều chỉnh nếu chúng ta có nhiều hơn một biến giải thích.
|
|
|
R bình phương đã điều chỉnh là 0,814.
|
|
|
Giá trị của R-Squared luôn nằm trong khoảng từ 0 đến 1 (0% đến 100%).
|
|
|
Giá trị R-Squared cao có nghĩa là nhiều điểm dữ liệu gần với đường hồi quy tuyến tính.
|
|
|
Giá trị R-Squared thấp có nghĩa là đường hồi quy tuyến tính không phù hợp với dữ liệu.
|
|
|
🗸 Kết luận: Mô hình phù hợp với điểm dữ liệu!✅
|
|
|
|
|
|
✅Xin chúc mừng! Bạn đã hoàn thành mô-đun cuối cùng của thư viện khoa học dữ liệu!🎉🎉🎉
|
|
|
''' |