Menu
CoddyTech

Chuẩn hóa

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

Nhiều mô hình học tốt nhất khi mọi đặc trưng đều có giá trị trung bình bằng 0 và độ lệch chuẩn bằng 1. Chuẩn hóa thực hiện điều đó: mỗi giá trị trở thành điểm z trong cột của nó.

Năm quả bí ngô, cân nặng tính bằng kg và chiều rộng tính bằng cm:

Hai hàng chấm trên một thước đo độ lệch chuẩn: cân nặng của năm quả bí ngô từ 8 đến 40 kg và chiều rộng của năm quả bí ngô từ 30 đến 65 cm, mỗi hàng được căn giữa theo giá trị trung bình riêng tại 0, tất cả nằm trong khoảng từ -1.6 đến 1.6

Broadcasting chuẩn hóa đồng thời tất cả các cột:

pumpkins = np.array([[30, 60],
                     [8, 30],
                     [22, 55],
                     [40, 65],
                     [15, 40]])
z = (pumpkins - pumpkins.mean(axis=0)) / pumpkins.std(axis=0)
print(np.round(z.mean(axis=0), 2))
print(np.round(z.std(axis=0), 2))

Kết quả in ra là:

[0. 0.]
[1. 1.]

Làm tròn trước khi kiểm tra: khi chưa làm tròn, giá trị trung bình bằng 0 có thể được in ra thành 2.22044605e-17, chỉ là một sai số làm tròn rất nhỏ.

Không giống min-max, phương pháp này không có phạm vi cố định: hầu hết giá trị nằm trong khoảng từ -2 đến 2.

challenge icon

Thử thách

Trung bình

Một trang trại bò sữa phát hiện những con bò khác thường. Mỗi hàng trong cows là một con bò: lượng sữa (lít mỗi ngày), cân nặng (kg) và tuổi (năm), được đặt tên trong features. Chương trình đọc vị trí của một con bò, k.

  1. Hoàn thành standardize(X). Các dòng kiểm tra sau đó sẽ in ra [0. 0. 0.] và [1. 1. 1.].
  2. Tìm điểm z-score của con bò ở vị trí k xa 0 nhất, bỏ qua dấu, rồi in ra như bên dưới, với 2 chữ số thập phân.

Với một con bò ở trang trại khác:

Column means: [0. 0. 0.]
Column stds: [1. 1. 1.]
Cow 2 stands out by weight: 1.76 std above the herd

Tự làm thử

import numpy as np

features = ["milk", "weight", "age"]
# Mỗi hàng tương ứng với một con bò: lượng sữa tính bằng lít mỗi ngày, cân nặng tính bằng kg, tuổi tính bằng năm
cows = np.array([[28, 610, 6],
                 [22, 540, 3],
                 [35, 680, 6],
                 [31, 590, 9],
                 [19, 650, 4],
                 [26, 520, 2],
                 [30, 600, 7]])
k = int(input())


# Trả về X với mọi cột đã được chuẩn hóa: giá trị trung bình bằng 0 và độ lệch chuẩn bằng 1
def standardize(X):
    # Thay dòng bên dưới bằng code chuẩn hóa
    return X


# Đừng sửa ba dòng bên dưới: chúng kiểm tra hàm (function) của bạn
z = standardize(cows)
print("Column means:", np.round(z.mean(axis=0), 2))
print("Column stds:", np.round(z.std(axis=0), 2))

# Viết code bên dưới: con bò k có điểm gì nổi bật?
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