Menu
CoddyTech

Phép broadcasting

Thuộc phần Dữ liệu và biểu đồ trong hành trình Machine Learning của Coddy. Bài học 13 trên 60.

Mô hình học tốt hơn khi mỗi đặc trưng có giá trị gần 0. Vì vậy, bạn trừ giá trị trung bình của mỗi cột khỏi từng giá trị trong cột đó, rồi NumPy sao chép các giá trị trung bình xuống từng hàng:

Bảng 3 hàng 2 cột về chiều cao và cân nặng, trừ đi các giá trị trung bình ở hàng 170 và 70 được sao chép xuống cả ba hàng, ta được bảng đã định tâm: 0 và -10, 10 và 10, -10 và 0

Trong code, với chiều cao và cân nặng của ba người:

data = np.array([[170, 60],
                 [180, 80],
                 [160, 70]])
print(data - data.mean(axis=0))

Kết quả in ra:

[[  0. -10.]
 [ 10.  10.]
 [-10.   0.]]

Việc sao chép đó là phát tán. Bảng hiện đã được căn giữa: mỗi giá trị cho biết nó cách giá trị trung bình của cột bao xa.

Trung bình có dạng (2,): mỗi cột trong bảng (3, 2) có một giá trị. Mọi độ dài khác đều gây ra lỗi.

challenge icon

Thử thách

Dễ

Ứng dụng thể dục đưa mỗi bảng về tâm trước khi huấn luyện. Code khởi đầu gọi center trên hai bảng, users (3 đặc trưng) và workouts (2), rồi in ra kết quả. Hiện tại, center trả về bảng không thay đổi.

Hoàn thiện center để hàm trừ giá trị trung bình của mỗi cột khỏi cột đó, với số cột bất kỳ. Giữ nguyên các dòng bên dưới hàm.

Với hai người dùng và hai buổi tập, đầu ra sẽ trông như sau:

Centered users:
[[-6.  7. -5.]
 [ 6. -7.  5.]]
Column means after centering: [0. 0. 0.]
Centered workouts:
[[-10. -90.]
 [ 10.  90.]]
Column means after centering: [0. 0.]

Tự làm thử

import numpy as np


def center(table):
    # Trả về bảng sau khi trừ mỗi cột đi giá trị trung bình của cột đó
    # Viết code của bạn bên dưới
    return table


# Mỗi hàng ứng với một người dùng: tuổi, nhịp tim khi nghỉ, số phút tập thể dục mỗi ngày
users = np.array([[25, 62, 30],
                  [31, 70, 45],
                  [40, 58, 20],
                  [29, 66, 25]])
# Mỗi hàng ứng với một buổi tập: số phút, lượng calo đã đốt cháy
workouts = np.array([[30, 240],
                     [45, 410],
                     [20, 150],
                     [60, 520],
                     [35, 300]])

# Đừng thay đổi các dòng bên dưới
print("Centered users:")
print(center(users))
print("Column means after centering:", np.round(center(users).mean(axis=0), 2))
print("Centered workouts:")
print(center(workouts))
print("Column means after centering:", np.round(center(workouts).mean(axis=0), 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 Dữ liệu và biểu đồ

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