Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)

** Erstellen Sie einen Entscheidungsbaum von Grund auf in Python und verstehen Sie ihn ** 1. Übersicht-2. Grundlagen des Python-Programms-3. Daten Analysebibliothek Pandas-4. Datenstruktur --5 Informationsentropie

Zum Erlernen von KI (maschinelles Lernen) und Data Mining verstehen wir, indem wir in Python einen Entscheidungsbaum von Grund auf neu erstellen.

5.1 Informationsentropie (durchschnittliche Informationsmenge)

Beim Erstellen eines Entscheidungsbaums aus Daten verwendet der ID3-Algorithmus einen Index namens Informationsentropie, um zu bestimmen, welches Attribut für die Verzweigung verwendet werden soll, um Daten am effizientesten zu verteilen.

Zunächst definieren wir das Konzept der Informationsmenge. Intuitiv ist die Informationsmenge = die Komplexität der Daten. Im Entscheidungsbaum werden beim Verzweigen des Baums die Daten desselben Klassenwerts gesammelt, dh die Komplexität des Klassenwerts nimmt ab. Wenn Sie überlegen, welches Attribut für die Verzweigung verwendet werden soll, reicht es daher aus, zu beurteilen, wie einfach die geteilten Daten sind.

5.1.1 Informationsmenge definieren

Die Informationsmenge entspricht dem Wert der erfassten Informationen, und es wird angenommen, dass die Informationsmenge über ein Ereignis mit einer geringen Eintrittswahrscheinlichkeit, beispielsweise das Auftreten, größer ist als die Informationsmenge über ein Ereignis mit einer hohen Eintrittswahrscheinlichkeit.

Zum Beispiel ist es informativer, wenn Sie die Antwort auf eine Frage mit fünf Auswahlmöglichkeiten kennen, als wenn Sie die Antwort auf eine Frage mit zwei Auswahlmöglichkeiten kennen.

Um das Ereignis dann an andere weiterzuleiten, nehmen wir an, dass es in eine Binärzahl codiert und an eine Kommunikationsleitung gesendet wird. Die Kommunikationsmenge (Bitlänge) zu diesem Zeitpunkt ist als Informationsmenge definiert.

Wenn die Wahrscheinlichkeit, dass Ereignis E auftritt, P (E) ist, wird die Informationsmenge I (E), die weiß, dass Ereignis E aufgetreten ist, wie folgt definiert.

I(E) = log_2(1/P(E)) = -log_2P(E)

5.1.2 Was ist Informationsentropie (durchschnittliche Informationsmenge)?

Ein Attribut hat mehrere Attributwerte. Zum Beispiel gibt es drei Arten von Wetterattributen: sonnig, bewölkt und regnerisch. Der Durchschnittswert im Attribut der Informationsmenge, die aus jeder Auftrittswahrscheinlichkeit erhalten wird, wird als Entropie (durchschnittliche Informationsmenge) bezeichnet.

Es wird in der folgenden Formel durch H dargestellt.

H = -\sum_{E\in\Omega} P(E)\log_2{P(E)}

Beispielsweise wird die Entropie zweier Attribute, wie in der folgenden Abbildung gezeigt, wie folgt berechnet. Die gemischtere, chaotischere linke Seite hat eine höhere Entropie und die schwarz dominierte rechte Seite hat eine niedrigere Entropie als die linke.

Selbst wenn Sie keine komplizierten Formeln verwenden, scheint im Fall des obigen Beispiels Komplexität erforderlich zu sein, wenn Sie die Anzahl der Schwarzen betrachten. Betrachtet man beispielsweise den Fall eines Drei-Wertes mit gelbem Zusatz, so ist die Informationsentropie, die sowohl für Zwei- als auch für Drei-Werte auf die gleiche Weise berechnet werden kann, einheitlicher und einfacher zu handhaben.

Im folgenden Beispiel wird berechnet, dass selbst bei gleicher Anzahl von Schwarzen die Entropie höher ist, wenn der Rest in Rot und Gelb unterteilt ist, als wenn der Rest nur Rot ist.

Dieser ID3-Algorithmus sucht nach Attributwerten, die die Daten in Gruppen mit geringerer Entropie unterteilen.

5.2 Berechnung der Informationsentropie

Die Informationsentropie kann durch den folgenden Lambda-Ausdruck mit DataFrame als Eingabe und Entropienummer als Ausgabe berechnet werden.

entropy = lambda df:-reduce(lambda x,y:x+y,map(lambda x:(x/len(df))*math.log2(x/len(df)),df.iloc[:,-1].value_counts()))

Dies liegt daran, dass der Lambda-Ausdruck weiter im Lambda-Ausdruck enthalten ist. Daher werde ich ihn ein wenig organisieren und wie folgt anzeigen.

entropy = lambda df:-reduce( #4.Reduzieren erstellt einen Wert aus allen Array-Elementen.
    lambda x,y:x+y,#5.Einzelwerte(9,5)Addiere die Entropie aus.
    map( #2.Frequenzarray(["○":9,"×":5])Anzahl der(9,5)Entropie mit der folgenden Lamda-Formel
        lambda x:(x/len(df))*math.log2(x/len(df)),#3.P(E)log2(P(E))Berechnen
        df.iloc[:,-1].value_counts() #1.Häufigkeit der letzten Spalte des DataFrame (z:["○":9,"×":5])
    )
)

Dieser Ausdruck wird in der folgenden Reihenfolge verarbeitet:

  1. df.iloc [:, -1] extrahiert die letzte Spalte des DataFrame und value_counts gibt seine Häufigkeitsverteilung an (Beispiel für die Häufigkeitsverteilung: ["○": 9, "×": 5]).
  2. map wandelt jede der Leistungsverteilungsnummern (z. B. 9,5) in Entropiewerte um.
  3. (x / len (df)) * math.log2 (x / len (df)) berechnet den Ausdruck $ P (E) \ log_2 {P (E)} $ für eine Entropie.
  4. Verwenden Sie Reduzieren, um aus allen Elementen eines Arrays einen einzelnen Wert zu erstellen. Zum Beispiel kann es verwendet werden, um Summen, Durchschnittswerte usw. zu berechnen.
  5. Der Lamda-Ausdruck x, y: x + y gibt die Summe der beiden Argumente (x, y) an, dh die Summe der Arrays. Dies ist der Sigma-Teil der Entropieformel ($ - \ sum_ {E \ in \ Omega} P (E) \ log_2 {P (E)} $). Da der Ausdruck am Anfang ein Minus hat, hat er auch ein Minus vor dem Reduzieren des Programms.

5.2.1 Berechnungsbeispiel

Die Informationsentropie für die folgenden Daten beträgt 0,9402859586706309.

d = {"Golf":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"]}
#Die Entropie ist 0.9402859586706309

Wenn andererseits die ersten beiden x in ○ geändert werden und ○ zu den dominanten Daten wird (die Komplexität wird verringert), beträgt die Entropie 0,74959525725948.

d = {"Golf":["○","○","○","○","○","×","○","×","○","○","○","○","○","×"]}
#Die Entropie ist 0.74959525725948

Unten finden Sie eine Liste aller Programme, die die Informationsentropie berechnen.

import pandas as pd
from functools import reduce
import math

d = {"Golf":["×","×","○","○","○","×","○","×","○","○","○","○","○","×"]}
df0 = pd.DataFrame(d)

entropy = lambda df:-reduce(
    lambda x,y:x+y,
    map(
        lambda x:(x/len(df))*math.log2(x/len(df)),
        df.iloc[:,-1].value_counts()
    )
)

print(entropy(df0)) #Ausgabe 0.9402859586706309

Recommended Posts

Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)
2. Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (2. Grundlagen des Python-Programms)
Machen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (4. Datenstruktur)
Erstellen Sie mit Python einen Entscheidungsbaum aus 0 und verstehen Sie ihn (3. Datenanalysebibliothek Pandas Edition)
Erhalten Sie E-Mails von Google Mail und beschriften Sie sie mit Python3
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Bis Sie mit Python unter Windows 7 eine maschinelle Lernumgebung erstellen und ausführen
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
Hasch mit Python und entkomme dem Ego eines bestimmten Ministers
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Erstellen Sie ein Bereitstellungsskript mit Stoff und Küche und verwenden Sie es erneut
Sammeln von Informationen von Twitter mit Python (Integration von MySQL und Python)
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
Sammeln von Informationen von Twitter mit Python (Twitter API)
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Ein Memo mit Python2.7 und Python3 in CentOS
Kartenmietinformationen auf einer Karte mit Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Erstellen Sie eine Deb-Datei aus einem Python-Paket
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Erstellen Sie einen Stapel mit einer Warteschlange und eine Warteschlange mit einem Stapel (von LetCode / Implement Stack using Queues, Implement Queue using Stacks)
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Sammeln von Informationen von Twitter mit Python (Umgebungskonstruktion)
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Erstellen Sie ein C-Array aus einer Python> Excel-Tabelle
Erstellen einer Python-Umgebung mit virtualenv und direnv
Erstellen Sie mit Minette für Python einen LINE BOT
Teilen Sie jede PowerPoint-Folie in eine JPG-Datei und geben Sie sie mit Python aus
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine neue Todoist-Aufgabe aus Python Script
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Erstellen Sie mit ClustalW2 einen phylogenetischen Baum aus Biopyton
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Abrufen von Informationen zu Songwriting, Komposition und Arrangement von der Tower Records-Website mit Python
Schritte zum Erstellen eines Twitter-Bots mit Python
Starten Sie einen Webserver mit Python und Flask
TRIE-Baumimplementierung mit Python und LOUDS
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie mit Python + Qt (PySide) ein farbspezifisches Widget.