Tôi sẽ chạy qua toàn bộ quá trình Naive Bayes từ đầu, vì nó không hoàn toàn rõ ràng với tôi nơi bạn đang bị treo lên.
Chúng tôi muốn tìm xác suất để một ví dụ mới thuộc về mỗi lớp: ). Sau đó, chúng tôi tính toán xác suất đó cho mỗi lớp và chọn lớp có khả năng nhất. Vấn đề là chúng ta thường không có những xác suất đó. Tuy nhiên, Định lý Bayes cho phép chúng ta viết lại phương trình đó ở dạng dễ điều khiển hơn.P(class|feature1,feature2,...,featuren
Bayes 'thereom chỉ đơn giản là hoặc về mặt vấn đề của chúng tôi:
P(A|B)=P(B|A)⋅P(A)P(B)
P(class|features)=P(features|class)⋅P(class)P(features)
Chúng ta có thể đơn giản hóa điều này bằng cách loại bỏ . Chúng tôi có thể làm điều này bởi vì chúng tôi sẽ xếp hạng cho mỗi giá trị của ; sẽ giống nhau mọi lúc - nó không phụ thuộc vào . Điều này cho chúng ta
P(features)P(class|features)classP(features)classP(class|features)∝P(features|class)⋅P(class)
Các xác suất trước đó, , có thể được tính như bạn mô tả trong câu hỏi của bạn.P(class)
Rời khỏi . Chúng tôi muốn loại bỏ xác suất chung rất lớn và có lẽ rất thưa thớt . Nếu mỗi tính năng là độc lập, thì Ngay cả khi chúng không thực sự độc lập, chúng ta có thể cho rằng chúng là (đó là " ngây thơ "một phần của Bayes ngây thơ). Cá nhân tôi nghĩ rằng việc nghĩ thông qua các biến rời rạc (nghĩa là phân loại) sẽ dễ dàng hơn, vì vậy hãy sử dụng một phiên bản hơi khác trong ví dụ của bạn. Ở đây, tôi đã chia mỗi chiều tính năng thành hai biến phân loại.P(features|class)P(feature1,feature2,...,featuren|class)P(feature1,feature2,...,featuren|class)=∏iP(featurei|class)
.
Ví dụ: Đào tạo lớp
Để huấn luyện lớp, chúng tôi đếm các tập hợp điểm khác nhau và sử dụng chúng để tính toán xác suất trước và điều kiện.
Các linh mục là tầm thường: Có sáu mươi điểm, bốn mươi là màu xanh lá cây trong khi hai mươi là màu đỏ. Do đóP(class=green)=4060=2/3 and P(class=red)=2060=1/3
Tiếp theo, chúng ta phải tính toán xác suất có điều kiện của từng giá trị tính năng được cung cấp cho một lớp. Ở đây, có hai tính năng: và , mỗi tính năng lấy một trong hai giá trị (A hoặc B cho một, X hoặc Y cho cái kia). Do đó, chúng ta cần biết những điều sau đây:feature1feature2
- P(feature1=A|class=red)
- P(feature1=B|class=red)
- P(feature1=A|class=green)
- P(feature1=B|class=green)
- P(feature2=X|class=red)
- P(feature2=Y|class=red)
- P(feature2=X|class=green)
- P(feature2=Y|class=green)
- (trong trường hợp không rõ ràng, đây là tất cả các cặp giá trị tính năng và lớp)
Đây là những tính toán dễ dàng bằng cách đếm và chia quá. Ví dụ: đối với , chúng tôi chỉ nhìn vào các điểm màu đỏ và đếm xem có bao nhiêu trong số chúng nằm trong vùng 'A' cho tính . Có hai mươi điểm đỏ, tất cả đều nằm trong vùng 'A', vì vậy . Không có điểm đỏ nào trong khu vực B, vì vậy . Tiếp theo, chúng tôi làm tương tự, nhưng chỉ xem xét các điểm màu xanh lá cây. Điều này mang lại cho chúng ta và . Chúng tôi lặp lại quy trình đó cho tính , để làm tròn bảng xác suất. Giả sử tôi đã đếm đúng, chúng tôi nhận đượcP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2
- P(feature1=A|class=red)=1
- P(feature1=B|class=red)=0
- P(feature1=A|class=green)=1/8
- P(feature1=B|class=green)=7/8
- P(feature2=X|class=red)=3/10
- P(feature2=Y|class=red)=7/10
- P(feature2=X|class=green)=8/10
- P(feature2=Y|class=green)=2/10
Mười xác suất đó (hai linh mục cộng với tám điều kiện) là mô hình của chúng tôi
Phân loại một ví dụ mới
Hãy phân loại điểm trắng từ ví dụ của bạn. Nó nằm trong khu vực "A" cho tính và khu vực "Y" cho tính . Chúng tôi muốn tìm xác suất trong mỗi lớp. Hãy bắt đầu với màu đỏ. Sử dụng công thức trên, chúng ta biết rằng:
Subbing trong các xác suất từ bảng, chúng tôi nhận đượcfeature1feature2P(class=red|example)∝P(class=red)⋅P(feature1=A|class=red)⋅P(feature2=Y|class=red)
P(class=red|example)∝13⋅1⋅710=730
Sau đó, chúng tôi cũng làm tương tự với màu xanh lá cây:
P(class=green|example)∝P(class=green)⋅P(feature1=A|class=green)⋅P(feature2=Y|class=green)
Subbing trong các giá trị đó được chúng tôi 0 ( ). Cuối cùng, chúng tôi xem xét lớp nào cho chúng tôi xác suất cao nhất. Trong trường hợp này, đó rõ ràng là lớp màu đỏ, vì vậy đó là nơi chúng ta gán điểm.2/3⋅0⋅2/10
Ghi chú
Trong ví dụ ban đầu của bạn, các tính năng là liên tục. Trong trường hợp đó, bạn cần tìm một số cách gán P (Feature = value | class) cho mỗi lớp. Sau đó, bạn có thể xem xét việc phù hợp với phân phối xác suất đã biết (ví dụ: Gaussian). Trong quá trình đào tạo, bạn sẽ tìm thấy giá trị trung bình và phương sai cho mỗi lớp dọc theo từng chiều tính năng. Để phân loại một điểm, bạn sẽ tìm thấy bằng cách cắm vào giá trị trung bình và phương sai thích hợp cho mỗi lớp. Các bản phân phối khác có thể phù hợp hơn, tùy thuộc vào chi tiết của dữ liệu của bạn, nhưng Gaussian sẽ là điểm khởi đầu tốt.P(feature=value|class)
Tôi không quá quen thuộc với tập dữ liệu DARPA, nhưng về cơ bản bạn sẽ làm điều tương tự. Bạn có thể sẽ kết thúc việc tính toán một cái gì đó như P (tấn công = TRUE | dịch vụ = ngón tay), P (tấn công = sai | dịch vụ = ngón tay), P (tấn công = TRUE | dịch vụ = ftp), v.v. và sau đó kết hợp chúng trong giống như ví dụ Là một lưu ý phụ, một phần của mẹo ở đây là đưa ra các tính năng tốt. Ví dụ, IP nguồn có thể sẽ trở nên vô vọng thưa thớt - có lẽ bạn sẽ chỉ có một hoặc hai ví dụ cho một IP nhất định. Bạn có thể làm tốt hơn nhiều nếu bạn định vị địa lý IP và sử dụng "Source_in_same_building_as_dest (true / false)" hoặc một cái gì đó như một tính năng thay thế.
Tôi hy vọng điều đó sẽ giúp nhiều hơn. Nếu có bất cứ điều gì cần làm rõ, tôi rất vui lòng thử lại!