Học máy - Đào tạo/Kiểm tra
Đánh giá mô hình của bạn
Trong Machine Learning, chúng tôi tạo ra các mô hình để dự đoán kết quả của một số sự kiện nhất định, giống như trong chương trước, nơi chúng tôi dự đoán lượng khí thải CO2 của một chiếc ô tô khi biết trọng lượng và kích thước động cơ.
Để đo lường xem mô hình có đủ tốt hay không, chúng ta có thể sử dụng phương pháp gọi là Đào tạo/Kiểm tra.
Đào tạo/Kiểm tra là gì
Đào tạo/Kiểm tra là một phương pháp để đo lường độ chính xác của mô hình của bạn.
Nó được gọi là Train/Test vì bạn chia tập dữ liệu thành hai tập: tập huấn luyện và tập kiểm tra.
80% dành cho đào tạo và 20% dành cho kiểm tra.
Bạn huấn luyện mô hình bằng cách sử dụng tập huấn luyện.
Bạn kiểm tra mô hình bằng cách sử dụng bộ kiểm tra.
Đào tạo mô hình có nghĩa là tạo ra mô hình.
Kiểm tra mô hình có nghĩa là kiểm tra tính chính xác của mô hình.
Bắt đầu với một tập dữ liệu
Bắt đầu với tập dữ liệu bạn muốn kiểm tra.
Tập dữ liệu của chúng tôi minh họa 100 khách hàng trong một 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 thực hiện mua hàng.
Trục y biểu thị số tiền chi cho việc mua hàng.
Chia thành đoàn tàu/kiểm tra
Tập huấn luyện phải là lựa chọn ngẫu nhiên 80% dữ liệu gốc.
Bộ thử nghiệm phải 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 huấn luyện
Hiển thị biểu đồ phân tán tương tự với tập huấn luyện:
Ví dụ
plt.scatter(train_x,
train_y)
plt.show()
Kết quả:
Nó trông giống như tập dữ liệu gốc nên có vẻ như đây là một lựa chọn hợp lý:
Hiển thị bộ kiểm tra
Để đảm bảo bộ thử nghiệm không hoàn toàn khác, chúng ta cũng sẽ xem xét bộ thử nghiệm.
Ví dụ
plt.scatter(test_x,
test_y)
plt.show()
Kết quả:
Bộ thử nghiệm cũng trông giống như bộ dữ liệu gốc:
Điều chỉnh tập dữ liệu
Tập dữ liệu trông như thế nào? Theo ý kiến của tôi, tôi nghĩ phương pháp phù hợp nhất sẽ là hồi quy đa thức , vì vậy chúng ta hãy vẽ một đường hồi quy đa thức.
Để vẽ một đường đi qua các điểm dữ liệu, chúng ta sử dụng phương thức plot()
của mô-đun matplotlib:
Ví dụ
Vẽ đường hồi quy đ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ả:
Kết quả có thể phản ánh đề xuất của tôi về tập dữ liệu phù hợp với hồi quy đa thức, mặc dù nó sẽ cho chúng ta một số kết quả kỳ lạ nếu chúng ta cố gắng dự đoán các giá trị bên ngoài tập dữ liệu. Ví dụ: dòng biểu thị rằng một khách hàng dành 6 phút trong cửa hàng sẽ mua hàng trị giá 200. Đó có thể là dấu hiệu của việc trang bị quá mức.
Nhưng còn điểm bình phương R thì sao? Điểm R bình phương là một chỉ báo tốt về mức độ phù hợp của tập dữ liệu của tôi với mô hình.
R2
Bạn có nhớ R2 hay còn gọi là R bình phương không?
Nó đo lường mối quan hệ giữa trục x và trục y và giá trị nằm trong khoảng từ 0 đến 1, trong đó 0 có nghĩa là không có mối quan hệ và 1 có nghĩa là hoàn toàn liên quan.
Mô-đun sklearn có một phương thức gọi là r2_score()
sẽ giúp chúng ta tìm ra mối quan hệ này.
Trong trường hợp này, chúng tôi muốn đo lường mối quan hệ giữa số phút khách hàng ở lại cửa hàng và số tiền họ chi tiêu.
Ví dụ
Dữ liệu đào tạo của tôi phù hợp như thế nào trong hồi quy đa thức?
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)
Hãy tự mình thử »Lưu ý: Kết quả 0,799 cho thấy có mối quan hệ OK.
Mang theo bộ thử nghiệm
Bây giờ chúng tôi đã tạo ra một mô hình ổn, ít nhất là khi nói đến dữ liệu huấn luyện.
Bây giờ chúng tôi cũng muốn kiểm tra mô hình với dữ liệu thử nghiệm để xem liệu có mang lại cho chúng tôi kết quả tương tự hay không.
Ví dụ
Hãy cùng chúng tôi tìm điểm R2 khi sử dụng dữ liệu thử nghiệm:
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)
Hãy tự mình thử »Lưu ý: Kết quả 0,809 cho thấy mô hình cũng phù hợp với tập thử nghiệm và chúng tôi tự tin rằng chúng tôi có thể sử dụng mô hình để dự đoán các giá trị trong tương lai.
Dự đoán giá trị
Bây giờ chúng ta đã xác định rằng mô hình của mình đã ổn, chúng ta có thể bắt đầu dự đoán các giá trị mới.
Ví dụ
Một khách hàng mua hàng sẽ chi bao nhiêu tiền nếu họ ở lại cửa hàng trong 5 phút?
print(mymodel(5))
Chạy ví dụ »Ví dụ dự đoán khách hàng sẽ chi 22,88 đô la, có vẻ như tương ứng với sơ đồ: