Podczas zajęć będziemy korzystali z funkcji biblioteki Weka wołanych programowo z kodu Java. :
Prezentacja na YouTube (dawniej laboratorium miało numer 5)
Laboratotrium 8 część 1 (6.23)
Laboratotrium 8 część 2 (17.38) Poprawiony link
Zapoznaj się z treścią
Zbiory danych - dwuwymiarowym obserwacjom X1 i X2 przypisana jest etykieta klasy (atrybut nominalny Y)
Brak specjalnych wymagań
Biblioteka weka.jar: /opt/weka/weka.jar
usr/local/bin
jest dostępne Eclipse Neonweka.jar
Dostępne są także
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<Attribute> 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());