Học máy - Phản hồi hồi quy
- Quay lại trang trước Đồ thị điểm rời rạc
- Trang tiếp theo Quay lại trang trước
Hồi quy
Khi bạn cố gắng tìm mối quan hệ giữa các biến, bạn sẽ sử dụng thuật ngữ “hồi quy” (regression).
Trong học máy và mô hình thống kê, mối quan hệ này được sử dụng để dự đoán kết quả của các sự kiện trong tương lai.
Hồi quy tuyến tính
Hồi quy tuyến tính sử dụng mối quan hệ giữa các điểm dữ liệu để vẽ một đường thẳng giữa tất cả các điểm dữ liệu.
Chiều dài này có thể được sử dụng để dự đoán giá trị tương lai.

Trong học máy, việc dự đoán tương lai rất quan trọng.
Công việc làm việc
Python cung cấp một số phương pháp để tìm mối quan hệ giữa các điểm dữ liệu và vẽ đường hồi quy. Chúng ta sẽ hướng dẫn bạn cách sử dụng các phương pháp này thay vì thông qua công thức toán học.
Trong ví dụ dưới đây, trục x biểu thị độ tuổi của xe, trục y biểu thị tốc độ. Chúng ta đã ghi lại độ tuổi và tốc độ của 13 chiếc xe khi qua trạm thu phí. Hãy xem dữ liệu mà chúng ta đã thu thập có thể được sử dụng để hồi quy tuyến tính không:
Mô Hình
Trước tiên, vẽ biểu đồ điểm:
import matplotlib.pyplot as plt x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] plt.scatter(x, y) plt.show()
Kết quả:

Mô Hình
T导入 scipy
và vẽ đường hồi quy:
import matplotlib.pyplot as plt from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] 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, mymodel) plt.show()
Kết quả:

Giải thích ví dụ
T导入 nhập các mô-đun cần thiết:
import matplotlib.pyplot as plt from scipy import stats
Tạo mảng biểu diễn giá trị của trục x và trục y:
x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
Thực hiện một phương pháp, phương pháp này trả về một số giá trị quan trọng của hồi quy tuyến tính:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Tạo một đối tượng sử dụng slope
và intercept
Hàm giá trị trả về giá trị mới. Giá trị mới này biểu thị vị trí của giá trị x tương ứng sẽ được đặt trên trục y:
def myfunc(x): return slope * x + intercept
Chạy mỗi giá trị trong mảng x qua hàm. Điều này sẽ tạo ra một mảng mới, trong đó trục y có giá trị mới:
mymodel = list(map(myfunc, x))
Vẽ biểu đồ điểm ban đầu:
plt.scatter(x, y)
Vẽ đường hồi quy:
plt.plot(x, mymodel)
Hiển thị biểu đồ:
plt.show()
R-Squared
Điều quan trọng là phải biết mối quan hệ giữa giá trị trục x và trục y có tốt đến mức nào, nếu không có mối quan hệ, hồi quy tuyến tính không thể được sử dụng để dự đoán bất cứ điều gì.
Mối quan hệ này được đo lường bằng giá trị r bình phương (r-squared).
Phạm vi của giá trị r bình phương là từ 0 đến 1, trong đó 0 biểu thị không có mối quan hệ, trong khi 1 biểu thị 100% có mối quan hệ.
Python và mô-đun Scipy sẽ tính toán giá trị này cho bạn, điều bạn cần làm chỉ là cung cấp giá trị x và y cho nó:
Mô Hình
Dữ liệu của tôi có phù hợp với hồi quy tuyến tính như thế nào?
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Ghi chú:Kết quả -0.76 cho thấy có một mối quan hệ nào đó, nhưng không phải là mối quan hệ hoàn hảo, nhưng nó cho thấy chúng ta có thể sử dụng hồi quy tuyến tính trong dự đoán tương lai.
Dự đoán giá trị tương lai
Bây giờ, chúng ta có thể sử dụng thông tin đã thu thập để dự đoán giá trị tương lai.
Ví dụ: hãy thử dự đoán tốc độ của một chiếc xe có 10 năm sử dụng.
Để làm điều này, chúng ta cần cùng dữ liệu như ví dụ trước: myfunc()
Hàm:
def myfunc(x): return slope * x + intercept
Mô Hình
Dự đoán tốc độ của một chiếc xe có 10 năm tuổi:
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept speed = myfunc(10) print(speed)
Tốc độ dự đoán là 85.6, chúng ta cũng có thể đọc từ biểu đồ:

Kết hợp xấu?
Hãy tạo một ví dụ, trong đó phương pháp hồi quy tuyến tính không phải là phương pháp tốt nhất để dự đoán giá trị tương lai.
Mô Hình
Các giá trị này của trục x và y sẽ dẫn đến độ phù hợp của hồi quy tuyến tính rất kém:
import matplotlib.pyplot as plt from scipy import stats x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] 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, mymodel) plt.show()
Kết quả:

và giá trị r-squared?
Mô Hình
Bạn nên nhận được một giá trị r-squared rất thấp.
import numpy from scipy import stats x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Kết quả: 0.013 biểu thị mối quan hệ rất yếu, và cho chúng ta biết rằng bộ dữ liệu này không phù hợp với hồi quy tuyến tính.
- Quay lại trang trước Đồ thị điểm rời rạc
- Trang tiếp theo Quay lại trang trước