Menu
CoddyTech

Cột có kiểu dữ liệu hỗn hợp

Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 46 trên 58.

Hầu hết các bảng kết hợp chữ và số, mỗi loại cần một bước xử lý riêng. ColumnTransformer đưa từng cột đến bước xử lý tương ứng rồi ghép các kết quả:

Sơ đồ có tiêu đề 4 cột đầu vào, 7 cột đầu ra. Ba đĩa than có các cột thể loại, tình trạng, giá và năm. Thể loại và tình trạng đi qua OneHotEncoder để tạo thành năm cột 0/1: jazz, rock, tốt, còn nguyên, đã cũ. Giá và năm đi qua StandardScaler để tạo thành hai cột đã chuẩn hóa

Đối với cửa hàng đĩa nhạc, trong code:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

prep = ColumnTransformer([
    ("words", OneHotEncoder(), ["genre", "condition"]),
    ("numbers", StandardScaler(), ["price", "year"]),
])
pipe = make_pipeline(prep, LogisticRegression(max_iter=1000))

Mỗi mục gồm một tên, một bước và các cột của mục đó. Khác với get_dummies, bộ mã hóa (encoder) ghi nhớ các danh mục trong dữ liệu huấn luyện, vì vậy một bản ghi mới sẽ có cùng 7 cột.

challenge icon

Thử thách

Trung bình

Một câu lạc bộ cờ vua muốn biết xác suất thắng của mỗi người chơi trước một ván đấu. Phần khởi đầu tách chess.csv và đọc thông tin ván đấu tối nay.

  1. Mã hóa opening và color, chuẩn hóa rating_gap và minutes, rồi in số cột được tạo ra từ các hàng huấn luyện.
  2. Kết hợp bước này với hồi quy logistic, huấn luyện mô hình rồi in độ chính xác trên tập kiểm tra.
  3. In xác suất thắng trong ván đấu tối nay.

Một câu lạc bộ khác, ba khai cuộc, và sicilian, black, 50, 15:

Columns after preparing: 7
Test accuracy: 0.805
Win chance: 0.66

Tự làm thử

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

# Các ván cờ của một câu lạc bộ: khai cuộc, màu quân của người chơi, điểm xếp hạng của họ trừ đi
# điểm xếp hạng của đối thủ, số phút còn trên đồng hồ và người chơi thắng (1) hay không (0)
games = pd.read_csv("chess.csv")
X = games[["opening", "color", "rating_gap", "minutes"]]
y = games["won"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Ván cờ tối nay, một hàng có cùng các cột
game = pd.DataFrame({"opening": [input()], "color": [input()],
                     "rating_gap": [int(input())], "minutes": [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 Học có giám sát

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