====== 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());