Menu
CoddyTech

StandardScaler

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

Mô hình phải chuẩn hóa từng mẫu mới giống hệt cách nó chuẩn hóa dữ liệu huấn luyện. StandardScaler của scikit-learn chuẩn hóa dữ liệu và ghi nhớ cách thực hiện:

Sơ đồ: 4 công việc trước đây của một người lau cửa sổ, X_train, đi qua fit vào một bộ chuẩn hóa ghi nhớ mean_ 8 và 22, cùng scale_ 4.47 và 9.72. Một công việc mới, 8 và 30, đi qua transform, sử dụng các số đó, rồi cho ra 0.00 và 0.82

Trong code, mỗi công việc gồm số cửa sổ được lau và số phút cần thiết:

from sklearn.preprocessing import StandardScaler

X_train = np.array([[2, 8], [10, 25], [6, 20], [14, 35]])
scaler = StandardScaler()
scaler.fit(X_train)
X_new = np.array([[8, 30]])  # một mẫu: bảng có một hàng
print(np.round(scaler.transform(X_new), 2))

Kết quả in ra:

[[0.   0.82]]

fit học giá trị trung bình và độ lệch chuẩn của từng cột (chia cho n, như np.std), rồi lưu chúng trong scaler.mean_ và scaler.scale_. transform áp dụng các giá trị đó.

Không bao giờ khớp trên dữ liệu mới: giá trị đó sẽ là giá trị trung bình của chính nó và trở thành [[0. 0.]]. Trên dữ liệu huấn luyện, fit_transform thực hiện cả hai việc trong một lần gọi.

challenge icon

Thử thách

Trung bình

Bộ phân loại đã học từ những quả bơ trong X_train: trọng lượng, độ cứng và số ngày kể từ khi thu hoạch. Chương trình đọc một quả bơ mới vào bảng một hàng new_avocado, nhưng phép chuẩn hóa ban đầu in ra [[0. 0. 0.]] cho mọi quả bơ.

  1. Sửa lại: chuẩn hóa quả bơ mới bằng giá trị trung bình và độ lệch chuẩn của dữ liệu huấn luyện.
  2. Đếm các số đo lệch hơn 2 độ lệch chuẩn so với giá trị trung bình của dữ liệu huấn luyện, theo cả hai chiều, rồi in như bên dưới.

Với một mẻ khác:

New avocado: [[2.98 0.   0.09]]
1 of 3 measurements are more than 2 std from the training avocados

Tự làm thử

import numpy as np
from sklearn.preprocessing import StandardScaler

# Các quả bơ dùng để huấn luyện, mỗi hàng gồm: khối lượng tính bằng gam, độ cứng từ 1 đến 10, số ngày kể từ khi thu hoạch
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# Một quả bơ mới trên băng chuyền
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# Đoạn code này in ra [[0. 0. 0.]] cho mọi quả bơ: hãy sửa lỗi
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

# 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