2011-11-21 14 views
5

Sto cercando di utilizzare knn in R (usato diversi pacchetti (knnflex, class)) per prevedere la probabilità di default basata su 8 variabili. Il set di dati è di circa 100k linee di 8 colonne, ma la mia macchina sembra avere difficoltà con un campione di 10k linee. Qualche suggerimento per fare knn su un set di dati> 50 righe (es. iris)?Set di dati knn large

EDIT:

Per chiarire ci sono un paio di questioni.

1) Gli esempi nei pacchetti class e knnflex sono un po 'poco chiaro e io ero curioso di sapere se ci fosse qualche implementazione simile al pacchetto foresta casuale in cui si dà la variabile che si desidera prevedere e i dati che si desidera utilizzare per il training del modello:

RF <- randomForest(x, y, ntree, type,...) 

poi girarsi e utilizzare il modello per prevedere i dati utilizzando il set di dati di test:

pred <- predict(RF, testData) 

2) io non sono davvero capire perché knn vuole trainin g E dati di test per la costruzione del modello. Da quello che posso dire, il pacchetto crea una matrice ~ su nrows(trainingData)^2 che sembra essere anche un limite superiore alla dimensione dei dati previsti. Ho creato un modello utilizzando 5000 righe (sopra a # ho ottenuto errori di allocazione della memoria) e non sono stato in grado di prevedere i set di test> 5000 righe. Così avrei bisogno di uno:

a) trovare un modo per utilizzare> 5000 linee in un training set

o

b) trovare un modo per utilizzare il modello sulle piene 100k linee.

+0

Basta chiedersi, fino a che punto è riuscito a spingere questo - in termini di dimensioni del set di allenamento? – ktdrv

+0

@ktdrv: credo di essere riuscito a eseguire l'intero set di dati. Vorrei raccomandare l'implementazione knn nel pacchetto 'caret' per 2 motivi. Prima consente di sintonizzare il parametro 'k'. In secondo luogo, è il modello knn più veloce che ho usato e consente la parallelizzazione (anche se non ho visto un enorme pick-up per roba intricata). Ecco una buona serie di spiegazioni ed esempi per ottenere installato e funzionante: http://www.jstatsoft.org/v28/i05/paper – screechOwl

risposta

8

La ragione per cui knn (in classe) chiede sia per la formazione e dati di test è che se così non fosse, il "modello" sarebbe tornare sarebbe semplicemente i dati formazione stessa.

I dati di allenamento sono il modello.

per fare previsioni, knn calcola la distanza tra l'osservazione di test e ogni osservazione formazione (anche se suppongo ci sono alcune versioni di fantasia per follemente grandi insiemi di dati che non controllare ogni distanza). Quindi, fino a quando non si hanno osservazioni di prova, non c'è davvero un modello da costruire.

Il pacchetto ipred fornisce funzioni che appaiono strutturate come descrivete, ma se le guardate, vedrete che sostanzialmente non sta accadendo nulla nella funzione "allenamento". Tutto il lavoro è nella funzione "prevedere". E quelli sono realmente intesi come wrapper da usare per la stima dell'errore usando la validazione incrociata.

Per quanto riguarda le limitazioni sul numero di casi, ciò dipenderà dalla quantità di memoria fisica disponibile. Se stai ricevendo errori di allocazione di memoria, allora dovreste aver bisogno di ridurre l'utilizzo di RAM altrove (applicazioni stretti, ecc), comprare più RAM, acquistare un nuovo computer, ecc

La funzione knn in classe funziona benissimo per me con set di dati di allenamento e test di 10k righe o più, anche se ho 8 GB di RAM.Inoltre, ho il sospetto che knn in classe sarà più veloce rispetto a knnflex, ma non ho fatto test approfonditi.

+0

Grazie per i suggerimenti. Cose come big.matrix o ff sono efficaci work-arounds? – screechOwl

+0

@acesnap Forse; In realtà non ho molta esperienza con questi strumenti. Se fossi nei tuoi panni, avrei semplicemente rotto il mio set di prova nei pezzi più grandi che "knn" gestirà e renderà le previsioni un pezzo alla volta. (E compra più RAM, è abbastanza economico!) – joran

+0

avevi ragione riguardo alla versione 'classe' che sta meglio. Ho solo bisogno di lavorare un po 'sul formato. Grazie ancora per il tuo aiuto e la tua spiegazione. – screechOwl