2. Multivariate Analyse in Python 7-2. Entscheidungsbaum [Unterschied in den Teilungskriterien]

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Vergleich jedes Index in 2 Klassenklassifikationen

#Generieren Sie eine Gleichheitssequenz entsprechend p
xx = np.linspace(0, 1, 50) #Startwert 0, Endwert 1, Anzahl der Elemente 50

plt.figure(figsize=(10, 8))

#Berechnen Sie jeden Index
gini = [2 * x * (1-x) for x in xx]
entropy = [-x * np.log2(x) - (1-x) * np.log2(1-x)  for x in xx]
misclass = [1 - max(x, 1-x) for x in xx]

#Grafik anzeigen
plt.plot(xx, gini, label='gini', lw=3, color='b')
plt.plot(xx, entropy, label='entropy', lw=3, color='r')
plt.plot(xx, misclass, label='misclass', lw=3, color='g')

plt.xlabel('p', fontsize=15)
plt.ylabel('criterion', fontsize=15)
plt.legend(fontsize=15)
plt.xticks(fontsize=12) 
plt.yticks(fontsize=12) 
plt.grid()

2_7_2_01.PNG

#Generieren Sie eine Gleichheitssequenz entsprechend p
xx = np.linspace(0, 1, 50) #Startwert 0, Endwert 1, Anzahl der Elemente 50

plt.figure(figsize=(10, 8))

#Berechnen Sie jeden Index
gini = [2 * x * (1-x) for x in xx]
entropy = [(x * np.log((1-x)/x) - np.log(1-x)) / (np.log(2))  for x in xx]
entropy_scaled = [(x * np.log((1-x)/x) - np.log(1-x)) / (2*np.log(2))  for x in xx]
misclass = [1 - max(x, 1-x) for x in xx]

#Grafik anzeigen
plt.plot(xx, gini, label='gini', lw=3, color='b')
plt.plot(xx, entropy, label='entropy', lw=3, color='r', linestyle='dashed')
plt.plot(xx, entropy_scaled, label='entropy(scaled)', lw=3, color='r')
plt.plot(xx, misclass, label='misclass', lw=3, color='g')

plt.xlabel('p', fontsize=15)
plt.ylabel('criterion', fontsize=15)
plt.legend(fontsize=15)
plt.xticks(fontsize=12) 
plt.yticks(fontsize=12) 
plt.grid()

2_7_2_02.PNG

Unterschiede in jedem Index im Informationsgewinn

1. Was ist Informationsgewinn?

2. Berechnen Sie den Informationsgewinn für jeden Index

➀ Informationsgewinn durch Gini unrein

#Gini-Reinheit des Elternknotens
IGg_p = 2 * 1/2 * (1-(1/2))

#Gini-Reinheit des untergeordneten Knotens A.
IGg_A_l = 2 * 3/4 * (1-(3/4)) #links
IGg_A_r = 2 * 1/4 * (1-(1/4)) #richtig
#Gini-Unreinheit des Kinderknotens B.
IGg_B_l = 2 * 2/6 * (1-(2/6)) #links
IGg_B_r = 2 * 2/2 * (1-(2/2)) #richtig

#Informationsgewinn jeder Branche
IG_gini_A = IGg_p - 4/8 * IGg_A_l - 4/8 * IGg_A_r
IG_gini_B = IGg_p - 6/8 * IGg_B_l - 2/8 * IGg_B_r

print("Informationsgewinn von Zweig A:", IG_gini_A)
print("Informationsgewinn von Zweig B:", IG_gini_B)

2_7_2_04.PNG

➁ Informationsgewinn durch Entropie

#Übergeordnete Knotenentropie
IGe_p = (4/8 * np.log((1-4/8)/(4/8)) - np.log(1-4/8)) / (np.log(2))

#Entropie des untergeordneten Knotens A.
IGe_A_l = (3/4 * np.log((1-3/4)/(3/4)) - np.log(1-3/4)) / (np.log(2)) #links
IGe_A_r = (1/4 * np.log((1-1/4)/(1/4)) - np.log(1-1/4)) / (np.log(2)) #richtig
#Entropie des untergeordneten Knotens B.
IGe_B_l = (2/6 * np.log((1-2/6)/(2/6)) - np.log(1-2/6)) / (np.log(2)) #links
IGe_B_r = (2/2 * np.log((1-2/2+1e-7)/(2/2)) - np.log(1-2/2+1e-7)) / (np.log(2)) #richtig,+1e-7 fügt einen kleinen Wert hinzu, um eine 0-Division zu vermeiden

