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

Était-ce utile?

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 de Premium, chaque 0.75 de pondération;
  • Basic: 0.5 * 1/4 = 0.125 # parce que Basic est maintenant 0.5, et la scission sur pages_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.

Licencié sous: CC-BY-SA avec attribution
scroll top