====== Eksploracja Danych: Laboratorium 8 ====== Podczas zajęć będziemy korzystali z funkcji biblioteki Weka wołanych programowo z kodu Java. : {{ :med:ed-lab08.pdf |Opis zadań (PDF)}} :!: Prezentacja na YouTube (dawniej laboratorium miało numer 5) [[https://youtu.be/uutIrXYbV5w| Laboratotrium 8 część 1 (6.23)]] [[https://youtu.be/6gSbj9EyD7I| Laboratotrium 8 część 2 (17.38)]] :!: Poprawiony link Zapoznaj się z treścią *{{:med:med-w05.pdf|Wykładu 4: ogólny opis zagadnienia klasyfikacji oraz regresja logistyczna}} *{{:med:med-w05.pdf|Wykładu 5: naiwny mode Bayesa i drzewa decyzyjne}} *{{:med:med-w06.pdf|Wykładu 6: Support Vector Machines i k-NN}} ===== Zbiory danych ===== [[http://home.agh.edu.pl/~pszwed/wiki/doku.php?id=med:datasets#laboratorium_5_klasyfikacja_proste_dwuwymiarowe_obserwacje|Zbiory danych]] - dwuwymiarowym obserwacjom X1 i X2 przypisana jest etykieta klasy (atrybut nominalny Y) ===== Weka ===== Brak specjalnych wymagań Biblioteka weka.jar: ''/opt/weka/weka.jar'' ===== IDE ===== * W ''usr/local/bin'' jest dostępne Eclipse Neon * Utwórz projekt * Wybierz: //Project -> Properties -> Java Build Path.// Następnie zakładkę //Libraries// i opcję //Add External JARs//. Dodaj bibliotekę ''weka.jar '' Dostępne są także *IntelliJ *Netbeans ===== Kod ===== Fragmenty kodu: 8.1.1 DataSource source = new DataSource("c-001.arff"); Instances data = source.getDataSet(); if (data.classIndex() == -1) data.setClassIndex(data.numAttributes() - 1); Utworznenie i uczenie klasyfikatora 8.1.3 Classifier cls = new NaiveBayes(); cls.buildClassifier(data); Instancja do sklasyfikowania 8.1.4 Instance inst = new DenseInstance (3); inst.setDataset (data); inst.setValue(0, 1.1); // wartośc dla X1 inst.setValue(1, 2.2); // wartość dla X2 8.1.5/6 double y = cls.classifyInstance(inst); double[] distrib = cls.distributionForInstance(inst); System.out.printf(Locale.US,"%d->%f %d->%f\n",0,distrib[0],1,distrib[1]); 8.2.2 List atts = Arrays.asList( new Attribute("X1"), new Attribute("X2"), new Attribute("Y",Arrays.asList("tak","nie"))); Instances result = new Instances("some-relation", new ArrayList<> (atts),0); result.setClassIndex(result.numAttributes()-1); 8.2.3 for(double x1=-10;x1<=10;x1+=0.1){ for(double x2=-10;x2<=10;x2+=0.1){ Instance inst = new DenseInstance(3); inst.setValue(0, x1); inst.setValue(1, x2); inst.setDataset(result); double y = cls.classifyInstance(inst); inst.setClassValue(y); result.add(inst); } } 8.2.4 ArffSaver saver = new ArffSaver(); saver.setInstances(result); saver.setFile(new File("c-001-result.arff")); saver.writeBatch(); 8.4.2 Classifier cls; cls = new NaiveBayes(); Evaluation eval = new Evaluation(data); eval.crossValidateModel(cls, data, 10, new Random(1)); eval.toSummaryString() eval.confusionMatrix() System.out.printf(Locale.US, "[prec recall fmeasure]:\t%f\t%f\t%f\n", eval.weightedPrecision(), eval.weightedRecall(), eval.weightedFMeasure());