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
Osztályozás
Példák osztályozási feladatra
Fiatal
Középkorú
Idős
Adatnagyság:
Osztályozó változó:
Attributumok:
Forrás: http://aps.umn.edu
Osztályozási hatékonyság metrika Bináris esetre
Többosztályos esetben visszavezetés binárisra
Osztályozó módszerek
Naív Bayes Osztályozó
prediction input: d(a1,a2,....am)
C = c1,c2,..,ck
prediction output: cwin
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) }
Laplace Simítás
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
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()
Döntési fa
Szabály alapú döntés:
ID3 Döntési fa
Attibútum választás algoritmusa
ID3 Fa tulajdonságai
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])
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)
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()
Véletlenszerű erdő
K legközelebbi szomszéd(K-nearest neighbor, K-NN)
Amelyik osztálycímke szerepel legtöbbször a legközelebbi szomszédok esetében, azt rendeljük a tesztadathoz
A távolság alapján súlyozzuk a szavazatokat, a jobbat (kisebb távolságot eredményező) címkét választjuk
Problémái
SVM (Support Vector Machine) osztályozó
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()
Mit csinálunk az eredménnyel?
Interpretálás: