2015-12-14 21 views
13

Khi sử dụng XGBoost, chúng ta cần chuyển đổi các biến phân loại thành số.Biến thể loại XGBoost: Dummification vs encoding

Nên có bất kỳ sự khác biệt trong số liệu hiệu suất/đánh giá giữa các phương pháp:

  1. dummifying biến phân loại của bạn
  2. mã hóa biến phân loại của bạn từ ví dụ (A, b, c) (1,2,3)

CŨNG:

Nên có bất kỳ lý do để không đi với phương pháp 2 bằng cách sử dụng ví dụ labelencoder?

Trả lời

27

xgboost chỉ giao dịch với các cột số.

nếu bạn có một tính năng [a,b,b,c] trong đó mô tả một biến phân loại (tức là không có mối quan hệ số)

Sử dụng LabelEncoder bạn sẽ chỉ cần có này:

array([0, 1, 1, 2]) 

Xgboostsai sẽ giải thích tính năng này như có một mối quan hệ số! Điều này chỉ cần ánh xạ mỗi chuỗi ('a','b','c') đến một số nguyên, không có gì khác.

đúng cách

Sử dụng OneHotEncoder bạn cuối cùng sẽ nhận được như sau:

array([[ 1., 0., 0.], 
     [ 0., 1., 0.], 
     [ 0., 1., 0.], 
     [ 0., 0., 1.]]) 

Đây là đại diện thích hợp của một biến phân loại cho xgboost hoặc bất kỳ công cụ học tập máy khác.

Pandas get_dummies là công cụ tốt để tạo biến giả (dễ sử dụng hơn theo ý kiến ​​của tôi).

Phương pháp # 2 trong câu hỏi trên sẽ không đại diện cho dữ liệu đúng

+3

Sẽ không này làm cho tính năng với nhiều danh mục xuất hiện quan trọng hơn những người có ít? – eleanora

+0

Cách 'Xgboost' biết xử lý' mảng ([1., 0., ...]) 'như phân loại thay vì số? –

+0

@ThiagoBalbo Đơn giản chỉ cần đặt: nó không. Bạn chỉ cần thay thế biến/tính năng/cột ban đầu bằng 3 biến nhị phân/tính năng/cột. – masu