[PYTHON] [Maschinelles Lernen] Entscheidungsbäume aus Scikit-Lernen und Mathematik verstehen

1. Zweck

Wenn Sie maschinelles Lernen ausprobieren möchten, kann jeder Scicit-Learn usw. verwenden, um es relativ einfach zu implementieren. Um jedoch Ergebnisse bei der Arbeit zu erzielen oder Ihr Niveau zu verbessern ** Sie können sehen, dass es in der Erklärung von "Ich kenne den Hintergrund nicht, aber ich habe dieses Ergebnis" deutlich schwach ist **.

In diesem Artikel zielen ** 2 bis 3 auf "Ich mag die Theorie, also werde ich zuerst versuchen, Scicit-Learn zu verwenden" und 4 und später auf "Den Hintergrund aus der Mathematik verstehen" **.

2. Was ist ein Entscheidungsbaum?

In Wikipedia gibt es eine Beschreibung wie folgt.

Entscheidungsbäume werden erstellt, um Entscheidungen zu treffen. Der entscheidende Baum ist eine besondere Form der Holzstruktur.

Es ist ein wenig schwierig in Worte zu fassen, aber kurz gesagt, es ist ein Modell, das das Urteil einer Person wie eine Baumstruktur unterteilt und das Urteil vorantreibt.

Dies ist immer noch schwer zu verstehen, also geben wir ein konkretes Beispiel.


Spezifisches Beispiel

Angenommen, Sie sind ein Immobilienmakler, möchten Sie Zimmer auswählen, die für junge Frauen leicht zu wählen sind, und Zimmer, die es nicht sind. Aus den letzten 13 Daten haben wir daher Informationen zu den tatsächlich von jungen Frauen ausgewählten Räumen, den nicht ausgewählten Räumen und den Räumen gesammelt.

キャプチャ1.PNG
Einige Etagen Raumgrößem^2 automatische Sperre Wenn Sie es ausleihen
Eigenschaft 1 4 30 Ja
Eigenschaft 2 5 45 Nichts
Eigenschaft 3 3 32 Ja
Eigentum 4 1 20 Ja
Eigentum 5 6 35 Ja
Eigentum 6 3 40 Ja
Eigentum 7 4 38 Ja
Eigentum 8 1 20 Nichts ×
Eigentum 9 2 18 Nichts ×
Eigentum 10 1 20 Nichts ×
Eigentum 11 1 22 Nichts ×
Eigentum 12 1 24 Ja ×
Eigentum 13 3 25 Nichts ×

Dieses Mal gab ich ein leicht verständliches Beispiel, aber wenn wir uns für ein Zimmer entscheiden, sollten wir wie folgt denken.

キャプチャ2.PNG

Welcher Zustand nach oben kommt, ist für jede Person unterschiedlich, aber ich hasse zum Beispiel den ersten Stock ein wenig, denke zuerst darüber nach, ob es der zweite Stock oder höher ist, und wenn es der zweite Stock oder höher ist, wäre es schön, eine automatische Sperre zu haben Ein Zimmer mieten. Im Gegenteil, auch wenn es sich nicht im zweiten Stock oder darüber befindet (der Raum im ersten Stock), wenn der Raum eine bestimmte Größe hat, können Sie ihn mieten, oder wenn er sich im ersten Stock befindet und klein ist, mieten Sie ihn nicht. Ich denke, ich werde darüber nachdenken.

** Dies ist genau die Struktur des Baums, und es ist der Entscheidungsbaum, der die Bedingungen auf diese Weise verzweigt, um Entscheidungen zu treffen. ** ** **

Wie wird also der Zweig dieses Zustands bestimmt? Das Beispiel, das ich gerade gegeben habe, ist eine intuitive Erklärung, und ich denke, es hatte keine Grundlage.

Was hier herauskommt, ist "Unreinheit". Details werden im letzten Kapitel der Mathematik angegeben, aber der Entscheidungsbaum entscheidet den Zweig der Bedingung basierend auf dieser Unreinheit. Kurz gesagt, ich möchte die Originaldaten so sauber wie möglich aufteilen (in diesem Beispiel ein Zimmer gemietet oder nicht gemietet). Der Index dieses "sauberen" ist "Verunreinigung".

