Tính năng xây dựng và chuẩn hóa trong học máy


13

Hãy nói rằng tôi muốn tạo Trình phân loại hậu cần cho phim M. Các tính năng của tôi sẽ giống như tuổi của người, giới tính, nghề nghiệp, địa điểm. Vì vậy, tập huấn luyện sẽ là một cái gì đó như:

  • Tuổi Giới tính Nghề nghiệp Địa điểm Thích (1) / Không thích (0)
  • Phần mềm 23 M US 1
  • 24 F Bác sĩ Anh 0

và v.v .... Bây giờ câu hỏi của tôi là làm thế nào để mở rộng và thể hiện các tính năng của mình. Một cách tôi nghĩ: Chia tuổi thành các nhóm tuổi, vì vậy 18-25, 25-35, 35 trở lên, Giới tính là M, F, Địa điểm là Hoa Kỳ, Vương quốc Anh, Khác. Bây giờ hãy tạo một tính năng nhị phân cho tất cả các giá trị này, do đó độ tuổi sẽ có 3 tính năng nhị phân tương ứng với một nhóm tuổi, v.v. Vì vậy, một Nam 28 tuổi từ Hoa Kỳ sẽ được đại diện là 010 10 100 (010-> Nhóm tuổi 25-35, 10 -> Nam, 100 -> Hoa Kỳ)

Điều gì có thể là cách tốt nhất để thể hiện các tính năng ở đây? Ngoài ra, tôi nhận thấy trong một số ví dụ. của sklearn rằng tất cả các tính năng đã được thu nhỏ / chuẩn hóa theo một cách nào đó, ví dụ: Giới tính được biểu thị bằng hai giá trị, 0,0045 và -.0,0045 cho Nam và nữ. Tôi không có bất kỳ manh mối nào về cách thực hiện chia tỷ lệ / chuẩn hóa như thế này?


Nó không rõ ràng cho tôi tại sao bạn muốn mở rộng các tính năng của bạn? Thông thường các tính năng được chuẩn hóa để có 0 unity std dev. Bạn có thể cần xác định vấn đề theo các lớp mà bạn đang cố gắng phân loại, hồi quy logistic rất hữu ích cho phân loại nhị phân.
BGreene

Bạn chắc chắn không muốn phân loại độ tuổi. "Đánh giá phim" được đo như thế nào? Đây có phải là thang điểm từ 1 đến 10, "thích / không thích" hay không?
Peter Flom - Tái lập Monica

Để đơn giản, hãy giả sử rằng chỉ có hai lớp, Thích và Không thích. Giống như là 1 và Không thích là 0. Đã thay đổi báo cáo vấn đề để phản ánh điều này.
snow_leopard

Câu trả lời:


15

Trường hợp nhị phân

Nếu bạn muốn các tính năng của mình là nhị phân, các đại diện tốt cho các giá trị phân loại (tương ứng thực ) là mã hóa nóng ( nhiệt kế tương ứng ). Bạn không cần phải bình thường hóa chúng.

Đối với một mã hóa nóng của một tính năng phân loại , bạn chỉ cần dành một bit cho mỗi lớp. Do đó, độ dài của mã hóa này là số lượng các lớp tính năng của bạn. Hãy lấy ví dụ về đất nước của bạn,

  • 00001 cho Hoa Kỳ
  • 00010 cho Vương quốc Anh
  • 00100 cho Châu Á
  • 01000 cho Châu Âu
  • 10000 cho người khác

Để mã hóa nhiệt kế của một tính năng thực / số nguyên , bạn phải chọn độ dài và ngưỡng. Ví dụ về tuổi của bạn, bạn đã chọn phân chia tuổi theo ngưỡng 18,25 và 35. Mã hóa sẽ là

  • 000 cho 0-17
  • 001 cho 18-25
  • 011 cho 25-34
  • 111 cho 35 trở lên

00010BạnK01130yo

Trường hợp liên tục

00010BạnK3030yo

Như BGreene đã nói, sau đó bạn nên bình thường hóa giá trị này để giữ giá trị trung bình bằng 0 và độ lệch chuẩn là 1, đảm bảo tính ổn định của nhiều mô hình hồi quy. Để làm điều đó, chỉ cần trừ trung bình theo kinh nghiệm và chia cho độ lệch chuẩn theo kinh nghiệm.

Y_normalized = ( Y - mean(Y) ) / std(Y)

(30-25)/10= =0,5

00010BạnK0,530yo

Thật tuyệt ... vì vậy, giả sử chúng ta có một người mẫu như sau: Quốc gia: Vương quốc Anh, Agegroup: 25-34. Điều này sẽ dẫn đến các giá trị là Quốc gia: 2 , Agegroup: 4 nếu chúng tôi sử dụng một mã hóa nóng . Bây giờ trong khi tạo một vector tính năng, chúng ta nên bình thường hóa chúng. Vì vậy, giả sử họ đến là 0,4 và 0,6, sau đó vectơ tính năng đầu vào của chúng tôi để mô hình hóa về cơ bản trở thành [0,4, 0,6], đúng không?
snow_leopard

hmm .. nếu tôi sử dụng mã hóa "một nóng" thì tôi có nên chuyển đổi giá trị mã hóa thành biểu diễn Integer của nó như một tính năng không, ví dụ 0010 trở thành 2. HOẶC tôi nên coi đây là một bộ gồm 4 tính năng trong đó chỉ có một tính năng sẽ BẬT? Trong trường hợp trước, nó không đưa ra một khái niệm rằng 1000 là hơn 0001 đến 0100, điều này có thể không phải là ý định vì chúng tôi không muốn giá trị tính năng của Hoa Kỳ gần với giá trị tính năng của Anh hơn giá trị châu Á hay cái gì khác?
snow_leopard

Tôi chỉnh sửa câu trả lời của tôi để làm rõ những điểm này. Bạn không cần bình thường hóa các tính năng nhị phân và bạn phải coi chúng là một vectơ, không chuyển đổi chúng thành một số nguyên.
Emile

Thực sự hữu ích và giải thích rõ ràng. Cảm ơn!
George Liu
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.