2016-07-27 28 views
6

Tôi muốn tìm hiểu một mô hình Naive Bayes cho một vấn đề mà lớp là boolean (có một trong hai giá trị). Một số tính năng là boolean, nhưng các tính năng khác là phân loại và có thể đưa vào một số lượng nhỏ các giá trị (~ 5).Tôi có thể sử dụng sklearn.naive_bayes bằng các tính năng phân loại (nhiều) như thế nào?

Nếu tất cả các tính năng của tôi là boolean thì tôi muốn sử dụng sklearn.naive_bayes.BernoulliNB. Có vẻ như rõ ràng rằng sklearn.naive_bayes.MultinomialNBkhông phải những gì tôi muốn.

Một giải pháp là chia các tính năng phân loại của tôi thành các tính năng boolean. Ví dụ: nếu biến "X" có giá trị "đỏ", "xanh lục", "xanh dương", tôi có thể có ba biến: "X là màu đỏ", "X có màu xanh lục", "X là màu xanh lam". Điều đó vi phạm giả định về sự độc lập có điều kiện của các biến cho lớp, vì vậy nó có vẻ hoàn toàn không phù hợp.

Một khả năng khác là mã hóa biến này dưới dạng biến có giá trị thực, trong đó 0,0 có nghĩa là màu đỏ, 1,0 có nghĩa là màu xanh lục và 2.0 có nghĩa là màu xanh dương. Điều đó cũng có vẻ hoàn toàn không thích hợp để sử dụng GaussianNB (vì lý do rõ ràng).

Những gì tôi đang cố gắng làm không có vẻ lạ, nhưng tôi không hiểu làm thế nào để phù hợp với mô hình Naive Bayes mà sklearn mang lại cho tôi. Thật dễ dàng để mã hóa bản thân mình, nhưng tôi thích sử dụng sklearn nếu có thể vì lý do rõ ràng (nhất: để tránh lỗi).

[Chỉnh sửa để giải thích lý do tại sao tôi không nghĩ rằng đa thức NB là những gì tôi muốn]:

hiểu biết của tôi là trong đa thức NB các vector đặc trưng bao gồm tội danh bao nhiêu lần một mã thông báo đã được quan sát trong k iid mẫu.

Sự hiểu biết của tôi là điều này phù hợp với tài liệu phân loại khi có một lớp tài liệu cơ bản, sau đó mỗi từ trong tài liệu được giả định được vẽ từ phân phối phân loại cụ thể cho lớp đó. Tài liệu sẽ có các mã thông báo k, vectơ tính năng sẽ có chiều dài bằng với kích thước từ vựng và tổng số tính năng sẽ là k.

Trong trường hợp của tôi, tôi có một số biến bernoulli, cộng với một số biến phân loại. Nhưng không có khái niệm về "đếm" ở đây.

Ví dụ: các lớp là những người thích hoặc không thích toán học. Dự đoán là đại học (phân loại) và cho dù họ đã đi học sau đại học (boolean).

Tôi không nghĩ rằng điều này phù hợp với đa thức vì không có số lượng ở đây.

+0

Bạn có thể giải thích tại sao đa số Naive Bayes không tốt cho bạn? –

Trả lời

8

Một số tính năng là boolean, nhưng các tính năng khác là phân loại và có thể đảm nhận một số lượng nhỏ giá trị (~ 5).

Đây là một câu hỏi thú vị, nhưng nó thực sự là hơn một duy nhất:

  1. Làm thế nào để đối phó với một tính năng phân loại tại NB.
  2. Cách xử lý các tính năng không đồng nhất trong NB (và, như tôi sẽ chỉ ra trong phần sau, ngay cả hai tính năng phân loại không đồng nhất).
  3. Cách thực hiện việc này trong sklearn.

xem xét đầu tiên một tính năng phân loại đơn. NB giả định/đơn giản hóa rằng các tính năng độc lập. Ý tưởng của bạn về việc chuyển đổi nó thành nhiều biến nhị phân chính xác là của dummy variables. Rõ ràng, các biến giả này là bất kỳ điều gì ngoại trừ độc lập. Ý tưởng của bạn sau đó chạy một Bernoulli NB trên kết quả ngầm giả định độc lập. Trong khi được biết, trên thực tế, NB không nhất thiết phải phá vỡ khi phải đối mặt với các biến phụ thuộc, không có lý do gì để biến vấn đề thành cấu hình xấu nhất cho NB, đặc biệt là NB đa thức là một lựa chọn rất dễ dàng.

