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, chúng tôi dự đoán lượng khí thải CO2 của một chiếc ô tô khi chúng tôi 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 một phương pháp gọi là Train / Test.
Train / Test là gì
Train / Test là một phương pháp để đo độ 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 thử nghiệm.
80% để đào tạo và 20% để kiểm tra.
Bạn đào tạo mô hình bằng cách sử dụng bộ đào tạo.
Bạn kiểm tra mô hình bằng cách sử dụng bộ kiểm thử.
Huấn luyện 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 độ chính xác của mô hình.
Bắt đầu với 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ọ.
Thí 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 thể hiện số phút trước khi mua hàng.
Trục y thể hiện số tiền đã chi để mua hàng.
Tách thành tàu / thử nghiệm
Tập huấn luyện phải là sự lựa chọn ngẫu nhiên của 80% dữ liệu gốc.
Tập hợp thử nghiệm 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ị Bộ đào tạo
Hiển thị cùng một biểu đồ phân tán với tập huấn luyện:
Thí 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 nó có vẻ là một lựa chọn hợp lý:
Hiển thị Bộ thử nghiệm
Để đảm bảo tập thử nghiệm không hoàn toàn khác biệt, chúng ta cũng sẽ xem xét tập hợp thử nghiệm.
Thí dụ
plt.scatter(test_x,
test_y)
plt.show()
Kết quả:
Tập hợp thử nghiệm cũng giống như tập 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ù hợp nhất sẽ là một 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 thẳng qua các điểm dữ liệu, chúng tôi sử dụng
plot()
phương pháp của mô-đun matplotlib:
Thí dụ
Vẽ một đườ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ể hỗ trợ gợi ý của tôi về việc tập dữ liệu phù hợp với một 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 cho biết rằng một khách hàng bỏ ra 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á nhiều.
Nhưng còn điểm R bình phương thì sao? Điểm bình phương R 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
Hãy nhớ R2, còn được gọi là R bình phươ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 đượ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.
Thí dụ
Dữ liệu đào tạo của tôi phù hợp như thế nào trong một 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)
Lưu ý: Kết quả 0,799 cho thấy rằng có một mối quan hệ OK.
Mang bộ thử nghiệm vào
Bây giờ chúng tôi đã tạo ra một mô hình OK, ít nhất là khi nói đến dữ liệu đào tạo.
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.
Thí dụ
Hãy để 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)
Lưu ý: Kết quả 0,809 cho thấy rằng mô hình cũng phù hợp với bộ thử nghiệm và chúng tôi tin tưởng 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 tôi đã thiết lập rằng mô hình của chúng tôi là OK, chúng tôi có thể bắt đầu dự đoán các giá trị mới.
Thí dụ
Một khách 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))
Ví dụ dự đoán khách hàng chi 22,88 đô la, dường như tương ứng với sơ đồ: