Mã Python rời rạc dựa trên entropy

Tiếp tục các tính năng trong dữ liệu có thể được rời rạc hóa bằng phương pháp rời rạc thống nhất. Discretization chỉ xem xét các tính năng tiếp tục và thay thế chúng trong tập dữ liệu mới bằng các tính năng phân loại tương ứng

import Orange
iris = Orange.data.Table("iris.tab")
disc_iris = Orange.data.discretization.DiscretizeTable(iris,
    method=Orange.feature.discretization.EqualFreq(n=3))

print "Original data set:"
for e in iris[:3]:
    print e

print "Discretized data set:"
for e in disc_iris[:3]:
    print e

Discretization giới thiệu các tính năng phân loại mới với các giá trị rời rạc

Original data set:
[5.1, 3.5, 1.4, 0.2, 'Iris-setosa']
[4.9, 3.0, 1.4, 0.2, 'Iris-setosa']
[4.7, 3.2, 1.3, 0.2, 'Iris-setosa']

Discretized data set:
['<=5.45', '>3.15', '<=2.45', '<=0.80', 'Iris-setosa']
['<=5.45', '(2.85, 3.15]', '<=2.45', '<=0.80', 'Iris-setosa']
['<=5.45', '>3.15', '<=2.45', '<=0.80', 'Iris-setosa']

Phân biệt dữ liệu sử dụng các lớp phân biệt đối tượng từ Phân biệt đối tượng (rời rạc hóa) và áp dụng chúng trên toàn bộ tập dữ liệu. Các phương pháp rời rạc được hỗ trợ là

  • sự rời rạc về chiều rộng bằng nhau, trong đó miền của đối tượng địa lý liên tục được chia thành các khoảng có cùng chiều rộng, các khoảng có kích thước bằng nhau (sử dụng màu cam. tính năng. rời rạc hóa. EqualWidth ),
  • sự rời rạc tần số bằng nhau, trong đó mỗi khoảng chứa số lượng phiên bản dữ liệu bằng nhau (sử dụng Orange. tính năng. rời rạc hóa. EqualFreq ),
  • dựa trên entropy, như được đề xuất ban đầu bởi [FayyadIrani1993] suy ra các khoảng để giảm thiểu entropy trong khoảng của phân phối lớp (sử dụng Orange. tính năng. rời rạc hóa. Entropy ),
  • hai phương thức, sử dụng ba khoảng thời gian để tối ưu hóa sự khác biệt của phân phối lớp ở giữa với phân phối bên ngoài nó (sử dụng Cam. tính năng. rời rạc hóa. BiModal ),
  • đã sửa, với các điểm giới hạn do người dùng xác định

Phương pháp rời rạc hóa mặc định (tần số bằng nhau với ba khoảng thời gian) có thể được thay thế bằng các phương pháp rời rạc hóa khác như minh họa bên dưới

Trong hai tuần qua, tôi đã hoàn thành một dự án khai thác dữ liệu bằng Python. Trong dự án, tôi đã triển khai Naive Bayes cùng với một số thuật toán tiền xử lý. Vì đây là lần đầu tiên tôi đi sâu vào lĩnh vực khai thác dữ liệu, nên tôi nhận thấy nhiều phương trình toán học khó hiểu bằng trực giác, vì vậy đây là hướng dẫn đơn giản cho một trong những phần yêu thích của tôi trong dự án, sự rời rạc hóa dựa trên entropy

Vấn đề ở đây là gì?

Dữ liệu lộn xộn. Nhưng chúng tôi muốn biết những điều về dữ liệu của chúng tôi. thật khó khăn

Chúng tôi gặp vấn đề này khi cố gắng làm sạch nó và đưa nó vào các định dạng có thể sử dụng được cho các thuật toán khai thác dữ liệu ưa thích của chúng tôi. Một trong những vấn đề là nhiều thuật toán, chẳng hạn như Cây quyết định, chỉ chấp nhận các biến phân loại, vì vậy nếu bạn có một số thuộc tính tuổi hoặc một biến liên tục khác, thì thuật toán không thể hiểu được ý nghĩa của nó

Nói cách khác, chúng ta cần lấy dữ liệu liên tục này và "bin" nó thành các danh mục. Ngọt. Vì vậy, chúng tôi chỉ có thể chọn ngẫu nhiên nơi để cắt dữ liệu của mình, phải không? . Vâng, bạn có thể, nhưng đó là một ý tưởng tồi. Đây là lý do tại sao

Giả sử bạn chia sai điểm và có dữ liệu không đồng đều. Ví dụ: bạn đang cố gắng xác định điều gì đó như nguy cơ mắc bệnh alzheimer và bạn chia dữ liệu tuổi thành 16 tuổi, 24 tuổi và 30 tuổi. Thùng của bạn trông giống như thế này

  • <=16
  • 16. 24
  • 24. 30
  • 30+

Giờ đây, bạn có một thùng khổng lồ gồm những người trên 30 tuổi, nơi có hầu hết bệnh nhân Alzheimer và nhiều thùng được phân chia ở các giá trị thấp hơn, nơi bạn không thực sự nhận được nhiều thông tin

Vì vấn đề này, chúng tôi muốn thực hiện các phân tách có ý nghĩa trong các biến liên tục của mình

Đó là nơi mà sự rời rạc dựa trên entropy xuất hiện. Nó giúp chúng tôi phân chia dữ liệu của mình tại các điểm mà chúng tôi sẽ thu được nhiều thông tin chi tiết nhất sau khi chúng tôi cung cấp tất cả dữ liệu đó cho các thuật toán khai thác dữ liệu của mình

Thứ entropy này là gì?

Sự hỗn loạn. Nó còn được gọi là Thông tin mong đợi. Đó là những gì chúng tôi gọi là giá trị này, về cơ bản mô tả mức độ nhất quán của sự phân chia tiềm năng sẽ phù hợp với một bộ phân loại

Ví dụ: giả sử chúng tôi đang xem tất cả những người dưới 25 tuổi. Ngoài nhóm đó, chúng ta có thể mong đợi bao nhiêu người có thu nhập trên 50 nghìn hoặc dưới 50 nghìn? . Ví dụ: trong số 10 người dưới 25 tuổi, giả sử chúng ta có 6 người kiếm được trên 50.000 mỗi năm và 4 người kiếm được dưới 50.000 mỗi năm. Nó trông giống như thế này

Income<=50KIncome > 50KAge <2546

Điều này sẽ có giá trị entropy cao (gần bằng 1)

Nếu chúng ta đang cố gắng xác định thu nhập dựa trên độ tuổi, chúng ta tự hỏi mình

Q. Biết ai đó dưới 25 tuổi có cung cấp cho chúng tôi thông tin tốt về thu nhập của họ không?

A. Chắc là không. Dữ liệu đào tạo của chúng tôi chỉ ra rằng 6/10 người dưới 25 tuổi kiếm được hơn 50.000 và phần còn lại kiếm được dưới đây. Điều này cho chúng ta biết không có gì

Bây giờ hãy thay đổi trò chơi một chút. Giả sử rằng, trong số những người dưới 25 tuổi, 9 người kiếm được dưới 50.000 và người cuối cùng kiếm được trên 50.000. Bây giờ, biểu đồ đơn giản của chúng tôi trông như thế này

Income<=50KIncome > 50KAge <2591

Điều này sẽ mang lại cho chúng tôi giá trị entropy thấp hơn vì nó cung cấp cho chúng tôi nhiều thông tin hơn về những gì chúng tôi đang cố gắng khám phá (thu nhập)

Bây giờ chúng ta đã hiểu ý tưởng cơ bản về entropy tốt thấp hơn, entropy xấu cao hơn, chúng ta hãy tìm hiểu một chút về toán học. Đây là phương trình cho entropy

Mã Python rời rạc dựa trên entropy

So what does this mean? I'll break it down step by step. So we have a summation that goes from 1 -> m, where m is the number of classifier values we have. In this case, m is 2 because we have 2 options: income <=50K and income >50K.

Tiếp theo, chúng ta có giá trị p. Đây là xác suất nhận được một bộ phân loại cụ thể cho thùng bạn đang xem. Vì vậy, nếu bạn có 10 hàng dữ liệu và 5 hàng trong số đó có thu nhập <=50, xác suất của điều đó sẽ là 5/10 hoặc 1/2. Bạn chỉ có thể đếm

Vì vậy, đó là tất cả những gì chúng ta cần cho phần này. Hãy xem xét lại các ví dụ trước của chúng ta và tính entropy cho mỗi

Trong ví dụ đầu tiên của chúng tôi, chúng tôi có 4 mẫu dưới 50 và 6 mẫu trên. Hãy tính entropy

Income<=50KIncome > 50KAge <2546

Mã Python rời rạc dựa trên entropy

Bây giờ, hãy xem ví dụ thứ hai

Income<=50KIncome > 50KAge <2591

Mã Python rời rạc dựa trên entropy

Ồ. chúng tôi đã đi từ. 971 đến. 469. cải thiện LỚN. Thậm chí tốt hơn, nếu chúng ta có 10 trong một loại và 0 trong loại kia, chúng ta có entropy hoàn hảo--0

Bây giờ, hãy nói về cách entropy phù hợp với sơ đồ rộng hơn của sự rời rạc hóa dựa trên entropy

Tăng Entropy. Nền tảng của sự rời rạc hóa

Ở cấp độ rộng, sự rời rạc dựa trên entropy thực hiện thuật toán sau

  1. Tính toán Entropy cho dữ liệu của bạn
  2. Đối với mỗi phân chia tiềm năng trong dữ liệu của bạn
    • Tính toán Entropy trong mỗi thùng tiềm năng
    • Tìm entropy ròng cho sự phân chia của bạn
    • Tính mức tăng entropy
  3. Chọn phần tách có mức tăng entropy cao nhất
  4. Đệ quy (hoặc lặp đi lặp lại trong một số trường hợp) thực hiện phân vùng trên mỗi lần phân tách cho đến khi đáp ứng tiêu chí kết thúc
    • Chấm dứt khi bạn đạt đến số lượng thùng được chỉ định
    • Chấm dứt khi mức tăng entropy giảm xuống dưới một ngưỡng nhất định

Nếu điều đó nghe có vẻ quá sức, đừng lo lắng. chúng ta sẽ đi qua tất cả bây giờ

Một điều bạn có thể nhận thấy là có một thuật ngữ mới ở đây được gọi là "mức tăng entropy. " Trong trường hợp bạn chưa đoán, điều đó về cơ bản đề cập đến lượng entropy bạn đạt được bằng cách chia một tập dữ liệu thành hai ngăn

Như chúng tôi đã đề cập, entropy thấp hơn sẽ tốt hơn, vì vậy mức tăng Entropy được tính như sau

Mã Python rời rạc dựa trên entropy

Nếu điều này làm bạn bối rối, chỉ cần nghĩ về nó theo cách này. Chúng tôi muốn thực hiện phân tách để cải thiện thông tin chúng tôi nhận được từ dữ liệu của mình. Theo đó, chúng tôi muốn thực hiện phân tách nhằm tối đa hóa việc cải thiện thông tin chúng tôi nhận được từ dữ liệu của mình

Entropy đạt được các biện pháp mà

Vì vậy, bây giờ bạn biết rằng chúng ta cần tìm và tối đa hóa mức tăng entropy để thực hiện phân tách, nhưng làm cách nào để tìm entropy ròng giữa hai ngăn dữ liệu khác nhau và so sánh nó với chỉ một giá trị? (giá trị là E mới ở trên)

Entropy trên nhiều thùng

Hãy quay trở lại ví dụ của chúng ta về độ tuổi dự đoán thu nhập. Chúng tôi có các giá trị tuổi liên tục và chúng tôi muốn chia chúng. Giả sử một lần nữa rằng chúng ta đã tạo hai thùng, chia ở 25. Hãy tạo một biểu đồ cho điều này như sau

Income<=50KIncome > 50KAge <2591Age >=2546

Tôi đã sử dụng các số sau vì chúng tôi đã tính toán entropy cho cả hai tập dữ liệu

In this case, our information(using the calculations above) for age <25 will be .469 and our information for age >=25 will be .971. To combine these two values into one net entropy, we simply take the proportion of each in our overall age bin.

Overall, we have 20 samples. Conveniently, 10 fall in the age <25 category and the other 10 fall in the age >25 category. This means that, as a proportion of total entropy, age <25 counts for 10/20 and age >25 accounts for 10/20. This would apply if your bins were unequal sizes as well. In general, we can state the net entropy with the following equation:

Mã Python rời rạc dựa trên entropy

Nói cách khác, thông tin của chúng tôi trên hai thùng sẽ bằng tỷ lệ kích thước của thùng nhân với entropy của thùng đó

Ví dụ của chúng tôi, nó trông như thế này

Mã Python rời rạc dựa trên entropy

Điều đó sẽ cung cấp cho chúng tôi một giá trị duy nhất mà chúng tôi có thể so sánh với giá trị ban đầu của mình. Bây giờ chúng ta đã thiết lập entropy và mức tăng entropy, hãy kết hợp nó với một ví dụ

Ví dụ

Để kết hợp điều này lại với nhau, chúng ta hãy xem một ví dụ về điều này trong thực tế. Để chứng minh rằng điều này không cần chỉ dự đoán thu nhập dựa trên độ tuổi, hãy làm một ví dụ mới. Lần này, chúng ta sẽ nghiên cứu số giờ dưới dạng biến liên tục và A trong bài kiểm tra với tư cách là bộ phân loại của chúng ta. Dữ liệu trông như thế này (được sắp xếp trước để thuận tiện cho bạn)

Giờ họcA trên Test4N5Y8N12Y15Y

Trong trường hợp này, chúng tôi có dữ liệu liên quan đến số giờ học của nhiều sinh viên nhằm xác định ảnh hưởng của nó đối với kết quả bài kiểm tra của họ. Chúng tôi muốn rời rạc hóa dữ liệu này, vì vậy hãy bắt đầu bằng cách tính toán entropy của chính tập dữ liệu đó

A trên TestThấp hơn AOverall32

Mã Python rời rạc dựa trên entropy

Đối với tất cả các mẫu của chúng tôi, entropy để đánh bại là. 971. Bây giờ, hãy lặp lại và xem phân tách nào mang lại cho chúng ta mức tăng entropy tối đa. Để tìm sự phân chia, chúng tôi tính trung bình hai giá trị lân cận trong danh sách

chia 1. 4. 5

Bắt đầu, chúng tôi chia tay lúc 4. 5 ((5+4)/2). Bây giờ chúng tôi nhận được hai thùng, như sau

A on TestLower than A<=4.501>4.531

Bây giờ, chúng tôi tính toán entropy cho mỗi thùng và tìm thông tin thu được của sự phân chia này.

Mã Python rời rạc dựa trên entropy

Mã Python rời rạc dựa trên entropy

Entropy ròng bây giờ là.
Mã Python rời rạc dựa trên entropy

Và lợi ích của chúng ta là.
Mã Python rời rạc dựa trên entropy

Trông được. Mức tăng entropy tối đa của chúng tôi bây giờ là. 322. Điều đó tốt, nhưng chúng ta vẫn cần phải hoàn thành phần còn lại

chia 2. 6. 5

Trung bình hai giá trị tiếp theo của chúng tôi và chúng tôi nhận được 6. 5. Bây giờ chúng tôi lặp lại quy trình cho sự phân chia này

A on TestLower than A<=6.511>6.521

Một lần nữa, tính entropy cho mỗi thùng

Mã Python rời rạc dựa trên entropy

Mã Python rời rạc dựa trên entropy

Ồ. Cái này trông đã tệ rồi, nhưng hãy hoàn thành nó

Mã Python rời rạc dựa trên entropy

