Tôi đang làm việc với một bộ dữ liệu với số lượng lớn các tính năng phân loại (> 80%) dự đoán một biến mục tiêu liên tục (ví dụ: Hồi quy). Tôi đã đọc khá nhiều về các cách để xử lý các tính năng phân loại. Và học được rằng mã hóa một nóng mà tôi đã sử dụng trong quá khứ thực sự là ý tưởng tồi, đặc biệt là khi nói đến rất nhiều tính năng phân loại với nhiều cấp độ (đọc các bài đăng này , và điều này ).
Mặc dù tôi đã bắt gặp các phương thức như mã hóa dựa trên mục tiêu (làm mịn) các tính năng phân loại thường dựa trên giá trị trung bình của các giá trị đích cho từng tính năng có lẽ là bài đăng / kernel này trong Kaggle. Tuy nhiên, tôi đang vật lộn để tìm ra một cách cụ thể hơn cho đến khi tôi tìm thấy CatBoost một công cụ tăng cường độ dốc nguồn mở trên các cây quyết định được phát hành năm ngoái bởi nhóm Yandex. Họ dường như cung cấp các tùy chọn đếm thống kê bổ sung cho các tính năng phân loại có khả năng hiệu quả hơn nhiều so với mã hóa đơn giản hoặc làm mịn.
Vấn đề là tài liệu không hữu ích làm thế nào để thiết lập cài đặt CTR . Tôi đã thử nhiều cách khác nhau nhưng nó không hoạt động. Tài liệu cho biết cài đặt TLB là đơn giản , được đưa ra dưới dạng ( phần cài đặt TLB ):
['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
'CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
...]
Đây là một ví dụ siêu đơn giản, dữ liệu trông như thế này:
import pandas as pd
import catboost
data = [{'profit': '342','country': 'holland','account': 'Jones LLC', 'saving': 150, 'debt': -60, 'age': 28},
{'profit': '875','country': 'germany','account': 'Alpha Co', 'saving': 200, 'debt': -10, 'age': 42},
{'profit': '127','country': 'italy','account': 'Blue Inc', 'saving': 50, 'debt': -300, 'age': 38 }]
df = pd.DataFrame(data)
Dưới đây là một Regressor Catboost đơn giản:
X_train = df.drop(['profit'],axis=1)
Y_train = df['profit']
categorical_features_indices = [0,2]
train_pool = catboost.Pool(X_train, Y_train, cat_features=categorical_features_indices)
model = catboost.CatBoostRegressor(
depth=3,
iterations=5,
eval_metric='RMSE',
simple_ctr=None)
model.fit(train_pool);
Vấn đề đơn giản , một trong các cài đặt CTR, là vấn đề !! Thật đáng tiếc vì có vẻ như gói này cung cấp các phương thức khác nhau, cho đến nay không có cách nào để truy cập chúng.
CẬP NHẬT ngày 9 tháng 8 năm 2018: Vài ngày trước tôi đã nêu vấn đề này cho nhà phát triển Catboost, xem tại đây và họ đã mở một vé cho nó để cung cấp một hướng dẫn.