Domanda

Al momento sto studiando capitolo 7 ( "Modellazione con Decision Trees") del libro "Programmazione L'intelligenza collettiva".

I trovare l'uscita della funzione di p.157 mdclassify() confusione. La funzione tratta dati mancanti. La spiegazione fornita è:

Nella struttura della decisione di base, tutto ha un peso implicita di 1, il che significa che le osservazioni contano pienamente per la probabilità che un si inserisce elemento in una determinata categoria. Se si sta seguendo multipla rami, invece, è possibile dare ad ogni ramo un peso pari al frazione di tutte le altre righe che sono su quel lato.

Da quello che ho capito, un'istanza viene poi diviso tra i rami.

Quindi, ho semplicemente non capisco come si possa ottenere:

{'None': 0.125, 'Premium': 2.25, 'Basic': 0.125}

come 0.125+0.125+2.25 non somma di 1 e nemmeno un numero intero. Come è stata la nuova spaccatura osservazione?

Il codice è qui:

https://github.com /arthur-e/Programming-Collective-Intelligence/blob/master/chapter7/treepredict.py

Utilizzo di dati originale, ottengo l'albero illustrato di seguito:

screenshot

Qualcuno può per favore mi spieghi esattamente ciò che i numeri con precisione media e come sono stati ottenuti esattamente?

PS:. Il primo esempio del libro è sbagliata, come descritto sulla loro pagina errata, ma solo spiegare il secondo esempio (di cui sopra) sarebbe bello

È stato utile?

Soluzione

Ci sono quattro caratteristiche:

  • referer,
  • posizione
  • FAQ,
  • pagine.

Nel tuo caso, si sta cercando di classificare un caso in cui FAQ e pages sono sconosciuti:. mdclassify(['google','France',None,None], tree)

Dal momento che il primo attributo noto è google, nel vostro albero decisionale sei interessato solo nel bordo che esce dal nodo google sul lato destro.

Ci sono cinque casi:. Tre Premium etichettato, una Basic etichettati e uno None etichettato

Le istanze con etichette Basic e None spaccatura sull'attributo FAQ. Ci sono due di loro, in modo che il peso per entrambi è 0.5.

Ora, abbiamo diviso sull'attributo pages. Ci sono 3 casi con un valore pages maggiore di 20, e due con valore pages non più grande di 20.

Ecco il trucco: sappiamo già che i pesi per due di questi sono stati alterati da 1 a 0.5 ciascuna. Così, ora abbiamo tre istanze 1 ponderata ciascuno, e 2 casi ogni 0.5 ponderate. Quindi il valore totale è di 4.

Ora, possiamo contare i pesi per l'attributo pages:

  • pages_larger_than_20 = 3/4
  • pages_not_larger_than_20 = 1/4 # 1 è il: 0.5 + 0.5

Tutti i pesi sono attribuiti. Ora siamo in grado di moltiplicare i pesi dalle "frequenze" di istanze (ricordando che per Basic e None la "frequenza" è ora 0.5):

  • Premium: 3 * 3/4 = 2.25 # perché ci sono tre casi Premium, ogni 0.75 ponderazione;
  • Basic: 0.5 * 1/4 = 0.125 # perché Basic è ora 0.5, e la spaccatura su pages_not_larger_than_20 IS 1/4
  • None: 0.5 * 1/4 = 0.125 # analogamente

Questo è almeno dove i numeri vengono. Condivido i tuoi dubbi circa il valore massimo di questo parametro, e se si deve sommare a 1, ma ora che si sa dove questi numeri provengono si può pensare a come normalizzare loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top