Ho un file contenente i vettori di dati, in cui ogni riga contiene un elenco di valori separati da virgole. Mi chiedo come eseguire k-means in clustering su questi dati usando il mahout. L'esempio fornito nel wiki menziona la creazione di sequenceFiles, ma in caso contrario non sono sicuro di dover eseguire qualche tipo di conversione per ottenere questi file sequenza.Come eseguire il clustering k-means in mahout con i dati vettoriali memorizzati come CSV?
risposta
Si consiglia di leggere manualmente le voci dal file CSV, creare NamedVectors da esse e quindi utilizzare un file writer di sequenza per scrivere i vettori in un file di sequenza. Da lì in poi, il metodo di esecuzione di KMeansDriver dovrebbe sapere come gestire questi file.
I file di sequenza codificano coppie chiave-valore, quindi la chiave sarebbe un ID del campione (dovrebbe essere una stringa) e il valore è un wrapper VectorWritable attorno ai vettori.
Ecco un esempio di codice semplice su come fare questo:
List<NamedVector> vector = new LinkedList<NamedVector>();
NamedVector v1;
v1 = new NamedVector(new DenseVector(new double[] {0.1, 0.2, 0.5}), "Item number one");
vector.add(v1);
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(config);
Path path = new Path("datasamples/data");
//write a SequenceFile form a Vector
SequenceFile.Writer writer = new SequenceFile.Writer(fs, config, path, Text.class, VectorWritable.class);
VectorWritable vec = new VectorWritable();
for(NamedVector v:vector){
vec.set(v);
writer.append(new Text(v.getName()), v);
}
writer.close();
Inoltre, vorrei raccomandare la lettura del capitolo 8 Mahout in Action. Fornisce maggiori dettagli sulla rappresentazione dei dati in Mahout.
il capitolo 8 è un campione gratuito! http://manning.com/owen/MiA_SampleCh08.pdf –
Sai come posso recuperare i nomi dei vettori dai risultati del clustering? Vedi http://stackoverflow.com/questions/14476706/dumping-clustering-result-with-vectors-names – exic
C'è un piccolo errore nel tuo esempio (grazie per averlo pubblicato, BTW). Invece di "writer.append (new Text (v.getName()), v);" Penso che debba essere "write.append (new Text (v.getName()), vec);". Altrimenti si ottiene un'eccezione dicendo "java.io.IOException: errata classe di valore: org.apache.mahout.math.NamedVector non è class org.apache.mahout.math.VectorWritable" – user311121
forse si potrebbe usare uccello elefante di scrivere vettori in formato mahout
https://github.com/kevinweil/elephant-bird#hadoop-sequencefiles-and-pig
- 1. Mahout: CSV per il vettore e l'esecuzione del programma
- 2. mahout lucene documento clustering howto?
- 3. come interpretare i dati IRStatisticsImpl in mahout
- 4. punti cluster dopo il clustering KMeans (scikit learn)
- 5. Come mantenere l'ID di immissione dati in Mahout K-significa clustering
- 6. Come vengono memorizzati i dati in lucene
- 7. Python KMeans parole di raggruppamento
- 8. NA in funzioni di clustering (kmeani, pam, clara). Come associare i cluster ai dati originali?
- 9. Classificare i dati usando Apache Mahout
- 10. Come posso eseguire i blocchi memorizzati in un NSDictionary?
- 11. Come leggere i dati CSV con codifica sconosciuta in R
- 12. Scikit-learn: come eseguire KMeans su un array monodimensionale?
- 13. Come vengono memorizzati i dati in un file immagine
- 14. Come installare mahout usando il server ambari
- 15. creazione tabella con i dati csv
- 16. Clustering - Vettore sparse e vettore denso
- 17. Come calcolare BIC per k-means clustering in R
- 18. Kmeans R (statistiche) vs Kmeans (AMAP)
- 19. clustering con valori NA in R
- 20. Come vengono memorizzati i dati negli appunti di Windows
- 21. Come usare Mahout in un ambiente Windows?
- 22. Interrogare mysql ed esportare i dati come CSV in PHP
- 23. Dove/come vengono memorizzati i dati di previsione delle diramazioni?
- 24. come sono memorizzati i dati mysql sul disco?
- 25. Come faccio a visualizzare i punti dati dei vettori tf-idf per il clustering dei kmea?
- 26. Dove sono memorizzati i dati di stringa?
- 27. Matlab: K-significa clustering
- 28. convertire i dati csv in DataBase in VB.net
- 29. cv2.kmeans in Python
- 30. Come calcolare le distanze tra centroidi e matrice di dati (per algoritmo kmeans)
Avete bisogno di utilizzare mahout per questo o sarà niente fare? Ci sono un sacco di API, strumenti, codice di esempio ecc. Che lo farebbero facilmente. Se hai un singolo file i tuoi punti dati potrebbero essere piuttosto piccoli, in teoria Mahout è pensato per problemi su larga scala. – Steve
Sto osservando i set di dati di clustering da qui: http://www.grouplens.org/node/73 Il set di dati più grande contiene potenzialmente 10.000 per 72.000 punti di dati. Ecco perché ho pensato che potrebbe essere meglio mahout, WEKA si blocca quando provo a caricare i set di dati più piccoli –
Prova http://glaros.dtc.umn.edu/gkhome/software, Weka ha anche un SDK. k-means è abbastanza semplice da implementare nella maggior parte delle lingue quindi sono sicuro che puoi trovare alcuni frammenti di codice su google – Steve