Adatbányászati technikák 4. labor

Katona Gyula (kiskat@cs.bme.hu), Tóth Ágnes (tothagi@cs.bme.hu)

Március 31.,  csütörtök 8:15-9:45, R4M labor


Órai feladatok:  Bayes hálók, neurális hálók, SVM (support vector machine)


További osztályozók:
  1. Indítsuk el a WEKA-t (D:/Program Files/weka ...).
  2. Töltsük be az előző gyakorlaton is használt bank-data-train.arff fáljt.
  3. Az osztályozók közül válasszuk ki a bayes/NaiveBayes algoritmust, elemezzük az eredményt (feltételes valószínűségek, jósági mutatók).
  4. A NaiveBayes paraméterei: displayModelInOldFormat - a kimeneti modell formátumát befolyásolja; useKernelEstimator - numerikus értékek esetén a normális eloszlás helyett ezt a módszert is használhatjuk az valószínűségek becslésére (Kernel density estimator); useSupervisedDiscretization - numerikus értékekre alkalmazzunk-e diszkretizálást az algoritmus futtatása előtt.
    Próbáljuk ki a különböző paraméterek hatását.
  5. A következó osztályozónk a sokkal összetettebb BayesNet, futtasuk le és vizsgáljuk meg a kimeneti eredményt (felépített háló struktúrája, jósági mutatók a hálóhoz és a modellhez).
  6. A BayesNet fontosabb paraméterei: BIFFile - kezdeti hálóstruktúra megadható BIF formátumú fájlból, ha így végezzük a tanítást, a kezdeti és a végső háló közötti eltérésekről is kapunk majd információt; estimator - itt adhatjuk meg a hálóhoz tartozó feltételes valószínűségeket meghatározó algoritmust; searchAlgorithm - a háló struktúrájának keresését végző módszert választhatjuk ki itt; useADTree - egy módszer a tanítási idő csökkentésére, nagy a memóriaigénye.
    A háló struktúrájának tanulásához először el kell döntenünk, hogyan járjuk be a lehetséges hálók terét (illetve annak egy részét), erre példa a HillClimber - kicsit változtat a struktúrán úgy, hogy a kapott háló a beállított mérték szerint a jobb legyen, mint a kiindulási háló, majd ezt ismétli; vagy ennek különböző változatai: K2, RepeatedHillClimer; további módszer a TabuSearch - nem lépünk vissza az utolsó néhány állapotba, és a SimulatedAnnealing - rosszabb állapotba is léphetünk, de csak bizonyos csökkenő valószínűséggel.
    Az éppen aktuális háló jóságának mérésére is több lehetőségünk van: Bayes, BDeu, Minimum Description Length (MDL), Akaike Information Criterion (AIC) és Entropy értékek közül választatunk.
    A feltételes valószínűségek becslésére használhatjuk a SimpleEstimator, mely egyszerűen az adathalmazból olvassa ki a valószínűségeket, vagy a BayesNetEstimator-t, BMAEstimator-t, MultiNominalBMAEstimator-t, melyek Bayes hálókra kifejleszett becslő eljárások (BMA: Bayesian model averaging).
    Próbálgassuk a paramétereket, érjünk el minél jobb eredményt.
  7. Neurális háló alapú osztályozó a functions/MultiLayerPerceptron. Próbáljuk ki (ez több ideig tart, mint az előzőek), nézzük meg az eredményt (neurális háló leírása, jósági mutatók).
  8. Az algoritmus paramétereként megadható: hiddenLayers - a rejtett rétegek száma szintenként vesszővel elválasztva ('a'=(attribs+classes)/2,'i'=attribs,'o'=classes,'t'=attribs+classes); learningRate és momentum - a neurális háló tanulásnál a visszacsatolás paraméterei; nominalToBinaryFilter, mormalizeAttributes, normalizeNumericClass - az előfeldolgozást befolyásoló paraméterek, javíthatják az algoritmus eredményességét; reset - romló megoldás esetén újraindítás engedélyezése; trainingTime - tanulási körök maximális száma.
    A paraméterek módosításával érjünk el minél jobb ROC értéket.
  9. A functions/SMO egy SVM (support vector machine) alapú osztályozást valósít meg, próbáljuk ki ezt is. Legfontosabb paramétere a C, az új tér komplexitását leíró paraméter, valamint az új térben a pontok távolságát megadó kernel függvény. (Az epsilon értéke a hibaszámolást módosítja, de csak regressziónál van értelme, itt nem érdemes módosítani.)
  10. Hasonlítsuk össze az egyes módszerekkel kapott ROC értékeket.

