Menu
CoddyTech

Vì sao cần co giãn đặc trưng

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

Khách hàng nào giống khách hàng mới nhất? Nhiều mô hình đo khoảng cách giữa các mẫu: bình phương độ chênh lệch của từng đặc trưng, cộng chúng lại rồi lấy căn bậc hai.

Một người 25 tuổi kiếm được 52.000 USD so với một người 61 tuổi kiếm được 53.000 USD:

Hai thanh biểu thị mức độ mỗi đặc điểm làm tăng khoảng cách giữa hai khách hàng: tuổi tác, chênh lệch 36 năm, làm tăng 1.296, một vệt quá mỏng để nhìn thấy; thu nhập, chênh lệch 1.000 USD, làm tăng 1.000.000, một thanh dài

Với cả một bảng, axis=1 tính tổng bình phương của từng hàng và .argmin() tìm hàng gần nhất:

a = np.array([25, 52000])  # tuổi, thu nhập
X = np.array([[61, 53000],   # người 61 tuổi
              [26, 55000]])  # người 26 tuổi có thu nhập $55,000
dists = np.sqrt(((X - a) ** 2).sum(axis=1))
print(np.round(dists, 2))
print(dists.argmin())

Kết quả in ra:

[1000.65 3000.  ]
0

Người 61 tuổi là gần nhất: số tiền đô la có giá trị lớn hơn, nên $1,000 vượt trội hơn 36 năm. Khi chưa quy đổi tỷ lệ, đơn vị lớn nhất sẽ quyết định.

Chương này giúp mọi tính năng đều có cơ hội thể hiện.

challenge icon

Thử thách

Trung bình

Một cửa hàng so sánh máy giặt theo giá ($), năng lượng (kWh mỗi năm) và lượng nước (lít mỗi lần giặt), được đặt tên trong features. Chương trình đọc vị trí của hai máy, i và j. In ra:

  1. Squared gaps: khoảng cách của từng đặc điểm sau khi bình phương.
  2. Distance: làm tròn đến 2 chữ số thập phân.
  3. Dominant feature: tên của đặc điểm có khoảng cách bình phương lớn nhất.

Với hai máy khác:

Squared gaps: [2500 6400    1]
Distance: 94.35
Dominant feature: energy

Tự làm thử

import numpy as np

features = ["price", "energy", "water"]
# Mỗi hàng tương ứng với một máy giặt: giá tính bằng đô la, điện năng tính bằng kWh mỗi năm, lượng nước tính bằng lít mỗi lần giặt
machines = np.array([[499, 160, 48],
                     [349, 210, 55],
                     [899, 120, 42],
                     [529, 250, 50],
                     [279, 230, 60],
                     [749, 140, 45]])
i = int(input())
j = int(input())

# 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