Học máy - Phản hồi đa thức
- Trang Trước Phân Hóa Đoạn
- Trang Tiếp Theo Phân Hóa Đa Lưu
Hồi quy đa thức (Polynomial Regression)
Nếu các điểm dữ liệu của bạn rõ ràng không phù hợp với hồi quy tuyến tính (đường thẳng xuyên qua các điểm dữ liệu), thì hồi quy đa thức có thể là lựa chọn lý tưởng.
Như hồi quy tuyến tính, hồi quy đa thức sử dụng mối quan hệ giữa biến x và y để tìm phương pháp tốt nhất để vẽ đường cho điểm dữ liệu.

Công việc
Python có một số phương pháp để tìm mối quan hệ giữa điểm dữ liệu và vẽ đường hồi quy đa thức. 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ụ sau, chúng ta đã đăng ký 18 xe qua trạm thu phí cụ thể.
Chúng ta đã ghi lại tốc độ xe và thời gian qua (giờ).
Trục x biểu thị giờ trong ngày, trục y biểu thị tốc độ:
Ví Dụ
Trước tiên vẽ biểu đồ điểm:
import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] plt.scatter(x, y) plt.show()
Kết Quả:

Ví Dụ
t导入 numpy
và matplotlib
và sau đó vẽ đường hồi quy đa thức:
import numpy import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Kết Quả:

Giải thích ví dụ
T导入 mô-đun cần thiết:
import numpy import matplotlib.pyplot as plt
Tạo mảng biểu diễn giá trị của trục x và trục y:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
NumPy có một phương pháp để chúng ta xây dựng mô hình đa thức:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Sau đó chỉ định cách hiển thị của dòng, chúng ta bắt đầu từ vị trí 1 và kết thúc ở vị trí 22:
myline = numpy.linspace(1, 22, 100)
Vẽ biểu đồ điểm ban đầu:
plt.scatter(x, y)
Vẽ đường hồi quy đa thức:
plt.plot(myline, mymodel(myline))
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ị của 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 đa thức 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-squared (r-squared).
Phạm vi của giá trị r-squared là từ 0 đến 1, trong đó 0 biểu thị không có mối quan hệ, còn 1 biểu thị 100% có mối quan hệ.
Python và mô-đun Sklearn sẽ tính toán giá trị này cho bạn, điều bạn cần làm chỉ là nhập vào mảng x và y:
Ví Dụ
Kết hợp của dữ liệu của tôi trong hồi quy đa thức như thế nào?
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Chú thích:Kết quả 0.94 cho thấy có mối quan hệ tốt, chúng ta có thể sử dụng hồi quy đa thức trong các 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 độ xe qua trạm thu phí vào khoảng 17 giờ tối:
Để làm điều này, chúng ta cần cùng một ví dụ như trên: mymodel Mảng:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Ví Dụ
Dự đoán tốc độ xe qua vào buổi chiều 17 giờ:
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
Tốc độ dự đoán của ví dụ này là 88.87, chúng ta cũng có thể thấy trong hình vẽ:

Kết hợp kém?
Hãy tạo một ví dụ, trong đó phương pháp hồi quy đa thức không phải là phương pháp tốt nhất để dự đoán giá trị tương lai.
Ví Dụ
Các giá trị này của trục x và y sẽ dẫn đến độ phù hợp của phân hồi đa thức rất kém:
import numpy import matplotlib.pyplot as plt 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] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Kết Quả:

Giá trị r-squared là gì?
Ví Dụ
Bạn nên nhận được một giá trị r-squared rất thấp.
import numpy from sklearn.metrics import r2_score 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] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Kết Quả: 0.00995 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 phân hồi đa thức.
- Trang Trước Phân Hóa Đoạn
- Trang Tiếp Theo Phân Hóa Đa Lưu