Für diejenigen, die sich nicht sicher sind, verwendet der Entscheidungsbaum den Index der Unreinheit, um die Struktur des Baums zu beurteilen, der sich gut verzweigt, um die objektiven Variablen (diesmal geliehen / diesmal nicht geliehen) klar zu klassifizieren. Es ist okay, wenn du denkst, dass du es schaffst.

3. Baum bestimmt durch scicit-learn

(1) Import der erforderlichen Bibliotheken

Importieren Sie Folgendes, um einen Entscheidungsbaum zu erstellen. (Zusätzlich numpy usw. importieren)

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier, export_graphviz
#Im Folgenden finden Sie Tools zur Visualisierung von Entscheidungsbäumen
import graphviz
import pydotplus
from IPython.display import Image
from sklearn.externals.six import StringIO

(2) Datenaufbereitung

Stellen Sie die Informationen wie die Anzahl der Stockwerke, die Größe des Raums, die automatische Verriegelung und die Anmietung des Raums als Daten wie unten gezeigt ein (der Inhalt entspricht der am Anfang gezeigten Datentabelle).

data = pd.DataFrame({
        "buy(y)":[True,True,True,True,True,True,True,False,False,False,False,False,False],
        "high":[4, 5, 3, 1, 6, 3, 4, 1, 2, 1, 1,1,3],
        "size":[30, 45, 32, 20, 35, 40, 38, 20, 18, 20, 22,24,25],
        "autolock":[1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,1,0]
    })

(3) Modellbau

(I) Datenformung

Zunächst werden wir die Form der Daten anordnen, um das Modell zu erstellen.

y = data.loc[:,["buy(y)"]]
X = data.loc[:,["high", "size","autolock"]]

Da dies kein Artikel über Python-Grammatik ist, werde ich die Details weglassen, aber ich werde X und y in einer Form anordnen, um sie mit scikit-learn zu bestimmen.

(Ii) Modellbau

Es ist endlich die Modellbauordnung.

clf = DecisionTreeClassifier()
clf = clf.fit(X, y)

Das war's für ein einfaches Modell. Wir werden ein Entscheidungsbaummodell für eine Variable namens clf erstellen! Das Bild ist, dass das clf mit dem vorbereiteten X und y in der nächsten Zeile angepasst (= gelernt) wird.

(3) Modellvisualisierung

◆ Visualisierungscode

Wenn es sich um ein einfaches Modell handelt, endet es mit (2), aber einer der Vorteile des Entscheidungsbaums ist "hohe Lesbarkeit". Einfach ausgedrückt: "Menschen, die nicht viel über maschinelles Lernen wissen, können leicht verstehen, warum das Modell dieses Ergebnis erzielt hat."

Lassen Sie uns den Prozess zur Beurteilung der Baumstruktur visualisieren.


dot_data = StringIO() #Speicherort der Punktdatei-Informationen
export_graphviz(clf, out_file=dot_data,  
                     feature_names=["high", "size","autolock"],#Hier zum Bearbeiten
                     class_names=["False","True"],#Bearbeiten Sie hier (Warum Fase,Ich werde später darauf eingehen, ob es die wahre Reihenfolge ist.
                     filled=True, rounded=True,  
                     special_characters=True) 
graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) 
Image(graph.create_png())

Wenn Sie den obigen Code ausführen, sehen Sie eine Abbildung wie die folgende. キャプチャ5.PNG

◆ So sehen Sie den Zweig

Ich konnte es oben visualisieren! Es gibt viele Artikel und Websites, die mit enden, aber ich wusste nicht, wie ich diese Abbildung lesen sollte, und es fiel mir zunächst schwer, daher werde ich auch eine kurze Ansicht hinzufügen.

** (a) Hellblaue Box oben ** Dies ist der allererste Zustand. Die folgende Gini zeigt den aktuellen Status. ―――――――――――――――――――――――――――――――――――――――――――――― Gini-Koeffizient: 0,497 Stichprobe (Anzahl der Daten): 13 value: Die Daten werden in 6 und 7 unterteilt und je mehr True als Klasse angezeigt wird. ―――――――――――――――――――――――――――――――――――――――――――――― ** * Über die Reihenfolge der Werte ** Da diesmal nur wenige Daten vorhanden sind, können Sie sehen, dass 7 True ist. Wenn jedoch viele Daten vorhanden sind, müssen Sie wissen, welche Daten (in diesem Fall True ist False) vorliegen, auch wenn die Zahl als Wert angezeigt wird. Überlegen. Schreiben Sie in diesem Fall wie folgt.


