2. Analyse multivariée expliquée dans Python 7-2. Arbre de décision [différence de critères de division]

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

Comparaison de chaque indice en 2 classes de classification

#Générer une séquence d'égalité correspondant à p
xx = np.linspace(0, 1, 50) #Valeur de départ 0, valeur de fin 1, nombre d'éléments 50

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

#Calculer chaque indice
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]

#Afficher le graphique
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

#Générer une séquence d'égalité correspondant à p
xx = np.linspace(0, 1, 50) #Valeur de départ 0, valeur de fin 1, nombre d'éléments 50

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

#Calculer chaque indice
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]

#Afficher le graphique
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

Différences dans chaque indice de gain d'information

1. Qu'est-ce que le gain d'information?

2. Calculez le gain d'information pour chaque indice

➀ Gain d'information dû à Gini impur

#Pureté Gini du nœud parent
IGg_p = 2 * 1/2 * (1-(1/2))

#Impureté de Gini du nœud enfant A
IGg_A_l = 2 * 3/4 * (1-(3/4)) #la gauche
IGg_A_r = 2 * 1/4 * (1-(1/4)) #droite
#Impureté de Gini du nœud enfant B
IGg_B_l = 2 * 2/6 * (1-(2/6)) #la gauche
IGg_B_r = 2 * 2/2 * (1-(2/2)) #droite

#Gain d'information de chaque agence
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("Gain d'information de la branche A:", IG_gini_A)
print("Gain d'information de la branche B:", IG_gini_B)

2_7_2_04.PNG

➁ Gain d'information de l'entropie

#Entropie du nœud parent
IGe_p = (4/8 * np.log((1-4/8)/(4/8)) - np.log(1-4/8)) / (np.log(2))

#Entropie du nœud enfant A
IGe_A_l = (3/4 * np.log((1-3/4)/(3/4)) - np.log(1-3/4)) / (np.log(2)) #la gauche
IGe_A_r = (1/4 * np.log((1-1/4)/(1/4)) - np.log(1-1/4)) / (np.log(2)) #droite
#Entropie du nœud enfant B
IGe_B_l = (2/6 * np.log((1-2/6)/(2/6)) - np.log(1-2/6)) / (np.log(2)) #la gauche
IGe_B_r = (2/2 * np.log((1-2/2+1e-7)/(2/2)) - np.log(1-2/2+1e-7)) / (np.log(2)) #droite,+1e-7 ajoute une petite valeur pour éviter 0 division

#Gain d'information de chaque agence
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("Gain d'information de la branche A:", IG_entropy_A)
print("Gain d'information de la branche B:", IG_entropy_B)

2_7_2_05.PNG

➂ Gain d'informations en raison du taux d'erreurs de classification

#Taux d'erreur de classification du nœud parent
IGm_p = 1 - np.maximum(4/8, 1-4/8)

#Taux d'erreur de classification du nœud enfant A
IGm_A_l = 1 - np.maximum(3/4, 1-3/4) #la gauche
IGm_A_r = 1 - np.maximum(1/4, 1-1/4) #droite
#Taux d'erreur de classification du nœud enfant B
IGm_B_l = 1 - np.maximum(2/6, 1-2/6) #la gauche
IGm_B_r = 1 - np.maximum(2/2, 1-2/2) #droite

#Gain d'information de chaque agence
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("Gain d'information de la branche A:", IG_misclass_A)
print("Gain d'information de la branche B:", IG_misclass_B)

2_7_2_06.PNG

Résumé

Condition de classification A Condition de classification B
Gini Impure 0.125 0.167
Entropie 0.189 0.311
Taux d'erreurs de classification 0.250 0.250

Recommended Posts

2. Analyse multivariée expliquée dans Python 7-2. Arbre de décision [différence de critères de division]
2. Analyse multivariée expliquée dans Python 7-3. Arbre de décision [arbre de retour]
2. Analyse multivariée décrite dans Python 7-1. Arbre de décision (scikit-learn)
2. Analyse multivariée décrite dans Python 3-2. Analyse en composantes principales (algorithme)
2. Analyse multivariée décrite dans Python 2-1. Analyse de régression multiple (scikit-learn)
2. Analyse multivariée décrite dans Python 1-2. Analyse de régression simple (algorithme)
2. Analyse multivariée expliquée dans Python 3-1. Analyse en composantes principales (scikit-learn)
2. Analyse multivariée expliquée dans Python 8-1. Méthode de voisinage k (scikit-learn)
2. Analyse multivariée expliquée dans Python 5-3. Analyse de régression logistique (modèles statistiques)
2. Analyse multivariée énoncée dans Python 8-3. Méthode de voisinage K [vérification d'intersection]
2. Analyse multivariée définie dans Python 6-2. Régression Ridge / Régression Lasso (scikit-learn) [Régression Ridge vs régression Lasso]
2. Analyse multivariée détaillée dans Python 2-3. Analyse de régression multiple [taux d’infection au COVID-19]
2. Analyse multivariée décrite dans Python 6-1. Régression de crête / Régression de lasso (scikit-learn) [régression multiple vs régression de crête]
2. Analyse multivariée expliquée dans Python 8-2. Méthode de voisinage k [méthode de pondération] [modèle de retour]
2. Analyse multivariée décrite dans Python 6-3. Régression Ridge / Régression Lasso (scikit-learn) [Fonctionnement de la régularisation]
Analyse d'association en Python
Analyse de régression avec Python
Trouver des erreurs en Python
Analyse des contraintes symétriques axiales avec Python
[Python] Tutoriel personnel sur l'arbre de décision
Analyse de régression simple avec Python
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
Première analyse de régression simple en Python
Différence entre == et est en python
Diviser timedelta dans la série Python 2.7
Compilateur en Python: arborescence de syntaxe PL / 0
Analyse du squelette planaire dans Python (2) Hotfix
Algorithme (arborescence de segments) en Python (s'entraîner)