Menu
CoddyTech

Luật số lớn

Thuộc phần Thống kê cho machine learning trong hành trình Machine Learning của Coddy. Bài học 14 trên 64.

Tung đồng xu 10 lần và có 8 lần ra mặt ngửa cũng không có gì đáng ngạc nhiên. Tiếp tục tung, tỷ lệ mặt ngửa dần tiến về 0.5:

Biểu đồ đường thể hiện tỷ lệ mặt ngửa qua 300 lần tung: tỷ lệ dao động từ 0.3 đến 1 trong những lần tung đầu tiên, sau đó tiến sát đường màu đỏ nét đứt tại xác suất 0.5

Mỗi điểm cần tỷ lệ tính đến thời điểm đó. np.cumsum cho tổng lũy kế (running total); hãy chia tổng đó cho số lần tung tính đến thời điểm đó:

heads = np.array([True, False, True, True])
print(np.cumsum(heads))
print(np.round(np.cumsum(heads) / np.arange(1, 5), 2))

Kết quả in ra là:

[1 1 2 3]
[1.   0.5  0.67 0.75]

ax.axhline(y) vẽ đường tham chiếu chạy ngang biểu đồ:

ax.plot(np.arange(1, 301), share)
ax.axhline(0.5, color="red", linestyle="--")

Đó là quy luật số lớn: càng thử nhiều lần, kết quả càng gần với xác suất. Một mô hình đạt điểm cao trên 20 mẫu có thể chỉ gặp may, nhưng trên 2000 mẫu thì khó có thể chỉ là may mắn.

challenge icon

Thử thách

Trung bình

Một thương hiệu ngũ cốc giấu đồ chơi trong 20% số hộp. Chương trình đọc số hộp được mở; đoạn code khởi đầu điền toys (True nếu có đồ chơi) và đặt nhãn cho biểu đồ.

  1. Tính tỷ lệ tích lũy (running share) số hộp có đồ chơi.
  2. In tỷ lệ đó sau khi mở 10 hộp và sau khi mở tất cả hộp, với 3 chữ số thập phân.
  3. Vẽ biểu đồ theo số thứ tự của các hộp, bắt đầu từ 1, thêm một đường chấm màu đen (":") tại 0.2 rồi hiển thị biểu đồ.

Với 80 hộp khác:

After 10 boxes: 0.1
After 80 boxes: 0.212

và vẽ biểu đồ này. Sau đó, Coddy mô tả biểu đồ của bạn.

Biểu đồ có tiêu đề Toys in Cereal Boxes: tỷ lệ tích lũy trong 80 hộp giữ ở mức 0 trong 8 hộp, dao động rồi ổn định gần đường chấm màu đen tại 0.2

Tự làm thử

import numpy as np
import matplotlib.pyplot as plt

boxes = int(input())

# Đừng thay đổi các dòng bên dưới
rng = np.random.default_rng(25)
toys = rng.random(boxes) < 0.2

fig, ax = plt.subplots()
ax.set_title("Toys in Cereal Boxes")
ax.set_xlabel("Boxes opened")
ax.set_ylabel("Share with a toy")

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Thống kê cho machine learning

Tự luyện tập: Trình biên dịch Python online