2013-04-25 28 views
6

Stavo cercando di usare il classificatore NaiveBayesUpdateable di Weka. I miei dati contiene attributi sia nominali e numerici:Java, Weka: come prevedere l'attributo numerico?

@relation cars 
    @attribute country {FR, UK, ...} 
    @attribute city {London, Paris, ...} 
    @attribute car_make {Toyota, BMW, ...} 
    @attribute price numeric %% car price 
    @attribute sales numeric %% number of cars sold 

Ho bisogno di prevedere il numero di vendite (numerico!) Sulla base di altri attributi.

Capisco che non posso usare l'attributo numerico per la classificazione Bayes in Weka. Una tecnica consiste nel dividere il valore dell'attributo numerico in N intervalli di lunghezza k e utilizzare invece l'attributo nominale, dove n è un nome di classe, come questo: @attribute class {1,2,3, ... N}.

Eppure attributo numerico che ho bisogno di prevedere intervalli da 0 a 1 000 000. Creare 1 000 000 classi non ha alcun senso. Come prevedere l'attributo numerico con Weka o quali algoritmi cercare nel caso in cui Weka non abbia strumenti per questo compito?

+0

Possibile duplicato di [Java, Weka: NaiveBayesUpdateable: Impossibile gestire la classe numerica] (http://stackoverflow.com/questions/15956537/java-weka-naivebayesupdateable-cannot-handle-numeric-class). Anche se potrebbe essere il contrario, questa è la domanda migliore. – demongolem

risposta

10

Quello che vuoi fare è regressione, non classificazione. La differenza è esattamente ciò che si descrive/mancanza:

  • Classificazione ha classi discrete/etichette, qualsiasi attributo nominale potrebbe essere utilizzato come classe qui
  • Regressione ha etichette continue, le classi sarebbe un termine sbagliato Qui.

La maggior parte delle tecniche basate sulla regressione può essere trasformata in una classificazione binaria definendo una soglia e la classe è determinata dal fatto che il valore previsto sia superiore o inferiore a questa soglia.

non so tutti i classificatori di WEKA che offrono la regressione, ma si può iniziare a guardare quei due:

Potrebbe essere necessario utilizzare il filtro NominalToBinary per convertire gli attributi nominali in valori numerici (binari).

0

In questi giorni, credo che la prima volta introdotta in Weka 3.7, RandomForest funzionerebbe esattamente come lo si desidera. Le caratteristiche possono essere un misto di nominali e numerici e la previsione può essere anche numerica.

Lo svantaggio (immagino nel tuo caso) è che non è una classe aggiornabile dato che NaiveBayesUpdateable funziona bene con grandi quantità di dati che potrebbero non essere tutti in una volta in memoria.