Informazioni ottenute in R


8

Ho trovato i pacchetti utilizzati per calcolare "Guadagno delle informazioni" per selezionare gli attributi principali in Albero decisionale C4.5 e ho provato a usarli per calcolare "Guadagno delle informazioni".

Ma i risultati del calcolo di ciascun pacchetto sono diversi come il codice seguente.

> IG.CORElearn <- attrEval(In_Occu ~ In_Temp+In_Humi+In_CO2+In_Illu+In_LP+Out_Temp+Out_Humi, dataUSE1, estimator = "InfGain")
> IG.RWeka     <- InfoGainAttributeEval(In_Occu ~ In_Temp+In_Humi+In_CO2+In_Illu+In_LP+Out_Temp+Out_Humi, dataUSE1)
> IG.FSelector <- information.gain(In_Occu ~ In_Temp+In_Humi+In_CO2+In_Illu+In_LP+Out_Temp+Out_Humi,dataUSE1)

> IG.CORElearn
   In_Temp    In_Humi     In_CO2    In_Illu      In_LP   Out_Temp   Out_Humi 
0.04472928 0.02705100 0.09305418 0.35064927 0.44299167 0.01832216 0.05551973 
> IG.RWeka
   In_Temp    In_Humi     In_CO2    In_Illu      In_LP   Out_Temp   Out_Humi 
0.11964771 0.04340197 0.12266724 0.38963327 0.44299167 0.03831816 0.07705798 
> IG.FSelector
         attr_importance
In_Temp       0.08293347
In_Humi       0.02919697
In_CO2        0.08411316
In_Illu       0.27007321
In_LP         0.30705843
Out_Temp      0.02656012
Out_Humi      0.05341252

Perché i risultati del calcolo di ciascun pacchetto sono diversi? E quale è giusto?

Risposte:


2

Questa non è una risposta completa alla tua domanda, ma posso spiegare almeno una parte del problema. Dato che non fornisci i tuoi dati, non riesco a riprodurre i tuoi risultati. Tuttavia, è facile dimostrare lo stesso problema con altri dati. Userò il noto set di dati dell'iride fornito con R e Weka ed è di facile accesso.

Lo stesso problema è evidente con i dati dell'iride.

library(CORElearn)
library(RWeka)
library(FSelector)
IG.CORElearn <- attrEval(Species ~ ., data=iris,  estimator = "InfGain")
IG.RWeka     <- InfoGainAttributeEval(Species ~ ., data=iris,)
IG.FSelector <- information.gain(Species ~ ., data=iris,)

IG.CORElearn
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   0.5572327    0.2831260    0.9182958    0.9182958 

IG.RWeka 
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   0.6982615    0.3855963    1.4180030    1.3784027 

IG.FSelector
             attr_importance
Sepal.Length       0.4521286
Sepal.Width        0.2672750
Petal.Length       0.9402853
Petal.Width        0.9554360

Come nel tuo esempio, tutti e tre i pacchetti danno risultati completamente diversi.

Un problema: Unità (Base del logaritmo)

Se guardi la documentazione di information.gainin FSelector, vedrai questa descrizione del parametro:

unità
Unità per il calcolo dell'entropia (passata all'entropia). L'impostazione predefinita è "registro".

Seguendo questa traccia, osserviamo la descrizione della funzione entropia e vediamo:

unità
l'unità in cui viene misurata l'entropia. L'impostazione predefinita è "nats" (unità naturali). Per calcolare l'entropia in "bit" impostare unit = "log2".

Se sostituiamo il valore predefinito e calcoliamo IG usando unit = "log2", otteniamo

IG.FSelector2 <- information.gain(Species ~ ., data=iris, unit="log2")
IG.FSelector2 
             attr_importance
Sepal.Length       0.6522837
Sepal.Width        0.3855963
Petal.Length       1.3565450
Petal.Width        1.3784027

Si noti che ora i valori di Information Gain sono in accordo con RWeka per Sepal.Width e Petal.Width. Parte della differenza stava semplicemente usando una base diversa per il logaritmo. RWeka utilizza la base 2 (entropia misurata in bit). Per impostazione predefinita, FSelector utilizza base e , ma consente di modificare la base e ottenere alcuni degli stessi risultati. Dalla documentazione risulta che né RWeka né CORElearn consentono di selezionare la base per il logaritmo.

Ma è quasi strano che una volta che abbiamo RWeka e FSelector nelle stesse unità, siano d'accordo su due variabili, ma non le altre due. C'è ancora qualcos'altro in corso.


0

Aggiungendo alla [risposta di G5W] [ https://datascience.stackexchange.com/a/16249/29575] che FSelector (e forse anche le altre implementazioni) esegue una discretizzazione delle funzionalità prima di calcolare i punteggi.

Per FSelector, questo viene fatto nel file selector.info.gain.R. Puoi controllare la discretizzazione con FSelector:::discretize.all. Questo passaggio rimuove le informazioni nella misura in cui l'ordine delle funzioni viene modificato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.