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?
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.