Tôi giả sử entropy đã được đề cập trong bối cảnh xây dựng cây quyết định .
Để minh họa, hãy tưởng tượng nhiệm vụ học cách phân loại tên đầu tiên thành các nhóm nam / nữ. Điều đó được đưa ra một danh sách các tên được gắn nhãn m
hoặc f
, chúng tôi muốn tìm hiểu một mô hình phù hợp với dữ liệu và có thể được sử dụng để dự đoán giới tính của tên mới chưa thấy.
name gender
----------------- Now we want to predict
Ashley f the gender of "Amro" (my name)
Brian m
Caroline f
David m
Bước đầu tiên là quyết định những gì các tính năng của các dữ liệu có liên quan đến lớp mục tiêu chúng ta muốn dự đoán. Một số tính năng ví dụ bao gồm: chữ cái đầu tiên / cuối cùng, độ dài, số nguyên âm, kết thúc bằng nguyên âm, v.v. Vì vậy, sau khi trích xuất tính năng, dữ liệu của chúng tôi trông như sau:
# name ends-vowel num-vowels length gender
# ------------------------------------------------
Ashley 1 3 6 f
Brian 0 2 5 m
Caroline 1 4 8 f
David 0 2 5 m
Mục tiêu là xây dựng một cây quyết định . Một ví dụ về cây sẽ là:
length<7
| num-vowels<3: male
| num-vowels>=3
| | ends-vowel=1: female
| | ends-vowel=0: male
length>=7
| length=5: male
về cơ bản mỗi nút đại diện cho một thử nghiệm được thực hiện trên một thuộc tính duy nhất và chúng tôi đi sang trái hoặc phải tùy thuộc vào kết quả của thử nghiệm. Chúng ta tiếp tục đi ngang qua cây cho đến khi chúng ta đạt được một nút lá chứa dự đoán lớp ( m
hoặc f
)
Vì vậy, nếu chúng ta chạy tên Amro xuống cây này, chúng ta bắt đầu bằng cách kiểm tra " độ dài <7? " Và câu trả lời là có , vì vậy chúng ta đi xuống nhánh đó. Theo nhánh, bài kiểm tra tiếp theo " là số nguyên âm <3? " Một lần nữa đánh giá là đúng . Điều này dẫn đến một nút lá được dán nhãn m
, và do đó dự đoán là nam (mà tôi tình cờ là, vì vậy cây dự đoán kết quả chính xác ).
Cây quyết định được xây dựng theo kiểu từ trên xuống , nhưng câu hỏi là làm thế nào để bạn chọn thuộc tính nào để phân chia tại mỗi nút? Câu trả lời là tìm ra tính năng phân tách tốt nhất lớp mục tiêu thành các nút con thuần nhất có thể (nghĩa là: các nút không chứa hỗn hợp cả nam và nữ, thay vì các nút thuần túy chỉ có một lớp).
Thước đo độ tinh khiết này được gọi là thông tin . Nó đại diện cho lượng thông tin dự kiến sẽ cần để xác định liệu một trường hợp mới (tên đầu tiên) nên được phân loại nam hay nữ, đưa ra ví dụ đạt đến nút. Chúng tôi tính toán nó dựa trên số lượng các lớp nam và nữ tại nút.
Mặt khác, Entropy là thước đo tạp chất (ngược lại). Nó được định nghĩa cho một lớp nhị phân có giá trịa
/b
là:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
Hàm entropy nhị phân này được mô tả trong hình bên dưới (biến ngẫu nhiên có thể lấy một trong hai giá trị). Nó đạt đến mức tối đa khi xác suất là p=1/2
, có nghĩa là p(X=a)=0.5
hoặc tương tự p(X=b)=0.5
có 50% / 50% cơ hội trở thành a
hoặc b
(không chắc chắn là tối đa). Hàm entropy ở mức tối thiểu bằng 0 khi xác suất là p=1
hoặc p=0
hoàn toàn chắc chắn ( p(X=a)=1
hoặc p(X=a)=0
tương ứng, hàm ý sau p(X=b)=1
).
Tất nhiên, định nghĩa của entropy có thể được khái quát cho một biến ngẫu nhiên X rời rạc với kết quả N (không chỉ hai):
( log
trong công thức thường được lấy làm logarit cho cơ sở 2 )
Quay lại nhiệm vụ phân loại tên của chúng tôi, hãy xem xét một ví dụ. Hãy tưởng tượng tại một số điểm trong quá trình xây dựng cây, chúng tôi đã xem xét phân chia sau:
ends-vowel
[9m,5f] <--- the [..,..] notation represents the class
/ \ distribution of instances that reached a node
=1 =0
------- -------
[3m,4f] [6m,1f]
Như bạn có thể thấy, trước khi chia tay, chúng tôi có 9 nam và 5 nữ, tức là P(m)=9/14
và P(f)=5/14
. Theo định nghĩa của entropy:
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403
Tiếp theo, chúng tôi so sánh nó với entropy được tính toán sau khi xem xét sự phân chia bằng cách nhìn vào hai nhánh con. Ở nhánh bên trái của ends-vowel=1
, chúng ta có:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
và nhánh bên phải của ends-vowel=0
, chúng ta có:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
Chúng tôi kết hợp các entropy trái / phải bằng cách sử dụng số lượng phiên bản xuống mỗi nhánh làm hệ số trọng số (7 trường hợp đi bên trái và 7 trường hợp đi bên phải) và nhận được entropy cuối cùng sau khi chia:
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885
Bây giờ bằng cách so sánh entropy trước và sau khi phân tách, chúng ta có được thước đo mức tăng thông tin hoặc lượng thông tin chúng ta thu được bằng cách thực hiện phân tách bằng tính năng cụ thể đó:
Information_Gain = Entropy_before - Entropy_after = 0.1518
Bạn có thể diễn giải phép tính ở trên như sau: bằng cách phân tách với end-vowels
tính năng, chúng tôi có thể giảm độ không chắc chắn trong kết quả dự đoán của cây con bằng một lượng nhỏ 0,1518 (được đo bằng bit dưới dạng đơn vị thông tin ).
Tại mỗi nút của cây, phép tính này được thực hiện cho mọi tính năng và tính năng có mức tăng thông tin lớn nhất được chọn để phân chia theo cách tham lam (do đó ưu tiên các tính năng tạo ra sự phân tách thuần túy với độ không chắc chắn / entropy thấp). Quá trình này được áp dụng đệ quy từ nút gốc trở xuống và dừng lại khi một nút lá chứa các cá thể có cùng một lớp (không cần phải phân tách thêm).
Lưu ý rằng tôi đã bỏ qua một số chi tiết nằm ngoài phạm vi của bài đăng này, bao gồm cách xử lý các tính năng số , giá trị bị thiếu , quá mức và cắt tỉa cây, v.v.