clf = DecisionTreeClassifier()#Dies ist das gleiche wie zuvor
clf = clf.fit(X, y)#Dies ist das gleiche wie zuvor
print(clf.classes_)#Hier hinzufügen

In diesem Fall wird dann [False, True] angezeigt. Mit anderen Worten, Sie können sehen, dass die Reihenfolge der Werte False, True ist.

Dies ist der Grund, warum ich hier im Visualisierungscode `class_names = [" False "," True "], # geschrieben habe (ich werde später erklären, warum die Reihenfolge Fase, True ist)` **. Da die Reihenfolge in DecisionTreeClassifier () False, True ist, erhalten Sie bei der Visualisierung den entgegengesetzten Namen, wenn Sie class_names nicht in derselben Reihenfolge erstellen. Seien Sie also vorsichtig. (Ich bin hier ziemlich gestolpert)

** (b) 2. Zeile, blaues Kästchen rechts ** Es bezieht sich auf den Fall, in dem die Größe (Raumgröße) im ersten Zweig nicht weniger als 27,5 $ m ^ 2 $ (= 27,5 $ m ^ 2 $ oder mehr) beträgt. In diesem Fall beträgt der Gini-Koeffizient 0 und die Stichprobe (Anzahl der Daten). 6 und True sind in 6 Teile unterteilt.

Das heißt, wenn ein Zimmer größer als 27,5 $ m ^ 2 $ ist, können Sie es jederzeit mieten! Da der Gini-Koeffizient 0 ist, dh die Unreinheit 0 ist, ist keine weitere Verzweigung möglich, und dies ist das Ende.

Unten sehen Sie die anderen Zweige auf die gleiche Weise.

Dies ist das Ende der Implementierung des Entscheidungsbaums mit Scicit-Learn und dem Fluss der Visualisierung.

(4) In der realen Welt ...

Es macht keinen Sinn, ein Modell fertig zu stellen. In der realen Welt ist es notwendig, dieses Vorhersagemodell zu verwenden, um vorherzusagen, ob ein neuer Raum gemietet wird oder nicht, wenn Daten in der Zukunft erhalten werden. Sie haben die Daten für zwei neue Räume aufgeschrieben. Speichern Sie es in einer Variablen wie unten gezeigt.

z = pd.DataFrame({
        "high":[2, 3],
        "size":[25, 18],
        "autolock":[1,0]
    })
z2 = z[["high", "size","autolock"]].values

Was ich tun möchte, ist, die obigen zusätzlichen Daten auf das Entscheidungsbaummodell (clf) anzuwenden, das zuvor mit scicit-learn erstellt wurde, und vorherzusagen, ob der Raum wahrscheinlich vermietet wird.

y_est = clf.predict(z2)
y_est

In diesem Fall wird das Ergebnis als "([False, False])" angezeigt. Mit anderen Worten, leider ist es wahrscheinlich, dass diese beiden Zimmer nicht vermietet werden können. Daher ist es notwendig, eine Strategie für den Verkauf an andere Zielgruppen als junge Frauen zu verfolgen.

Es gibt viele andere Details, aber ich denke, es ist gut, zuerst einen orthodoxen Entscheidungsbaum zu implementieren.

4. Den Entscheidungsbaum aus der Mathematik verstehen

Übrigens habe ich bis zu 3 versucht, den Ablauf der Erstellung eines Entscheidungsbaummodells mithilfe von Scicit-Learn → Visualisierung → Vorhersage unter Verwendung neuer Daten zu implementieren. Hier möchte ich klarstellen, wie das Entscheidungsbaummodell dieses Flusses mathematisch berechnet wird.

Zu diesem Zweck ist es notwendig, über "Verunreinigung" und "Informationsmenge" zu sprechen, die in der ersten Hälfte eingeführt wurden, und "Entropie" und "Geni-Koeffizient" als Indikatoren zur Messung der Verunreinigung.

