1 of 31

Adatbányászat alapjai

Felügyelt tanulás

Prof. Dr. Kovács László diái alapján

Kunné Dr. Tamás Judit�2025/26/2

2 of 31

Osztályozás

  • Adott rekordok egy halmaza (tanító adatállomány)
    • Minden rekord attribútumok értékeinek egy halmazából áll, az attribútumok egyike (vagy némelyike) az ún. osztályozó változó (osztály vagy kategória).
  • Találjunk olyan modellt az osztályozó attribútumra, amely más attribútumok függvényeként állítja elő.
  • Cél: korábban nem ismert rekordokat kell olyan pontosan osztályozni ahogyan csak lehetséges, tehát meg kell jósolni az osztályba tartozást.
    • Bináris, ha két osztály lehet a jósolt eredmény (Például: Körte, Nem körte; )
    • Többosztályos, ha több mint kettő osztály van (pl. Képen látható gyümölcs körte, szilva vagy cseresznye)

​

3 of 31

Példák osztályozási feladatra

  • Osztályozzuk az országokat éghajlatuk alapján (szárazföldi, mediterrán, trópusi), úgy hogy mérjük az évi középhőmérsékletet, csapadékot, stb.
  • Az autók márkája, kora, súlya, mérete, stb. ismeretében osztályozzuk az autókat, hogy mennyi az éves szervízköltség (sok, közepes, kevés)
  • a levelezés költség csökkentése azon ügyfelek halmazának megcélzásával akik valószínűleg megvásárolják az új telefont a foglalkozás, lakhely, fizetés értékek alapján (demográfiai adatok, életstílus, stb)

​

​

​

​

4 of 31

  • Csalásnak tűnő esetek előrejelzése hitelkártya tranzakciónál a hitelkártya történet és a számlatulajdonos információi alapján, a korábbi tranzakciókat felcímkézzük (csalás, jó) és ezekre betanítunk egy modellt, ami a jövőben a tranzakciónál előrejelezzük a csalást
  • Ügyfél elvesztésének előrejelzése az összes múlt és jelenlegi ügyfélhez kapcsolódó tranzakció alapján (milyen gyakran telefonál, hol telefonál, melyik napszakban, pénzügyi helyzete, családi állapota, stb), így az ügyfeleket cimkézzük hűségesnek vagy hűtlennek
  • Égboltfelmérés katalógizálása, tehát égi objektumok osztályainak (csillag vagy galaxis) előrejelzése, figyelembe véve még az alig láthatóakat is
    • Sikeres: 16 új vörös-eltolódású kvazárt találtak, amely a legtávolabbi objektumok egyike és nehéz megtalálni

5 of 31

  • Galaxisok osztályozása

Fiatal

Középkorú

Idős

Adatnagyság:

  • 72 millió csillag, 20 millió galaxis
  • Objektum katalógus: 9 GB
  • Kép adatbázis: 150 GB

Osztályozó változó:

  • Az alakzat állapotai

Attributumok:

  • Képi jellemzők
  • A vett fényhullámok karakterisztikája stb.

Forrás: http://aps.umn.edu

6 of 31

Osztályozási hatékonyság metrika Bináris esetre

  •  

7 of 31

Többosztályos esetben visszavezetés binárisra

8 of 31

Osztályozó módszerek

9 of 31

Naív Bayes Osztályozó

  • Valószínűségi alapú módszer
  • a kategória maximális valószínűséggel történő kiszámítása az attribútumok alapján
  • a valószínűségi értékek közvetlen kiszámítása
  • Az összes kategória felsorolása
  • függetlenség feltételezése
  • egyszerű módszer
  • gyors végrehajtás

prediction input: d(a1,a2,....am)

C = c1,c2,..,ck

​

prediction output: cwin

10 of 31

c|d ritka esemény

Alakítsuk át P(d|c) komponensekké

Számítsuk ki az P(a|c)

a|c gyakoribb esemény

Tesztelje az összes kategóriát a kiszámításhoz P(c|d)

cw = argmaxc { P(c|d)}

cw = argmaxc { P(d|c) P(c) / P(d)} cw = argmaxc { P(d|c) P(c) }

​

cw = argmaxc { P(a1 a2 a3 .. |c) P(c) }

cw = argmaxc { P(a1 |c) P( a2 |c) P(a

3

|c) .. P(c) }

11 of 31

12 of 31

Laplace Simítás

  • Ritka események esetén
  • P(a|c) nulla, hamis eredményeket tud adni
  • Ne lehessen nulla
  • P’(a | c) = (1+freqac) / (1 + freqc)
  • Összegzés hackelés
  • Szorzás az összegzés helyett
    • Csak valószínűségi helyzetekben

​

13 of 31

Python kód

iris = datasets.load_iris() gnb = GaussianNB()

y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)

​

for i in range(len(iris.target)):

print (iris.data[i], iris.target[i],y_pred[i])

​

acc = 1. - (iris.target != y_pred).sum() acc = 1.- acc / len(iris.target)

print (acc)

pl.scatter([ x[0] for x in iris.data], [ x[1] for x in iris.data] , c=[ x for x in (y_pred == iris.target)])

from sklearn import datasets

from sklearn.naive_bayes import GaussianNB import matplotlib.pyplot as pl

14 of 31

from sklearn import datasets

from sklearn.naive_bayes import GaussianNB import matplotlib.pyplot as pl

​

iris = datasets.load_iris() gnb = GaussianNB()

y_pred = gnb.fit(iris.data, iris.target).predict(iris.data) for i in range(len(iris.target)):

print (iris.data[i], iris.target[i],y_pred[i])

​

pl.scatter([ x[0] for x in iris.data], [ x[1] for x in iris.data] , c=[ x for x in iris.target])

print ("---------------------")

acc = (iris.target != y_pred).sum() acc = 1.- acc / len(iris.target) print (acc)

pl.scatter([ x[0] for x in iris.data], [ x[1] for x in iris.data] , c=[ x for x in (y_pred == iris.target)])

pl.show()

15 of 31

16 of 31

Döntési fa

Szabály alapú döntés:

  • Egy szabály adott attribútumértékekhez rendeli a kategóriát
  • több eredmény a csomópontokon
  • Az elemi szabályok hierarchiája
  • döntés a levélcsomópontokban
  • A cél a fa magasságának minimalizálása
  • könnyen értelmezhető
  • gyors előrejelzés
  • Nehéz módosítani

17 of 31

ID3 Döntési fa

  • Címkézett tanító halmaz
  • Minden csomópont hozzá van rendelve egy attribútumhoz
  • A gyermekcsomópontok különböző attribútumértékeknek felelnek meg
  • Leállási feltétel: homogén kategória
  • Az útvonal mentén egyetlen attribútum sem ismételhető meg
  • Optimális attribútum: a legjobb homogenitás

18 of 31

Attibútum választás algoritmusa

  • a legjobb homogenitást biztosítja�minimális entrópiát biztosít a kategóriacímkék tekintetében
  • Az összes attribútum tesztelése
  • Súlyozott entrópia érteket számol ki
  • minimális famagasság

19 of 31

ID3 Fa tulajdonságai

  • magasság <= attribútumok száma�A folytonos tartományokat először diszkretizálni kell�véletlenszerű faszerkezet�nehezen módosítható

20 of 31

ID3 Python kód

​

bdata = [] bdata.append([12,800,1]) bdata.append([20,600,1]) bdata.append([2.0,800,0]) bdata.append([115,4000,0])

…..

bdata.append([80,800,0]) bdata.append([22,1800,0]) bdata.append([28,1000,1]) bdata.append([109,600,0]) bdata.append([60,1100,0]) bdata.append([50,900,0]) db = len(bdata)