Ngược lại, giả sử sau khi biến biến phân loại đơn thành bộ dữ liệu nhiều cột bằng cách sử dụng các biến giả, bạn sử dụng NB đa thức. Lý thuyết cho đa thức NB states:

Với một mô hình sự kiện đa thức, mẫu (vectơ tính năng) đại diện cho các tần số mà các sự kiện nhất định đã được tạo ra bởi một đa thức ... trong đó p i là xác suất mà sự kiện i xảy ra. Một vector đặc trưng ... sau đó là một biểu đồ, với x i {\ displaystyle x_ {i}} x_ {i} đếm số lần sự kiện tôi đã được quan sát trong một trường hợp cụ thể. Đây là mô hình sự kiện thường được sử dụng để phân loại tài liệu, với các sự kiện biểu diễn sự xuất hiện của một từ trong một tài liệu (xem túi giả định từ).

Vì vậy, ở đây, mỗi trường hợp của biến phân loại duy nhất của bạn là "đoạn dài-1" và phân phối chính xác là đa thức. Cụ thể, mỗi hàng có 1 trong một vị trí và 0 trong tất cả các phần còn lại bởi vì một đoạn dài-1 phải có chính xác một từ, và do đó, đó sẽ là các tần số.

Lưu ý rằng từ quan điểm của đa số NB của sklearn, thực tế là tập dữ liệu là 5 cột, hiện không ngụ ý giả thiết về độc lập.


Bây giờ xem xét các trường hợp bạn có một tập dữ liệu gồm một số tính năng:

  1. Categorical
  2. Bernoulli
  3. Bình thường

Theo giả thiết rất của việc sử dụng NB, các biến này là độc lập. Do đó, bạn có thể làm như sau:

  1. Xây dựng một phân loại NB cho mỗi của dữ liệu phân loại riêng biệt, sử dụng biến giả của bạn và NB đa thức.
  2. Tạo một bộ phân loại NB cho tất cả dữ liệu Bernoulli cùng một lúc - điều này là do một số Bernoulli NB của sklearn chỉ đơn giản là một lối tắt cho một số tính năng Bernoulli NBs.
  3. Tương tự như 2 cho tất cả các tính năng thông thường.

Theo định nghĩa về tính độc lập, xác suất cho một cá thể, là sản phẩm của xác suất của các cá thể của các phân loại này.

+0

Cảm ơn bạn đã gửi tin nhắn! Tôi đã cập nhật câu hỏi của mình để giải thích lý do tại sao tôi không nghĩ rằng đa phương tiện NB phù hợp. Tôi có thể sai và thiếu một cái gì đó, hoặc một cách thông minh để đúc vấn đề của tôi vào đa thức NB. Nhưng thiết lập đa thức cơ bản có vẻ sai với tôi? Cảm ơn bạn lần nữa! –

+0

@NedRuggeri Xem cập nhật. –

+0

Câu trả lời hay! Câu hỏi tiếp theo: Tôi không chắc cách nhân xác suất từ ​​các bộ phân loại NB khác nhau là thích hợp. Ví dụ: Cho phép xem xét một trong các lớp đích 'k'. Chúng ta xây dựng một trình phân loại với các đặc tính của Bernoulli và nhận được 'P (k | X_ber) = P (k). P (X_ber | k)/Z'. Với trình phân loại thứ hai cho một tính năng phân loại, chúng ta nhận được 'P (k | X_cat) = P (k). P (X_cat | k)/Z'. Nhân các kết thúc này với bình phương của 'P (k)' trước trong tử số, trong khi giá trị mong muốn là 'P (k | X_ber, X_cat) = P (k). P (X_ber | k) .P (X_cat | k)/Z'. Chúng ta có nên chia cho trước khi nhân lên không? – dhrumeel

Các vấn đề liên quan