(I) Unrein

In der ersten Hälfte gab der Entscheidungsbaum an, dass er einen auf Verunreinigungen basierenden Beurteilungsprozess aufbauen würde. Im Detail ist Unreinheit ** "ein Indikator dafür, wie stark die Daten variieren" **.

Wenn beispielsweise bei der Klassifizierung eine vollständige Klassifizierung möglich ist, ist die Reinheit 0, und bei der Regression ist die Reinheit 0, wenn die Verteilung der Daten innerhalb eines Knotens 0 ist.

Daher versucht der Entscheidungsbaum, diese Unreinheit so klein wie möglich zu machen (nahe 0). Es gibt "Entropie" und "Geni-Koeffizient" als Indizes, um diese Unreinheit zu messen. Um auf diese Erklärung einzugehen, werden wir die unten stehende Informationsmenge behandeln.

(Ii) Informationsmenge

Hier möchte ich die Idee der Informationsmenge grob unterdrücken. Die Informationsmenge ist ** "ein Index, der den Grad der Überraschung quantifiziert, wenn Sie das Ereignis kennen" **.

Sie haben zum Beispiel mit einem Freund gesprochen und gehört: Was ist überraschender? キャプチャ3.PNG

Erstens: Es scheint, dass es morgen in Okinawa gut wird. Zweitens: Herr Hanyu vom Eiskunstlauf scheint so großartig zu sein wie ein Profi im Rugby. (Es ist nur eine Fantasy-Geschichte)

Offensichtlich ist die zweite Geschichte überraschender. Weil ich in der zweiten Geschichte Informationen über ein Ereignis erhalten habe, das unwahrscheinlich ist. In diesem Fall kann gesagt werden, dass der zweite mehr Informationen hat.

Diese Informationsmenge wird in der Welt der Informationstheorie wie folgt definiert.

I(x) = -\log_{2} P(x)

Wenn im vorherigen Fall beispielsweise die Wahrscheinlichkeit, dass Okinawa klar wird, 0,8 beträgt und Hanyus Wahrscheinlichkeit, dass Rugby so groß ist wie ein Profi, 0,01 beträgt, kann die Informationsmenge wie folgt berechnet werden.

Menge an Informationen zum Ereignis, wenn Okinawa gelöscht wird: $ - \ log_ {2} 0,8 = 0,322 $ Informationsmenge von Hanyus Ereignis: $ - \ log_ {2} 0.01 = 6.644 $

Die Menge an Informationen über Hanyus Ereignisse ist überwältigend groß!

※Referenz※ Sie können $ \ log $ mit Wolfram Alpha auf der folgenden Site einfach berechnen. (Geben Sie "-log2 (0.8)" in die oben angezeigte Leiste ein und der Wert wird zurückgegeben.) https://www.wolframalpha.com/

Bisher haben wir die Informationsmenge erklärt. Kommen wir mit diesem Inhalt zur Geschichte der Entropie.

(Iii) Entropie

◆ Über Entropie

Entropie ist ein Index, der die Informationsmenge in (i) mittelt und den Grad der Variation der Informationsmenge zeigt.

Die meisten haben eine niedrige Entropie, wenn dasselbe Ereignis mehrmals beobachtet wird. Wenn andererseits bei jeder Beobachtung ein anderes Ereignis auftritt, ist die Entropie hoch.

Zum Beispiel ist das Wetter in Okinawa wie das zuvor erwähnte immer sonnig, daher ist die Entropie gering. Andererseits ist das Wetter in Kanto nicht immer sonnig und es ist bewölkt und regnerisch, so dass man sagen kann, dass die Entropie großartig ist.

Die Entropie ist wie folgt definiert.

H = \sum_{i=1}P(x_i)I(x_i) = -\sum_{i=1}P(x_i)\log_{2}P(x_i)

Nehmen wir zum Beispiel im vorherigen Fall an, dass Okinawa eine klare Wahrscheinlichkeit von 0,8, eine trübe Wahrscheinlichkeit von 0,05 und eine Regenwahrscheinlichkeit von 0,15 hat. Und wenn die Wahrscheinlichkeit, Kanto zu löschen, 0,6 beträgt, die Wahrscheinlichkeit einer Trübung 0,2 beträgt und die Wahrscheinlichkeit eines Regens 0,2 beträgt, kann jede Entropie wie folgt berechnet werden.

