Mã hóa một nóng vs giả trong Scikit-learn


50

Có hai cách khác nhau để mã hóa các biến phân loại. Nói, một biến phân loại có n giá trị. Mã hóa một nóng chuyển đổi nó thành n biến, trong khi mã hóa giả chuyển đổi nó thành biến n-1 . Nếu chúng ta có k biến phân loại, mỗi biến có n giá trị. Một mã hóa nóng kết thúc bằng biến kn , trong khi mã hóa giả kết thúc bằng biến kn-k .

Tôi nghe nói rằng đối với mã hóa một nóng, việc chặn có thể dẫn đến vấn đề về cộng tuyến, khiến cho mô hình không phát ra âm thanh. Có người gọi nó là " bẫy biến giả ".

Những câu hỏi của tôi:

  1. Mô hình hồi quy tuyến tính của Scikit-learn cho phép người dùng tắt chức năng chặn. Vì vậy, đối với mã hóa một lần nóng, tôi có nên luôn đặt fit_intercept = false không? Đối với mã hóa giả, fit_intercept phải luôn được đặt thành True? Tôi không thấy bất kỳ "cảnh báo" nào trên trang web.

  2. Vì mã hóa một nóng tạo ra nhiều biến hơn, nó có mức độ tự do hơn mã hóa giả không?

Câu trả lời:


35

Mô hình hồi quy tuyến tính của Scikit-learn cho phép người dùng tắt chức năng chặn. Vì vậy, đối với mã hóa một lần nóng, tôi có nên luôn đặt fit_intercept = false không? Đối với mã hóa giả, fit_intercept phải luôn được đặt thành True? Tôi không thấy bất kỳ "cảnh báo" nào trên trang web.

Đối với một mô hình tuyến tính không đều đặn với mã hóa một nóng, vâng, bạn cần đặt chặn là sai hoặc nếu không thì phải có cộng tuyến hoàn hảo. sklearncũng cho phép một hình phạt co rút sườn núi, và trong trường hợp đó là không cần thiết, và trên thực tế, bạn nên bao gồm cả chặn và tất cả các cấp. Đối với mã hóa giả, bạn nên bao gồm một phần chặn, trừ khi bạn đã chuẩn hóa tất cả các biến của mình, trong trường hợp đó phần chặn là 0.

Vì mã hóa một nóng tạo ra nhiều biến hơn, nó có mức độ tự do hơn mã hóa giả không?

Việc chặn là một mức độ tự do bổ sung, do đó, trong một mô hình được chỉ định rõ, tất cả đều bằng.

Đối với cái thứ hai, nếu có k biến phân loại thì sao? k biến được loại bỏ trong mã hóa giả. Là mức độ tự do vẫn như nhau?

x1,x2,,xn

x1+x2++xn=1

x

x1+x2++xk=1

và vì vậy bạn đã tạo ra một phụ thuộc tuyến tính

x1+x2+xnx1x2xk=0

Vì vậy, bạn phải bỏ qua một mức trong biến thứ hai và mọi thứ xếp thành đúng.

Nói rằng, tôi có 3 biến phân loại, mỗi biến có 4 cấp độ. Trong mã hóa giả, 3 * 4-3 = 9 biến được xây dựng với một lần chặn. Trong mã hóa một nóng, 3 * 4 = 12 biến được xây dựng mà không bị chặn. Tôi có đúng không?

3×4=12


Cảm ơn. Đối với cái thứ hai, nếu có k biến phân loại thì sao? k biến được loại bỏ trong mã hóa giả. Là mức độ tự do vẫn như nhau?
Munichong 18/07/2016

@ChongWang Tôi đã chỉnh sửa một phản hồi cho nhận xét của bạn vào câu trả lời của tôi.
Matthew Drury

Xin lỗi, tôi bị lạc một chút ở đây. Nói rằng, tôi có 3 biến phân loại, mỗi biến có 4 cấp độ. Trong mã hóa giả, 3 * 4-3 = 9 biến được xây dựng với một lần chặn. Trong mã hóa một nóng, 3 * 4 = 12 biến được xây dựng mà không bị chặn. Tôi có đúng không? Vì vậy, ở đây DF của mã hóa giả là 9-1 trong khi DF của mã hóa một nóng là 12. Tôi có đúng không?
Munichong

@ChongWang Chỉnh sửa lại.
Matthew Drury

@MatthewDrury Tôi có cùng một vấn đề với linear_model trong sklearn. Sau khi mã hóa giả, Cây quyết định và KNN hoạt động tốt, nhưng hồi quy tuyến tính rơi vào điểm kỳ dị. Tôi hiểu từ câu trả lời của bạn rằng tôi nên xóa "cấp độ từ biến thứ hai" nhưng tôi không biết thực tế nó có nghĩa là gì? Ví dụ: tôi có 3 tính năng số và 3 tính năng phân loại (nhà sản xuất, kiểu máy và Fuel_type). Mô hình tự nhiên phụ thuộc vào nhà sản xuất vì một nhà sản xuất có thể có n mô hình. Vậy làm thế nào để tiến hành trong loại kịch bản phổ biến này nếu tôi muốn sử dụng Hồi quy tuyến tính?
Harvey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.