2010-05-22 73 views
7

Là một bài tập ở trường, tôi bắt buộc phải thực hiện thuật toán Naïve Bayes mà tôi định làm trong Java.Thực hiện thuật toán Naïve Bayes trong Java - Cần một số hướng dẫn

Khi cố gắng hiểu cách thực hiện, tôi đã đọc cuốn sách "Khai thác dữ liệu - Công cụ và kỹ thuật học máy thực tế" có phần về chủ đề này nhưng vẫn không chắc chắn về một số điểm chính đang chặn tiến trình của tôi.

Vì tôi đang tìm kiếm hướng dẫn không giải pháp ở đây, tôi sẽ nói với các bạn những gì tôi nghĩ trong đầu, những gì tôi nghĩ là cách tiếp cận đúng và đổi lại yêu cầu sửa/hướng dẫn sẽ rất được đánh giá cao. xin lưu ý rằng tôi là người mới bắt đầu tuyệt đối về thuật toán Naïve Bayes, Khai phá dữ liệu và lập trình chung để bạn có thể thấy các nhận xét/tính toán ngu ngốc bên dưới:

Tập dữ liệu đào tạo tôi có 4 thuộc tính/tính năng là số và bình thường (trong khoảng [0 1]) sử dụng Weka (không có giá trị thiếu) và một lớp danh nghĩa (có/không)

1) các dữ liệu đến từ một tập tin csv là số do đó

    * Căn cứ vào thuộc tính này là số tôi sử dụng công thức PDF (xác suất mật độ xác suất).
      + Để tính PDF trong java tôi lần đầu tiên tách các thuộc tính dựa vào việc họ đang ở trong lớp có hoặc lớp không và giữ chúng vào mảng khác nhau (array class yes and array class no)
      + Sau đó tính toán giá trị trung bình ( sum of the values in row/number of values in that row) và bói toán tiêu chuẩn cho mỗi người trong số 4 thuộc tính (cột) của từng loại
      + Bây giờ để tìm PDF của một giá trị nhất định (n) i làm (n-mean)^2/(2*SD^2),
      + Sau đó, để tìm P(yes | E)P(no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, mà chỉ ra lớp nó thuộc về

Trong thời gian của Java, tôi đang sử dụng ArrayList of ArrayListDouble để lưu trữ các giá trị thuộc tính.

cuối cùng tôi không biết cách lấy dữ liệu mới? Tôi có nên yêu cầu tệp đầu vào (như csv) hoặc dấu nhắc lệnh và yêu cầu 4 giá trị không?

Tôi sẽ dừng lại ở đây ngay bây giờ (có thêm câu hỏi) nhưng tôi lo lắng điều này sẽ không nhận được bất kỳ phản hồi nào trong thời gian bao lâu. Tôi sẽ thực sự đánh giá cao những người dành thời gian đọc các vấn đề và bình luận của tôi.

+0

có tổng quan về cách tôi sẽ triển khai thuật toán đúng không? – ke3pup

Trả lời

5

Điều bạn đang làm gần như chính xác.

  + Then to find P(yes | E) and P(no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, which indicates the class it belongs to 

Ở đây, bạn quên nhân P trước (yes) hoặc P (không). Hãy nhớ các công thức quyết định:

P(Yes | E) ~= P(Attr_1 | Yes) * P(Attr_2 | Yes) * P(Attr_3 | Yes) * P(Attr_4 | Yes) * P(Yes) 

Đối với Naive Bayes (và bất kỳ thuật toán/phân loại được giám sát khác), bạn cần có dữ liệu đào tạo và dữ liệu thử nghiệm. Bạn sử dụng dữ liệu đào tạo để đào tạo mô hình và thực hiện dự đoán trên dữ liệu thử nghiệm. Bạn chỉ có thể sử dụng dữ liệu đào tạo làm dữ liệu thử nghiệm. Hoặc bạn có thể chia tệp csv thành hai phần, một tệp để đào tạo và một tệp để thử nghiệm. Bạn cũng có thể thực hiện xác thực chéo trên tệp csv.

+0

Chắc chắn sử dụng xác thực chéo nếu có thể. Không bao giờ kiểm tra dữ liệu đào tạo của bạn nếu bạn có thể tránh được. –

+0

@Shaggy, thử nghiệm về đào tạo là một tùy chọn và phải cho một tập dữ liệu mới hoặc trình phân loại được triển khai mới. Nó cho bạn biết cách tối ưu hóa được thực hiện. Nếu một trình phân loại không hoạt động tốt trên dữ liệu huấn luyện, thì trình phân loại này không thể được sử dụng cho tập dữ liệu. Hiệu suất trên dữ liệu đào tạo cũng có thể được sử dụng cho mục đích chẩn đoán khi viết một trình phân loại. –

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