Okinawa Wetterentropie: 0,884

Kanto-Wetterentropie: 0,953

Da die Entropie des Wetters in Kanto größer ist, können Sie sehen, dass die Informationsmenge variiert.

◆ Über die Beziehung zwischen Entropie und Reinheit

Der Entscheidungsbaum gab an, dass er versucht, die Reinheit so weit wie möglich zu reduzieren. In Bezug auf die Beziehung zwischen Entropie und Reinheit bedeutet ** die niedrigste Reinheit 0 Entropie, und je höher die Reinheit, desto höher die Entropie **.

Die Unreinheit zeigte den Grad der Variation in den Daten, und die Entropie zeigte auch den Grad der Variation in der Informationsmenge, so dass es möglicherweise leicht intuitiv zu verstehen ist.

◆ Über Entscheidungsbaum und Entropie

Wie wird die Entropie spezifisch berechnet und das Modell in den Entscheidungsbaum eingebaut?

Es ** berechnet die Differenz zwischen der Entropie vor der Verzweigung und der Entropie nach der Verzweigung, sucht nach der Verzweigungsbedingung, die die Differenz maximiert, und erstellt das Modell **.

Das Schreiben in Worten wäre langwierig, aber der Punkt ist, dass wir, um den Entscheidungsbaum zu einem guten Modell zu machen, die Unreinheit minimieren möchten, die die Variation der Daten darstellt, dh die Entropie verringern.

Zu diesem Zweck muss nach einer Verzweigungsbedingung gesucht werden, bei der die Entropie nach der nächsten Verzweigung kleiner als die der vorherigen Verzweigung ist, dh die Differenz zwischen der Entropie vor der Verzweigung und der Entropie nach der Verzweigung ist so groß wie möglich. Es wird sein.

(Iv) Gini-Koeffizient

◆ Über den Gini-Koeffizienten

Zusätzlich zur Entropie gibt es einen Gini-Koeffizienten als Index zur Messung von Verunreinigungen. Der Gini-Koeffizient ist ein Index, der die Wahrscheinlichkeit einer Fehlklassifizierung ** mittelt.

Wenn die Wahrscheinlichkeit, dass die Klasse $ x_i $ an einem Knoten $ t $ ausgewählt wird, $ P (X_i \ mid t) $ ist, wird der Gini-Koeffizient als der erwartete Wert der Wahrscheinlichkeit einer Fehlklassifizierung an einem Knoten definiert. .. Mit anderen Worten, es ist ein Indikator dafür, wie sehr Sie wahrscheinlich falsch klassifizieren **.

Der Gini-Koeffizient ist wie folgt definiert.

G(t) = \sum_{i=1}^{K}P(x_i \mid t)\left(1-P(x_i \mid t)\right) = 1-\sum_{i=1}^{K}P(x_i \mid t)^2

◆ Über die Beziehung zwischen Gini-Koeffizient und Unreinheit

Der Entscheidungsbaum gab an, dass er versucht, die Reinheit so weit wie möglich zu reduzieren. Was die Beziehung zwischen dem Gini-Koeffizienten und der Reinheit betrifft, ** hat die niedrigste Reinheit eine Entropie von 0, und je höher die Reinheit ist, desto größer ist die Entropie (maximal 1) **.

◆ Informationen zum Entscheidungsbaum und zum Gini-Koeffizienten

Dieser Bereich wird weggelassen, da die Idee mit der obigen "◆ Über Entscheidungsbaum und Entropie" identisch ist. Konstruieren Sie eine bedingte Verzweigung so, dass die Differenz zwischen dem Gini-Koeffizienten vor der Verzweigung und dem Gini-Koeffizienten nach der Verzweigung so groß wie möglich ist.

(V) Zusammenfassung

Wie oben beschrieben, ist der Entscheidungsbaum ein Modell, das einen Beurteilungsprozess wie die Struktur eines Baums konstruiert, und das Beurteilungskriterium bestand darin, die "Verunreinigung" zu minimieren, die die Variation von Daten darstellt.

