Học máy - Huấn luyện/kiểm tra

Đánh giá mô hình

Trong học máy, chúng ta tạo mô hình để dự đoán kết quả của một số sự kiện, giống như trong chương trước khi chúng ta hiểu về trọng lượng và khối lượng động cơ, chúng ta đã dự đoán lượng khí thải CO2 của ô tô.

Để đo lường xem mô hình có đủ tốt hay không, chúng ta có thể sử dụng một phương pháp gọi là huấn luyện/kiểm tra.

Gì là huấn luyện/kiểm tra

Huấn luyện/kiểm tra là một phương pháp đo lường độ chính xác của mô hình.

Lý do gọi là huấn luyện/kiểm tra là vì chúng ta đã chia dữ liệu thành hai nhóm: bộ dữ liệu huấn luyện và bộ dữ liệu kiểm tra.

80% được sử dụng cho việc huấn luyện, 20% được sử dụng cho việc kiểm tra.

Bạn có thể sử dụng bộ dữ liệu huấn luyện để huấn luyện mô hình.

Bạn có thể sử dụng bộ dữ liệu kiểm tra để kiểm tra mô hình.

Huấn luyện mô hình có nghĩa là tạo mô hình.

Kiểm tra mô hình có nghĩa là kiểm tra độ chính xác của mô hình.

Bắt đầu từ dữ liệu.

Bắt đầu từ dữ liệu cần kiểm tra.

Dữ liệu của chúng tôi đã hiển thị 100 khách hàng trong cửa hàng và thói quen mua sắm của họ.

Ví dụ

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
plt.scatter(x, y)
plt.show()

Kết quả:

Trục x biểu thị số phút trước khi mua sắm.

Trục y biểu thị số tiền chi tiêu cho việc mua sắm.


Chạy ví dụ

Chia tập đào tạo/kiểm tra

Tập đào tạo nên là 80% của dữ liệu ban đầu được chọn ngẫu nhiên.

Tập kiểm tra nên là 20% còn lại.

train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]

Hiển thị tập đào tạo

Hiển thị biểu đồ điểm rơi giống như tập đào tạo:

Ví dụ

plt.scatter(train_x, train_y)
plt.show()

Kết quả:

Nó trông giống như tập dữ liệu ban đầu, vì vậy có vẻ như là một lựa chọn hợp lý:


Chạy ví dụ

Hiển thị tập kiểm tra

Để đảm bảo rằng tập kiểm tra không hoàn toàn khác biệt, chúng ta cũng cần xem xét tập kiểm tra.

Ví dụ

plt.scatter(test_x, test_y)
plt.show()

Kết quả:

Tập kiểm tra cũng trông giống như tập dữ liệu ban đầu:


Chạy ví dụ

Phù hợp hóa tập dữ liệu

Tập dữ liệu như thế nào? Tôi nghĩ rằng phương trình đa thức là phù hợp nhất, vì vậy hãy vẽ một đường đa thức回归.

Để vẽ một đường qua các điểm dữ liệu, chúng ta sử dụng mô-đun matplotlib plott() Phương pháp:

Ví dụ

Vẽ đường đa thức回归 qua các điểm dữ liệu:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
myline = numpy.linspace(0, 6, 100)
plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

Kết quả:


Chạy ví dụ

Kết quả này có thể hỗ trợ cho gợi ý của chúng ta về việc phù hợp với đa thức của tập dữ liệu, ngay cả khi chúng ta thử dự đoán các giá trị ngoài tập dữ liệu thì cũng có thể mang lại một số kết quả kỳ lạ. Ví dụ: dòng này cho thấy một khách hàng đã mua sắm trong 6 phút, sẽ hoàn thành một giao dịch mua sắm có giá trị 200. Điều này có thể là dấu hiệu của việc quá phù hợp.

Nhưng về R-squared score thì sao? R-squared score rất tốt trong việc chỉ ra mức độ phù hợp của tập dữ liệu với mô hình của tôi.

R2

Nhớ lại R2, cũng được gọi là R平方 (R-squared) không?

Nó đo mối quan hệ giữa trục x và trục y, giá trị từ 0 đến 1, trong đó 0 có nghĩa là không có mối quan hệ, còn 1 thì hoàn toàn có mối quan hệ.

Mô-đun sklearn có một tên gọi rs_score() Cách đó, phương pháp này sẽ giúp chúng ta tìm ra mối quan hệ đó.

Tại đây, chúng ta cần đo lường mối quan hệ giữa thời gian khách hàng ở trong cửa hàng và số tiền họ chi.

Ví dụ

Vậy dữ liệu đào tạo của chúng ta có phù hợp với phương trình đa thức như thế nào?

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(train_y, mymodel(train_x))
print(r2)

Chạy ví dụ

Ghi chú:Kết quả 0.799 cho thấy mối quan hệ rất tốt.

Giới thiệu tập kiểm tra

Hiện tại, ít nhất trong dữ liệu đào tạo, chúng ta đã xây dựng được một mô hình rất tốt.

Sau đó, chúng ta cần sử dụng dữ liệu kiểm tra để kiểm tra mô hình, để xem có cho ra kết quả tương tự hay không.

Ví dụ

Hãy xác định số điểm R2 khi sử dụng dữ liệu kiểm tra:

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(test_y, mymodel(test_x))
print(r2)

Chạy ví dụ

Ghi chú:Kết quả 0.809 cho thấy mô hình này cũng phù hợp với tập kiểm tra, chúng ta tin rằng có thể sử dụng mô hình này để dự đoán giá trị tương lai.

Giá trị dự đoán

Bây giờ chúng ta đã xác định rằng mô hình của chúng ta rất tốt, có thể bắt đầu dự đoán giá trị mới.

Ví dụ

Nếu khách hàng mua hàng ở cửa hàng trong 5 phút, họ sẽ tiêu tốn bao nhiêu tiền?

print(mymodel(5))

Chạy ví dụ

Ví dụ này dự đoán rằng khách hàng đã tiêu tốn 22.88 đô la, có vẻ như phù hợp với biểu đồ sau: