Saya menganggap entropi disebutkan dalam konteks membangun pohon keputusan .
Untuk menggambarkan, bayangkan tugas belajar untuk mengklasifikasikan pertama-nama dalam kelompok-kelompok pria / wanita. Itu diberi daftar nama yang masing-masing dilabeli dengan salah satu m
atau f
, kami ingin mempelajari model yang sesuai dengan data dan dapat digunakan untuk memprediksi jenis kelamin dari nama depan baru yang tak terlihat.
name gender
----------------- Now we want to predict
Ashley f the gender of "Amro" (my name)
Brian m
Caroline f
David m
Langkah pertama adalah memutuskan apa fitur dari data yang relevan dengan kelas target yang kita inginkan untuk memprediksi. Beberapa contoh fitur meliputi: huruf pertama / terakhir, panjang, jumlah vokal, apakah diakhiri dengan vokal, dll. Jadi setelah ekstraksi fitur, data kami terlihat seperti:
# 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
Tujuannya adalah untuk membangun pohon keputusan . Contoh pohon adalah:
length<7
| num-vowels<3: male
| num-vowels>=3
| | ends-vowel=1: female
| | ends-vowel=0: male
length>=7
| length=5: male
pada dasarnya setiap node mewakili tes yang dilakukan pada satu atribut, dan kami ke kiri atau kanan tergantung pada hasil tes. Kami terus melintasi pohon hingga mencapai simpul daun yang berisi prediksi kelas ( m
atau f
)
Jadi jika kita menjalankan nama Amro di pohon ini, kita mulai dengan menguji " adalah panjangnya <7? " Dan jawabannya adalah ya , jadi kita turun ke cabang itu. Setelah cabang, tes berikutnya " adalah jumlah vokal <3? " Lagi dievaluasi menjadi true . Ini mengarah ke simpul daun berlabel m
, dan dengan demikian prediksi adalah laki - laki (yang kebetulan saya, jadi pohon memprediksi hasilnya dengan benar ).
Pohon keputusan dibangun dengan cara top-down , tetapi pertanyaannya adalah bagaimana Anda memilih atribut mana yang akan dibagi pada setiap node? Jawabannya adalah menemukan fitur yang terbaik membagi kelas target menjadi simpul anak semurni mungkin (yaitu: simpul yang tidak mengandung campuran laki-laki dan perempuan, simpul yang lebih murni dengan hanya satu kelas).
Ukuran kemurnian ini disebut informasi . Ini mewakili jumlah informasi yang diharapkan yang akan diperlukan untuk menentukan apakah instance baru (nama depan) harus diklasifikasikan pria atau wanita, mengingat contoh yang mencapai node. Kami menghitungnya berdasarkan jumlah kelas pria dan wanita di node.
Entropi di sisi lain adalah ukuran ketidakmurnian (kebalikan). Ini didefinisikan untuk kelas biner dengan nilaia
/b
sebagai:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
Ini fungsi biner entropi digambarkan dalam gambar di bawah (variabel acak dapat mengambil salah satu dari dua nilai). Ini mencapai maksimum ketika probabilitasnya p=1/2
, yang berarti bahwa p(X=a)=0.5
atau p(X=b)=0.5
memiliki kemungkinan 50% / 50% untuk menjadi salah satu a
atau b
(ketidakpastian maksimum). Fungsi entropi adalah minimum nol ketika probabilitas p=1
atau p=0
dengan kepastian lengkap ( p(X=a)=1
atau p(X=a)=0
masing - masing, menyiratkan yang terakhir p(X=b)=1
).
Tentu saja definisi entropi dapat digeneralisasi untuk variabel acak diskrit X dengan hasil N (bukan hanya dua):
( log
dalam rumus biasanya diambil sebagai logaritma ke basis 2 )
Kembali ke tugas klasifikasi nama kami, mari kita lihat sebuah contoh. Bayangkan pada suatu saat selama proses membangun pohon, kami mempertimbangkan pemisahan berikut:
ends-vowel
[9m,5f] <--- the [..,..] notation represents the class
/ \ distribution of instances that reached a node
=1 =0
------- -------
[3m,4f] [6m,1f]
Seperti yang Anda lihat, sebelum perpecahan kami memiliki 9 laki-laki dan 5 perempuan, yaitu P(m)=9/14
dan P(f)=5/14
. Menurut definisi entropi:
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403
Selanjutnya kita membandingkannya dengan entropi yang dihitung setelah mempertimbangkan pemisahan dengan melihat dua cabang anak. Di cabang kiri ends-vowel=1
, kami memiliki:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
dan cabang kanan ends-vowel=0
, kami memiliki:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
Kami menggabungkan entropi kiri / kanan menggunakan jumlah instance di setiap cabang sebagai faktor bobot (7 instance pergi ke kiri, dan 7 instance pergi ke kanan), dan mendapatkan entropi akhir setelah pemisahan:
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885
Sekarang dengan membandingkan entropi sebelum dan sesudah pemisahan, kami memperoleh ukuran perolehan informasi , atau berapa banyak informasi yang kami peroleh dengan melakukan pemisahan menggunakan fitur tertentu:
Information_Gain = Entropy_before - Entropy_after = 0.1518
Anda dapat menginterpretasikan perhitungan di atas sebagai berikut: dengan melakukan pemisahan dengan end-vowels
fitur, kami dapat mengurangi ketidakpastian dalam hasil prediksi sub-pohon dengan jumlah kecil 0,1518 (diukur dalam bit sebagai unit informasi ).
Pada setiap simpul pohon, perhitungan ini dilakukan untuk setiap fitur, dan fitur dengan perolehan informasi terbesar dipilih untuk pemisahan secara serakah (sehingga mendukung fitur yang menghasilkan pemisahan murni dengan ketidakpastian / entropi rendah). Proses ini diterapkan secara rekursif dari simpul akar ke bawah, dan berhenti ketika simpul daun berisi instance yang semuanya memiliki kelas yang sama (tidak perlu membaginya lebih lanjut).
Perhatikan bahwa saya melewatkan beberapa detail yang berada di luar ruang lingkup tulisan ini, termasuk cara menangani fitur numerik , nilai yang hilang , pohon overfitting dan pemangkasan , dll.