Die Indizes zur Messung der Unreinheit sind "Entropie, die den Grad der Variation von Ereignissen angibt" und "Geni-Koeffizient, der angibt, wie viel Fehlklassifizierung wahrscheinlich auftritt", und der Unterschied zwischen vor und nach der Verzweigung ist am größten. Hinter den Kulissen setzte der Entscheidungsbaum solche Verzweigungsbedingungen.

Wir haben uns auch spezifische Formeln für Entropie- und Gini-Koeffizienten angesehen.

clf = DecisionTreeClassifier(criterion="gini")
clf = clf.fit(X, y)

5. Schlussfolgerung

Wie war es? Mein Gedanke ist: "Ich kann nicht interpretieren, selbst wenn mir von Anfang an ein sehr komplizierter Code angezeigt wird. Daher ist mir die Genauigkeit kein einziges Mal wichtig. Deshalb werde ich versuchen, eine grundlegende Reihe von Flows mit Scicit-Learn usw. zu implementieren." Ich finde es sehr wichtig.

Sobald ich mich daran gewöhnt habe, halte ich es jedoch für sehr wichtig zu verstehen, wie sie hinter den Kulissen mit mathematischem Hintergrund funktionieren.

Ich denke, es gibt viele Inhalte, die schwer zu verstehen sind, aber ich hoffe, es hilft, mein Verständnis zu vertiefen.

Recommended Posts

[Maschinelles Lernen] Entscheidungsbäume aus Scikit-Lernen und Mathematik verstehen
[Maschinelles Lernen] SVM sowohl aus Scikit-Lernen als auch aus Mathematik verstehen
[Maschinelles Lernen] Verständnis der logistischen Regression sowohl durch Scikit-Lernen als auch durch Mathematik
[Maschinelles Lernen] Verstehen der linearen einfachen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
[Maschinelles Lernen] Verstehen der linearen multiplen Regression sowohl aus Scikit-Lernen als auch aus Mathematik
[Maschinelles Lernen] Unkorrelation aus der Mathematik verstehen
[Maschinelles Lernen] Lassen Sie uns den Entscheidungsbaum studieren
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Überblick über maschinelle Lerntechniken, die aus Scikit-Learn gelernt wurden
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Praktisches maschinelles Lernen mit Scikit-Learn und TensorFlow-TensorFlow gab auf-
Erstellen Sie mit VirtualBox und Ubuntu eine Scikit-Lernumgebung für maschinelles Lernen
[Maschinelles Lernen] Zufällige Gesamtstruktur verstehen
Maschinelles Lernen und mathematische Optimierung
Maschinelles Lernen: Überwacht - Entscheidungsbaum
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, dass Standardisierung zu einem Durchschnitt von 0 und einer Standardabweichung von 1 führt.
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, warum der Korrelationskoeffizient zwischen -1 und 1 liegt.
Vorhersage der Zukunft mit maschinellem Lernen - Vorhersage zukünftiger Aktienkurse mit dem Entscheidungsbaum von Scikit-Learn
[Lesehinweis] Praktisches maschinelles Lernen mit Scikit-Learn, Keras und TensorFlow Kapitel 1
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Maschinelles Lernen ③ Zusammenfassung des Entscheidungsbaums
Klassifikation und Regression beim maschinellen Lernen
SVM versucht maschinelles Lernen mit Scikit-Learn
Organisation von Plattformen für maschinelles Lernen und tiefes Lernen
[Maschinelles Lernen] OOB (Out-Of-Bag) und sein Verhältnis
scikit-learn Verwendung der Zusammenfassung (maschinelles Lernen)
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
Verwenden Sie die API-Gruppe A3RT für maschinelles Lernen aus Python
Persönliche Notizen und Links zum maschinellen Lernen ① (Maschinelles Lernen)
Zusammenfassung der Klassifizierung und Implementierung von Algorithmen für maschinelles Lernen
Erstellen einer Umgebung für Python und maschinelles Lernen (macOS)
"OpenCV-Python Tutorials" und "Praktisches maschinelles Lernsystem"
Visualisieren Sie den Entscheidungsbaum von Scikit-Learn mit Plotlys Treemap