Metody Eksploracji Danych: Laboratorium 5

Podczas zajęć będziemy korzystali z funkcji biblioteki Weka wołanych programowo z kodu Java.

Opis zadań (PDF)

Zapoznaj się z treścią

Zbiory danych

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:

5.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

5.1.3

Classifier cls = new NaiveBayes();
cls.buildClassifier(data);

Instancja do sklasyfikowania

5.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		

5.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]);

5.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);

5.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);
 }
}

5.2.4

ArffSaver saver = new ArffSaver();
saver.setInstances(result);
saver.setFile(new File("c-001-result.arff"));
saver.writeBatch();

5.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());
med/lab_5.txt · Last modified: 2018/05/12 23:27 by pszwed
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0