#Informationsgewinn jeder Branche
IG_entropy_A = IGe_p - 4/8 * IGe_A_l - 4/8 * IGe_A_r
IG_entropy_B = IGe_p - 6/8 * IGe_B_l - 2/8 * IGe_B_r
print("Informationsgewinn von Zweig A:", IG_entropy_A)
print("Informationsgewinn von Zweig B:", IG_entropy_B)

2_7_2_05.PNG

➂ Informationsgewinn aufgrund von Fehlklassifizierungsraten

#Fehlklassifizierungsrate des übergeordneten Knotens
IGm_p = 1 - np.maximum(4/8, 1-4/8)

#Fehlklassifizierungsrate des untergeordneten Knotens A.
IGm_A_l = 1 - np.maximum(3/4, 1-3/4) #links
IGm_A_r = 1 - np.maximum(1/4, 1-1/4) #richtig
#Fehlklassifizierungsrate des untergeordneten Knotens B.
IGm_B_l = 1 - np.maximum(2/6, 1-2/6) #links
IGm_B_r = 1 - np.maximum(2/2, 1-2/2) #richtig

#Informationsgewinn jeder Branche
IG_misclass_A = IGm_p - 4/8 * IGm_A_l - 4/8 * IGm_A_r
IG_misclass_B = IGm_p - 6/8 * IGm_B_l - 2/8 * IGm_B_r
print("Informationsgewinn von Zweig A:", IG_misclass_A)
print("Informationsgewinn von Zweig B:", IG_misclass_B)

2_7_2_06.PNG

Zusammenfassung

Klassifizierungsbedingung A. Klassifizierungsbedingung B.
Gini unrein 0.125 0.167
Entropie 0.189 0.311
Fehlklassifizierungsrate 0.250 0.250

Recommended Posts

2. Multivariate Analyse in Python 7-2. Entscheidungsbaum [Unterschied in den Teilungskriterien]
2. Multivariate Analyse in Python 7-3. Entscheidungsbaum [Rückgabebaum]
2. Multivariate Analyse in Python 7-1. Entscheidungsbaum (Scikit-Learn)
2. Multivariate Analyse in Python 3-2. Hauptkomponentenanalyse (Algorithmus)
2. Multivariate Analyse in Python 2-1. Multiple Regressionsanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 1-2. Einfache Regressionsanalyse (Algorithmus)
2. Multivariate Analyse in Python 3-1. Hauptkomponentenanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 8-1. K Nachbarschaftsmethode (Scikit-Learn)
2. Multivariate Analyse in Python 5-3. Logistische Regressionsanalyse (Statistikmodelle)
2. Multivariate Analyse in Python 8-3. K Nachbarschaftsmethode [Schnittstellenüberprüfung]
2. Multivariate Analyse in Python 6-2. Ridge-Regression / Lasso-Regression (Scikit-Learn) [Ridge-Regression vs. Lasso-Regression]
2. Multivariate Analyse in Python 2-3. Multiple Regressionsanalyse [COVID-19-Infektionsrate]
2. Multivariate Analyse in Python 6-1. Ridge-Regression / Lasso-Regression (Scikit-Learn) [multiple Regression vs. Ridge-Regression]
2. Multivariate Analyse in Python 8-2. K Nachbarschaftsmethode [Gewichtungsmethode] [Rückgabemodell]
2. Multivariate Analyse in Python 6-3. Ridge-Regression / Lasso-Regression (Scikit-Learn) [Funktionsweise der Regularisierung]
Assoziationsanalyse in Python
Regressionsanalyse mit Python
Finde Fehler in Python
Axialsymmetrische Spannungsanalyse mit Python
[Python] Persönliches Tutorial zum Entscheidungsbaum
Einfache Regressionsanalyse mit Python
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Gehirnwellenanalyse mit Python: Python MNE-Tutorial
Erste einfache Regressionsanalyse in Python
Unterschied zwischen == und ist in Python
Zeitdelta in Python 2.7-Serie teilen
Compiler in Python: PL / 0-Syntaxbaum
Planare Skelettanalyse in Python (2) Hotfix
Algorithmus (Segmentbaum) in Python (Übung)