pl.scatter([ x[0] for x in bdata],[ x[1] for x in bdata],c=[ x[2] for x in bdata])

21 of 31

​

clf = tree.DecisionTreeClassifier()

clf.fit([ x[0:2] for x in bdata], [ x[2] for x in bdata])

​

​

tdata = [[20, 1000],[40,500],[100,2000]]

pp = clf.predict_proba(tdata)

co = [ 'red' if p[0]==1 else 'green' for p in pp] print(co)

#pl.scatter([ x[0] for x in tdata],[ x[1] for x in tdata],c= co)

​

​

tree.export_graphviz(clf, out_file = "ki.gr",

feature_names=["meret","suruseg"], class_names=["nem","labda"], filled=True, rounded=True, special_characters=True)

22 of 31

from sklearn import tree from sklearn import datasets

clf = tree.DecisionTreeClassifier()

​

iris = datasets.load_iris()

​

​

clf = clf.fit(iris.data, iris.target) y_pred = clf.predict(iris.data)

​

acc = (iris.target != y_pred).sum() acc = 1.- acc / len(iris.target) print (acc)

pl.scatter([ x[0] for x in iris.data], [ x[1] for x in iris.data] , c=[ x for x in (y_pred == iris.target)])

pl.show()

23 of 31

Véletlenszerű erdő

  • Együttes osztályozás
  • véletlenszerű faszerkezetek (különböző alapattribútum-készlet; különböző betanítási készletek)
  • többségi szavazás
  • Megnövelt pontosság

24 of 31

K legközelebbi szomszéd(K-nearest neighbor, K-NN)

  • A kategória a szomszédos elemek címkéiből kerül kiszámításra
  • Nagyban függ a távolság mértékétől
  • Közvetlen előrejelzés
      • Többségi szavazás:

Amelyik osztálycímke szerepel legtöbbször a legközelebbi szomszédok esetében, azt rendeljük a tesztadathoz

  • Súlyozott szavazás:

A távolság alapján súlyozzuk a szavazatokat, a jobbat (kisebb távolságot eredményező) címkét választjuk

​

​

25 of 31

Problémái

  • K kiválasztása (a szomszédság mérete)
  • Távolság kiszámítása
  • skálázás (normalizálás)
  • Szomszédok megtalálása
  • Lassú előrejelzés
  • Könnyen módosítható

26 of 31

SVM (Support Vector Machine) osztályozó

  • megtalálja a legjobb elválasztó síkot
  • Legnagyobb térrés (margin)
  • Hasonló a perceptron modellhez Korlátozott másodfokú optimalizálás
  • Komplex problémákra a kernel transzformációt használják
  • hatékony módszer

27 of 31

  • a térrés nagysága
  • optimalizálási feladat:

28 of 31

  • Nem mindig alkalmazhatunk szigorú elkülönítést
  • A térrés megsértése : slack változó minden adatponthoz

29 of 31

  • a nem lineárisan elválasztható problémák esetében az objektumokat egy magasabb térbe kell leképezni�Kernel funkciók

30 of 31

SVM Python kód

import numpy as np from sklearn import svm

from sklearn import datasets

​

iris = datasets.load_iris() X = np.array(iris.data)

y = np.array(iris.target)

clf = svm.SVC(gamma='scale', decision_function_shape='ovo') // ovr

clf.fit(X, y)

​

y_pred = clf.predict(X)

​

acc = (iris.target != y_pred).sum() acc = 1.- acc / len(iris.target) print (acc)

pl.scatter([ x[0] for x in iris.data], [ x[1] for x in iris.data] , c=[ x for x in (y_pred == iris.target)])

pl.show()

31 of 31

Mit csinálunk az eredménnyel?

Interpretálás:

  • célja, hogy a talált mintázatot fel lehessen használni, és hogy segítse az üzleti döntésben résztvevő személyeket.
  • Egyes módszerek könnyen magyarázhatóak, míg mások kevésbé

​