Mã Python rời rạc dựa trên entropy

Đây là mức tăng ít hơn so với trước đây, vì vậy điểm phân chia tốt nhất của chúng tôi vẫn là 4. 5. Hãy kiểm tra cái tiếp theo ngay bây giờ

chia 3. 10

Trung bình hai giá trị tiếp theo của chúng tôi và chúng tôi nhận được 10. Sự phân chia của chúng tôi bây giờ trông như thế này

A on TestLower than A<=1012>1020As before, we calculate entropy for each bin and determine information:

Mã Python rời rạc dựa trên entropy

Mã Python rời rạc dựa trên entropy

Mã Python rời rạc dựa trên entropy

Cuối cùng, chúng tôi tính toán mức tăng một lần nữa

Mã Python rời rạc dựa trên entropy

Đây là người chiến thắng rõ ràng vào thời điểm này

chia 4. 13. 5

Và đối với khả năng phân chia tiềm năng cuối cùng của chúng tôi, chúng tôi chia ở mức 13. 5. Bây giờ phần tách của chúng ta trông như thế này. Để cho ngắn gọn, tôi sẽ không tính toán cái này, nhưng chúng ta có thể suy luận dựa trên dữ liệu bên dưới rằng nó sẽ có mức tăng entropy kém vì thùng đầu tiên có phân phối 50/50

A on TestLower than A<=13.522>13.510
Chọn phần chia

Sau khi tính toán mọi thứ, chúng tôi thấy rằng cách chia tốt nhất của chúng tôi là cách chia 3, điều này giúp chúng tôi thu được thông tin tốt nhất về. 421. Chúng tôi sẽ phân vùng dữ liệu ở đó

Theo thuật toán, giờ đây chúng ta có thể thêm các thuộc tính của mình vào các thùng mà chúng ta vừa tạo. Quá trình này sẽ tiếp tục cho đến khi chúng tôi đáp ứng tiêu chí chấm dứt

Khi nào thì chấm dứt

Có hai tùy chọn phổ biến để dừng thuật toán

  1. Kết thúc khi đã đạt đến số lượng thùng được chỉ định. Điều này có ý nghĩa khi bạn coi trọng mức độ hiểu dữ liệu của mình. Một bộ dữ liệu có 3 ngăn sẽ dễ suy nghĩ hơn nhiều so với một bộ có 12

  2. Chấm dứt khi đạt được thông tin giảm xuống dưới một ngưỡng nhất định. Đây là một phương pháp phổ biến khác. Nếu mức tăng thông tin giảm xuống dưới một giá trị nhất định, thuật toán có thể kết thúc sớm. Có một số cách để tính toán ngưỡng tối thiểu phải là bao nhiêu và nó cũng có thể được xác định theo kinh nghiệm thông qua thử nghiệm

Thông thường, cả hai tiêu chí này sẽ được sử dụng kết hợp để mang lại kết quả tối ưu

Tóm lược

Entropy là một khái niệm cơ bản trong Khai thác dữ liệu được sử dụng vượt xa sự rời rạc hóa dữ liệu đơn giản. Những cách tiếp cận này cũng được sử dụng cho cây quyết định và bộ phân loại dựa trên quy tắc, vì vậy việc hiểu nó chắc chắn là một công cụ hữu ích cần có trong bộ công cụ của bạn

Sự rời rạc dựa trên entropy là gì?

Sự rời rạc hóa dựa trên entropy là phương pháp phân tách từ trên xuống được giám sát . Nó khám phá dữ liệu phân phối lớp trong tính toán và bảo toàn các điểm phân tách (giá trị dữ liệu để phân tách một phạm vi thuộc tính).

Entropy dựa trên cái gì?

Các phép đo ngưỡng entropy dựa trên khái niệm entropy . Thống kê entropy cao nếu một biến được phân phối tốt trên phạm vi có sẵn và thấp nếu nó được sắp xếp hợp lý và phân phối hẹp. Cụ thể, entropy là thước đo của sự mất trật tự và bằng 0 đối với một hệ thống có trật tự hoàn hảo.