KnowledgeFlow
  1. A WEKA főmenüjében válasszuk ki a KnowledgeFlow-t. (Az Explorerrel és a Simple CLI-vel egy szinten.)
  2. A következőkben az alábbi adatbányász folyamot fogjuk felépíteni. Általános szabály az építéshez, hogy az új elemet először ki kell jelölnünk, majd egy újabb kattintással rakhatjuk fel a vászonra. Az összekötő nyilak felvételéhez a forrás objektumon jobb kattintás után választhatjuk ki a küldeni kívánt adatot, majd ezt követően kattinthatunk a cél objektumra. A feldolgozó egységek paramétereit jobb kattintás után a Configure... menüben állíthatjuk be.
  3. knowledgeflow
  4. Vegyünk fel egy ArffLoader-t (DataSoruces), és adjuk meg neki paraméterül a bank-data-train.arff fájlt. Továbbá vegyünk fel egy Discretize és egy Remove elemet a Filters palettáról. Az ArffLoader-ből küldjük át a dataSet adathalmazt a Discretize-nak, majd onnan tovább a Remove-nak. Az előbbi feldolgozó egységben állítsuk be, hogy a 4. attribútumot (income) ossza 10 intervallumba. Az utóbbi elem segítségével pedig töröljük ki a 2. attribútumot (sex).
  5. Tovább folytatva a Remove-ból küldjük tovább a dataSet-et egy ClassAssigner-be (Evaluation fül), ebben megadhatjuk, hogy melyik attribútum az osztályváltozó. Az alapbeállítás az utolsó (last), ez számunkra megfelel.
  6. Vegyünk fel egy CrossValidaton FoldMaker-t (Evaluation), és az előbbi csomópontból küldjük át ide az adathalmazt. Az ebben lévő alapbeállításokon se változtassunk most.
  7. Adjunk a palettához három osztályozót: J48, OneR, NaiveBayes (Classifiers paletta különböző részeiről). Egyelőre használjuk őket alapbeállításokkal. A keresztkiértékelést segítő csomópontból küldjük át a tanító (trainingSet) és a tesztelő (testSet) adatokat is mind a három osztályozónak.
  8. Az osztályozók után kössünk egy-egy ClassifierPerformanceEvaluator-t (Evaluation), és küldjük ide a batchClassifier adatot. A teljesítmény elemzők text kimenetét vezessük egy közös TextViewer (Visualization) csomópontba.
  9. Futtassuk le a kész folyamot: jobb gomb az ArffLoader-re és Start loading. Lent, a Status és Log ablakokban nyomon követhetjük az adat feldolgozásának menetét. Majd elemezhetjük az modellek jósági mutatóit tartalmazó kimutatást: jobb gomb a TextViewer-re és Show results.
  10. Egészítsük ki a gráfot további csomópontokkal. A ClassifierPerformanceEvaluator thresholdData kimenetét irányítsuk egy ModelPerformanceChart (Visualization) elembe. A J48 döntési fa osztályozó graph kimenetét pedig kössük egy GraphViewer (Visulazation) objektumra. Nézzük meg az általuk előállított kimeneteket.

A nagyházi feladat 2. része itt található.

Kiegészítő feladat: A névtábla problémája

  1. Egy adatbányászati konferencián minden részvevő névtábláján szerepelt egy + vagy egy - jel is, ami kizárólag a névtől függött.
    A feladat annak kitalálása, hogy milyen szabály alapján rendelték a nevekhez a jeleket.
  2. Az adatok itt találhatóak.