Các tính năng mã hóa như tháng và giờ dưới dạng phân loại hoặc số?


23

Là tốt hơn để mã hóa các tính năng như tháng và giờ dưới dạng yếu tố hoặc số trong mô hình học máy?

Một mặt, tôi cảm thấy mã hóa số có thể hợp lý, bởi vì thời gian là một quá trình tiến triển (tháng thứ năm tiếp theo là tháng thứ sáu), nhưng mặt khác tôi nghĩ mã hóa chiến lược có thể hợp lý hơn vì tính chất tuần hoàn của năm và ngày (tháng thứ 12 được theo sau bởi tháng đầu tiên).

Có một giải pháp chung hoặc quy ước cho việc này?


Tôi đã đối mặt với cùng một vấn đề trong việc xác định biến số giờ trong ngày (1 đến 24) trong mô hình RF. Nếu tôi chuyển đổi biến thành phân loại, hàm VarImp hiển thị giá trị quan trọng cho mỗi giờ và nó trông rất vô tổ chức. Tôi chỉ tự hỏi rằng có cần thiết phải chuyển đổi loại số 'giờ trong ngày' thành phân loại không?
Mahmudur Rahman

Câu trả lời:


19

Bạn đã xem xét việc thêm phép biến đổi (sin, cosine) của biến thời gian trong ngày chưa? Điều này sẽ đảm bảo rằng 0 và 23 giờ chẳng hạn gần nhau, do đó cho phép tính chất chu kỳ của biến số tỏa sáng.

( Thông tin thêm )


Có vấn đề với điều này bởi vì nếu tôi làm: sin (pi * X / 24) trong đó X trong [0, 23] chúng ta có cùng một đánh giá trong 6 giờ sáng và 6 giờ chiều như sin (pi * 6/24) == sin (pi * 18/24). nhưng đây là những giờ hoàn toàn khác nhau
Eran Moshe

Có thể thực hiện chu trình như thế này: sin (pi * X / 12). Cảm ơn Eran:]
Eran Moshe

@EranMoshe fyi trong bài đăng từ liên kết ở trên họ sử dụng hệ số 2 * pi thay vào đó, vì vậy sẽ là tội lỗi (2 * pi * X / 12) - họ đưa ra một số lý do cho điều này trong các bình luận
tsando

Và (2 * pi X / 24) của nó là (pi X / 12):] Như bạn thấy tôi đã vật lộn với cùng một vấn đề chính là tác giả của blog.davidkaleko.com/feature-engineering-cyclical-features.html đã vật lộn với. Và trong các bình luận, bạn có thể thấy "Mariel G" sửa lỗi cho anh ta chính xác như tôi đã nhận ra: pi * X / 12 sẽ lưu hành trong giờ trong ngày. Điều tôi cũng học được là bạn phải lấy các thành phần cos và sin của điều này để xác định khoảng thời gian 24 giờ thực sự! (bạn cần một vòng tròn thực sự chứ không phải chỉ là một hàm tuần hoàn)
Eran Moshe

@EranMoshe ah vâng, nếu bạn muốn làm trong nhiều giờ thì có thể giảm xuống còn piX / 12, nhưng nếu bạn muốn làm nhiều tháng, thì đó sẽ là 2piX / 12 tức là pi / 6. Vì vậy, nói chung sẽ là 2piX / kỳ
tsando

9

Câu trả lời phụ thuộc vào loại mối quan hệ mà bạn muốn thể hiện giữa tính năng thời gian và biến mục tiêu.

Nếu bạn mã hóa thời gian dưới dạng số, thì bạn đang áp đặt một số hạn chế nhất định đối với mô hình. Đối với mô hình hồi quy tuyến tính, hiệu ứng của thời gian bây giờ là đơn điệu, mục tiêu sẽ tăng hoặc giảm theo thời gian. Đối với cây quyết định, các giá trị thời gian gần nhau sẽ được nhóm lại với nhau.

Thời gian mã hóa theo phân loại giúp mô hình linh hoạt hơn, nhưng trong một số trường hợp, mô hình có thể không có đủ dữ liệu để học tốt. Một kỹ thuật có thể hữu ích là nhóm các giá trị thời gian lại với nhau thành một số bộ và sử dụng bộ làm thuộc tính phân loại.

Một số ví dụ nhóm:

  • Đối với tháng, nhóm thành quý hoặc mùa, tùy thuộc vào trường hợp sử dụng. Ví dụ: Jan-Mar, April-Jun, v.v.
  • Đối với giờ trong ngày, nhóm vào các thùng thời gian trong ngày: sáng, tối, v.v.
  • Đối với ngày trong tuần, nhóm vào ngày trong tuần, cuối tuần.

Mỗi trong số trên cũng có thể được sử dụng trực tiếp như một thuộc tính phân loại, được cung cấp đủ dữ liệu. Hơn nữa, các nhóm cũng có thể được phát hiện bằng phân tích dữ liệu, để bổ sung cho cách tiếp cận dựa trên kiến ​​thức miền.


4

Tôi khuyên bạn nên sử dụng các tính năng số. Sử dụng các tính năng phân loại về cơ bản có nghĩa là bạn không coi khoảng cách giữa hai loại là có liên quan (ví dụ: loại 1 gần với loại 2 như loại 3). Điều này chắc chắn không phải là trường hợp trong nhiều giờ hoặc nhiều tháng.

Tuy nhiên, vấn đề mà bạn nêu ra là bạn muốn đại diện cho giờ và tháng theo cách 12 gần với 11 như để 1. Để đạt được điều đó, tôi khuyên bạn nên đi với những gì được đề xuất trong các nhận xét và sử dụng một hàm sin / cosine trước khi sử dụng giờ / tháng làm các tính năng số.


3

Nó phụ thuộc vào thuật toán bạn đang sử dụng.

Nếu bạn đang sử dụng các thuật toán dựa trên cây như rừng ngẫu nhiên, chỉ cần vượt qua câu hỏi này. Mã hóa phân loại không cần thiết cho các thuật toán dựa trên cây.

Đối với các thuật toán khác như mạng thần kinh, tôi khuyên bạn nên thử cả hai phương pháp (liên tục & phân loại). Hiệu ứng khác nhau giữa các tình huống khác nhau.


Nó phụ thuộc vào việc thực hiện dựa trên cây. Các gói được sử dụng rộng rãi như scikit-learn và xgboost không nhận ra các biến phân loại. Bạn dự kiến ​​sẽ mã hóa một nóng chúng.
Ricardo Cruz

Từ bài đăng này: directiondatascience.com/, bạn không nên sử dụng một điểm nóng cho bất cứ điều gì dựa trên cây quyết định, đó là điều mà tôi đang tìm hiểu một cách khó khăn.
ashley

1

Bởi vì tất cả các dữ liệu bạn có được xác định rõ, tôi sẽ đề xuất cho bạn một mã hóa phân loại, cũng dễ áp ​​dụng hơn.


1

Để viết lại câu trả lời được cung cấp bởi @raghu . Một sự khác biệt lớn giữa các tính năng phân loại và số là liệu độ lớn của các con số có thể so sánh được, tức là năm 2019 lớn hơn 2018 hay tháng 12 (12) lớn hơn tháng 3 (3)? Không hẳn vậy. Mặc dù có một thứ tự liên tiếp trong những con số này, độ lớn của chúng không thể so sánh được. Do đó, chuyển đổi thành một giá trị phân loại có thể có ý nghĩa hơn.

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.