2013-05-19 34 views
5

Tôi đang đọc Machine Learning In Action và đang thực hiện chương quyết định. Tôi hiểu rằng cây quyết định được xây dựng sao cho việc tách bộ dữ liệu mang lại cho bạn một cách để cấu trúc các nhánh và lá của bạn. Điều này giúp bạn có nhiều thông tin hơn ở đầu cây và giới hạn số lượng quyết định bạn cần phải trải qua.Hiểu entropy shannon của tập dữ liệu

Cuốn sách cho thấy một chức năng xác định entropy Shannon của một tập dữ liệu:

def calcShannonEnt(dataSet): 
    numEntries = len(dataSet) 
    labelCounts = {} 
    for featVec in dataSet: #the the number of unique elements and their occurance 
     currentLabel = featVec[-1] 
     if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 
     labelCounts[currentLabel] += 1 
    shannonEnt = 0.0 
    for key in labelCounts: 
     prob = float(labelCounts[key])/numEntries 
     shannonEnt -= prob * log(prob,2) #log base 2 
    return shannonEnt 

đâu tập dữ liệu đầu vào là một mảng của mảng mà mỗi mảng đại diện cho một tính năng phân loại tiềm năng:

dataSet = [[1, 1, 'yes'], 
    [1, 1, 'yes'], 
    [1, 0, 'no'], 
    [0, 1, 'no'], 
    [0, 1, 'no']] 

Những gì tôi không nhận được là tại sao chức năng entropy shannon trong cuốn sách này chỉ bao giờ nhìn vào yếu tố cuối cùng trong mảng tính năng? Dường như nó chỉ tính toán entropy cho các mục "có" hoặc "không", và không phải là entropy của bất kỳ tính năng nào khác?

enter image description here

Nó không có ý nghĩa với tôi bởi vì entropy cho dữ liệu này thiết lập

dataSet = [[1, 1, 'yes'], 
    [1, 'asdfasdf', 'yes'], 
    [1900, 0, 'no'], 
    [0, 1, 'no'], 
    ['ddd', 1, 'no']] 

là giống như entropy ở trên, mặc dù nó có rất nhiều dữ liệu đa dạng hơn.

Không nên tính các yếu tố tính năng khác để cung cấp tổng entropy của tập dữ liệu hoặc tôi có hiểu lầm về tính toán entropy được yêu cầu thực hiện không?

Nếu có ai tò mò, toàn bộ nguồn (mã nguồn này xuất phát từ đâu) cho sách là here trong thư mục Chapter03.

Trả lời

8

Sự mơ hồ tiềm năng ở đây là tập dữ liệu bạn đang xem chứa cả các tính năng và biến kết quả, biến kết quả nằm trong cột cuối cùng. Vấn đề bạn đang cố gắng giải quyết là "Tính năng 1 và tính năng 2 có giúp tôi dự đoán Kết quả" không?

Một cách khác để nêu rõ điều này là, nếu tôi chia dữ liệu của mình theo tính năng 1, tôi có nhận được thông tin tốt hơn về Kết quả không?

Trong trường hợp này, không chia tách, biến Kết quả là [có, có, không, không, không]. Nếu tôi chia nhỏ trên Tính năng 1, tôi nhận được 2 nhóm: Tính năng 1 = 0 -> Kết quả là [không, không] Tính năng 1 = 1 -> Ouctome là [có, có, không]

Ý tưởng ở đây là để xem bạn có tốt hơn với sự chia rẽ đó không. Ban đầu, bạn có một thông tin nhất định, được mô tả bởi Entropy Shannon của [có, vâng, không, không, không]. Sau khi chia tách, bạn có hai nhóm, với "thông tin tốt hơn" cho nhóm nơi Tính năng 1 = 0: bạn biết trong trường hợp đó Kết quả là không, và được đo bằng Entropy của [no, no].

Nói cách khác, cách tiếp cận là tìm hiểu xem bạn có sẵn tính năng nào không, nếu có, hãy tăng thông tin của bạn về những gì bạn quan tâm, đó là biến Kết quả. Việc xây dựng cây sẽ tham lam chọn tính năng với mức tăng thông tin cao nhất ở mỗi bước, và sau đó xem liệu nó có đáng để chia nhỏ hơn nữa các nhóm kết quả không.

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