Menu
CoddyTech

Mã hóa one-hot

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

Nhạc cụ không có thứ tự: nếu đánh số 1, 2, 3, piano sẽ được xem là lớn hơn trống. Mã hóa one-hot tạo một cột 0/1 riêng cho mỗi danh mục:

Nhạc cụ của bốn học sinh gồm piano, trống, piano, cello được chuyển thành ba cột có tên cello, trống và piano: mỗi hàng có một số 1 duy nhất trong cột tương ứng với nhạc cụ đó và số 0 ở các cột còn lại, trong khi cột số tuần được giữ nguyên

pd.get_dummies thực hiện việc đó, còn dtype=int yêu cầu dùng 1 và 0 thay vì True và False:

pupils = pd.DataFrame({"instrument": ["piano", "drums", "piano", "cello"],
                       "weeks": [4, 3, 6, 10]})
encoded = pd.get_dummies(pupils, columns=["instrument"], dtype=int)
print(encoded)

Kết quả in ra:

   weeks  instrument_cello  instrument_drums  instrument_piano
0      4                 0                 0                 1
1      3                 0                 1                 0
2      6                 0                 0                 1
3     10                 1                 0                 0

Các cột mới được thêm vào cuối, mỗi giá trị một cột, theo thứ tự bảng chữ cái. Cái giá phải trả là chiều rộng: 500 giá trị khác nhau sẽ thêm 500 cột.

challenge icon

Thử thách

Trung bình

Một trang web du lịch liệt kê các cabin trong cabins.csv. Chương trình đọc tên cột, area hoặc heat. Mã khởi đầu gán số cho cột để tính tương quan với giá, nhưng cả hai cột đều không có thứ tự: r đó là bịa ra.

  1. Thay các dòng trong mã: mã hóa cột theo phương pháp one-hot (0 và 1).
  2. In ra số cột mới, rồi in từng cột mới cùng số lượng giá trị 1.

Với năm cabin và đầu vào heat:

heat became 2 columns:
heat_gas: 3 cabins
heat_wood: 2 cabins

Tự làm thử

import pandas as pd

cabins = pd.read_csv("cabins.csv")
column = input()

# Viết code của bạn bên dưới
# Những dòng này đánh số các khu vực và loại sưởi theo một thứ tự vốn không có: hãy thay chúng
numbers = {"coast": 1, "hills": 2, "lake": 3, "woods": 4, "gas": 1, "solar": 2, "wood": 3}
cabins[column] = cabins[column].map(numbers)
print(f"{column} against price: r = {round(cabins[column].corr(cabins['price']), 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