Menu
CoddyTech

Phương sai và độ lệch chuẩ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 3 trên 64.

.std() là khoảng cách điển hình so với giá trị trung bình. Ở đây, khoảng cách này được tính thủ công cho năm lần chiết xuất espresso:

Năm lần chiết xuất espresso được biểu diễn bằng các chấm quanh đường màu cam biểu thị giá trị trung bình ở mức 26 giây. Một đoạn thẳng màu xám nối mỗi chấm với đường này, kèm độ lệch tương ứng: -2, +1, -1, +4 và -2

Mỗi khoảng cách so với giá trị trung bình là một độ lệch. Các độ lệch triệt tiêu nhau thành 0, vì vậy hãy bình phương chúng rồi tính trung bình: đó là phương sai.

shots = np.array([24, 27, 25, 30, 24])
deviations = shots - shots.mean()
variance = (deviations ** 2).mean()
print(deviations)
print(variance, np.round(np.sqrt(variance), 2))

Kết quả in ra là:

[-2.  1. -1.  4. -2.]
5.2 2.28

Căn bậc hai của nó, độ lệch chuẩn, đưa đơn vị giây bình phương trở lại thành giây: 2.28. np.var(a) và np.std(a) thực hiện mỗi phép tính chỉ với một lần gọi.

Một đặc trưng có std bằng 0 không bao giờ thay đổi, vì vậy nó không cung cấp thông tin gì cho mô hình.

challenge icon

Thử thách

Dễ

Việc kiểm soát chất lượng kiểm tra xem máy chiết nước ép vào chai có đồng đều không. Chương trình khởi đầu đọc sáu thể tích tính bằng ml và in ra kết quả mà spread_by_hand(a) trả về, bên cạnh kết quả của np.std. Hoàn thiện hàm đó để hàm trả về:

  1. phương sai: giá trị trung bình của bình phương các độ lệch so với giá trị trung bình của a,
  2. độ lệch chuẩn, căn bậc hai của phương sai.

Với các thể tích 1004, 996, 1011, 993, 1002 và 998:

Variance: 34.56 ml squared
Std: 5.88 ml
Same as np.std: True

Tự làm thử

import numpy as np

values = []
for i in range(6):
    values.append(int(input()))
volumes = np.array(values)


# Trả về phương sai và độ lệch chuẩn của mảng (array) a
def spread_by_hand(a):
    # Viết code ở đây, rồi trả về hai giá trị (value) thay cho 0, 0
    return 0, 0


# Đừng thay đổi các dòng bên dưới
variance, std = spread_by_hand(volumes)
print(f"Variance: {np.round(variance, 2)} ml squared")
print(f"Std: {np.round(std, 2)} ml")
print("Same as np.std:", np.round(std, 2) == np.round(np.std(volumes), 2))
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