Câu trả lời:
Tôi cũng đang học chủ đề này, và đây là những gì tôi tìm thấy:
Loại mã hóa này được gọi là mã hóa khả năng , mã hóa tác động hoặc mã hóa mục tiêu
Ý tưởng là mã hóa biến phân loại của bạn với việc sử dụng biến mục tiêu (liên tục hoặc phân loại tùy theo nhiệm vụ). Ví dụ: nếu bạn có tác vụ hồi quy, bạn có thể mã hóa biến phân loại của mình bằng giá trị trung bình của mục tiêu. Đối với mỗi danh mục, bạn tính giá trị trung bình tương ứng của mục tiêu (trong số danh mục này) và thay thế giá trị của danh mục bằng giá trị trung bình này.
Nếu bạn có nhiệm vụ phân loại, bạn tính tần suất tương đối của mục tiêu theo từng giá trị danh mục.
Từ quan điểm toán học, mã hóa này có nghĩa là xác suất mục tiêu của bạn, có điều kiện trên từng giá trị danh mục.
Nếu bạn làm điều đó một cách đơn giản, như tôi đã mô tả ở trên, bạn có thể sẽ có được một ước tính sai lệch. Đó là lý do tại sao trong cộng đồng Kaggle họ thường sử dụng 2 cấp độ xác nhận chéo. Đọc bình luận này của raddar ở đây . Các máy tính xách tay tương ứng là ở đây .
Báo giá:
Đó là giá trị trung bình của y. Nhưng không có nghĩa đơn giản, nhưng trong xác nhận chéo trong cách xác thực chéo;
Giả sử chúng ta có xác nhận chéo 20 lần. chúng ta cần bằng cách nào đó để tính giá trị trung bình của tính năng cho lần gập số 1 bằng cách sử dụng thông tin chỉ từ lần gấp # 2- # 20.
Vì vậy, bạn thực hiện các lần gấp # 2- # 20, tạo một bộ xác thực chéo khác trong đó (tôi đã thực hiện 10 lần). tính toán phương tiện cho mỗi lần rời khỏi (cuối cùng bạn nhận được 10 phương tiện). Bạn tính trung bình 10 phương tiện này và áp dụng vectơ đó cho bộ xác thực số 1 chính của bạn. Lặp lại điều đó trong 19 lần còn lại.
Thật khó để giải thích, khó hiểu và thành thạo :) Nhưng nếu làm đúng nó có thể mang lại nhiều lợi ích :)
Một triển khai mã hóa này là ở đây .
Trong thư viện R vtreat họ đã thực hiện mã hóa tác động. Xem bài này .
Trong thư viện CatBoost, họ có rất nhiều tùy chọn để mã hóa biến phân loại bao gồm mã hóa đích.
Không có mã hóa như vậy trong sklearn.
Mã hóa mục tiêu hiện có sẵn trong sklearn thông qua gói category_encoders.
Bộ mã hóa mục tiêu
class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = none, drop_invariant = false, return_df = True, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, smooth
Mã hóa mục tiêu cho các tính năng phân loại. Dựa trên để lại một cách tiếp cận ra.
Theo ghi nhận của josh trong bình luận ở trên.
Mã hóa khả năng vẫn chưa có sẵn trên scikit learn. Bạn có thể làm điều đó bằng cách tạo một từ điển, và sau đó thực hiện một chức năng thay thế.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]