====== Eksploracja Danych: Laboratorium 12 ====== Podczas zajęć będziemy korzystali z funkcji biblioteki Weka wołanych programowo z kodu Java. {{ :med:ed-lab12.pdf | Opis zadań (PDF)}} :!: [[https://youtu.be/Eu1b1zgzd9Q|Prezentacja na YouTube ]] [24.53] ===== Zbiory danych ===== [[http://home.agh.edu.pl/~pszwed/wiki/doku.php?id=med:datasets&#laboratorium_6_grupowanie_klasyfikacja|Dwuwymiarowe obserwacje]] ===== Weka ===== Należy pobrać archiwum [[http://prdownloads.sourceforge.net/weka/optics_dbScan1.0.5.zip?download]] i dodać plik optics_dbScan.jar do projektu. ===== Kod ===== Import import weka.clusterers.SimpleKMeans; import weka.clusterers.Clusterer; import weka.clusterers.DBSCAN; import weka.clusterers.EM; import weka.core.Instances; import weka.core.Utils; import weka.core.converters.ConverterUtils; import weka.filters.Filter; import weka.filters.unsupervised.attribute.Add; import weka.gui.visualize.VisualizePanel; Załadowanie pliku ConverterUtils.DataSource source = new ConverterUtils.DataSource("cl-001.arff"); Instances data = source.getDataSet(); Klasteryzacja SimpleKMeans cls = new SimpleKMeans(); cls.setNumClusters(3); cls.setPreserveInstancesOrder(true); cls.buildClusterer(data); Utworzenie nowego zbioru danych z atrybutem wyjściowym. W analogiczny sposób wołamy dowolny filtr Weka Add filter = new Add(); filter.setAttributeIndex("last"); int num = cls.numberOfClusters(); String labels = "cluster0"; for(int i=1;i Dodanie etykiet int idx = newData.numAttributes()-1; for(int i=0;i Wizualizacja void visualize(Instances data, String title){ JFrame jf = new JFrame(title); jf.getContentPane().setLayout(new BorderLayout()); VisualizePanel vp = new VisualizePanel(); vp.setShowClassPanel(true); jf.getContentPane().add(vp, BorderLayout.CENTER); jf.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { jf.dispose(); System.exit(0); } }); jf.pack(); jf.setSize(600, 450); jf.setVisible(true); vp.setInstances(data); } Wyniki dla k-means Instances centroids = cls.getClusterCentroids(); for(int i=0;i DBSCAN DBSCAN cls = new DBSCAN(); cls.setMinPoints(3); cls.setEpsilon(0.1); cls.buildClusterer(data); Wyniki dla EM System.out.println(cls); *Aby obliczyć log-likehood: należy iterować po instancjach i zsumować ''cls.logDensityForInstance(data.get(i));'' Może się przydać: [[http://stackoverflow.com/questions/11272938/how-to-save-panel-as-image-in-swing|Jak zapisać panel jako obrazek...]]