Question sur l'arbre de décision dans le livre Programmation Intelligence Collective
-
16-10-2019 - |
Question
J'étudie actuellement le chapitre 7 ( « Modélisation avec des arbres de décision ») du livre « Programmation intelligence collective ».
Je trouve la sortie de la fonction mdclassify()
p.157 confusion. La fonction traite les données manquantes. L'explication fournie est:
Dans l'arbre de décision de base, tout a un poids implicite de 1, ce qui signifie que les observations comptent entièrement pour la probabilité qu'un item unique dans une certaine catégorie. Si vous suivez plusieurs branches au lieu, vous pouvez donner à chaque branche un poids égal à la fraction de toutes les autres lignes qui sont de ce côté.
D'après ce que je comprends, une instance est alors divisé entre les branches.
Par conséquent, je ne comprends pas comment on peut obtenir:
{'None': 0.125, 'Premium': 2.25, 'Basic': 0.125}
0.125+0.125+2.25
ne somme pas 1, ni même un entier. Comment était la nouvelle observation divisée?
Le code est ici:
https://github.com /arthur-e/Programming-Collective-Intelligence/blob/master/chapter7/treepredict.py
En utilisant l'ensemble de données d'origine, j'obtiens l'arbre montré ici:
Quelqu'un peut-il me s'il vous plaît expliquer précisément ce que les chiffres avec précision moyenne et la façon dont ils ont été obtenus exactement?
PS:. Le 1er exemple du livre est erroné tel que décrit sur leur page errata, mais simplement expliquer le deuxième exemple (mentionné ci-dessus) serait bien
La solution
Il y a quatre caractéristiques:
- referer,
- emplacement,
- FAQ,
- pages.
Dans votre cas, vous essayez de classer une instance où FAQ
et pages
ne sont pas connus. mdclassify(['google','France',None,None], tree)
Depuis le premier attribut connu est google
, dans votre arbre de décision que vous n'êtes intéressé que par le bord qui sort du nœud google
sur le côté droit.
Il y a cinq cas:. Trois étiquetés Premium
, une étiquette Basic
et un None
marqué
Les instances avec des étiquettes Basic
et split None
sur l'attribut FAQ
. Il y a deux d'entre eux, de sorte que le poids pour les deux d'entre eux est 0.5
.
Maintenant, nous nous sommes séparés sur l'attribut pages
. Il y a 3 cas avec la valeur pages
supérieure à 20, et deux avec une valeur pages
pas supérieure à 20.
Voici l'astuce: nous savons déjà que les poids pour deux d'entre eux ont été modifiés par rapport à 1
0.5
chacun. Donc, maintenant nous avons trois cas pondéré 1
chacun et 2 cas pondérés 0.5
chacun. Ainsi, la valeur totale est 4
.
Maintenant, nous pouvons compter les poids pour attribut pages
:
- pages_larger_than_20 = 3/4
- pages_not_larger_than_20 = 1/4 # 1 est la: 0,5 + 0,5
Tous les poids sont attribués. Maintenant, nous pouvons multiplier les poids par les « fréquences » des cas (vous souvenant que Basic
et None
la « fréquence » est maintenant 0.5
):
-
Premium
:3 * 3/4 = 2.25
# parce qu'il ya trois instances dePremium
, chaque0.75
de pondération; -
Basic
:0.5 * 1/4 = 0.125
# parce queBasic
est maintenant0.5
, et la scission surpages_not_larger_than_20
est-1/4
-
None
:0.5 * 1/4 = 0.125
# analogue
C'est au moins d'où viennent les chiffres de. Je partage vos doutes quant à la valeur maximale de cette mesure, et si elle doit totaliser 1, mais maintenant que vous savez où viennent ces chiffres que vous pouvez penser comment les normaliser.