- A döntési fa a Felügyelt tanulási technika amely mind osztályozási, mind regressziós feladatokra használható, de leginkább osztályozási feladatok megoldására előnyös. Ez egy fa szerkezetű osztályozó, ahol A belső csomópontok egy adathalmaz jellemzőit, az ágak a döntési szabályokat képviselik és minden levélcsomópont az eredményt jelenti.
- Egy döntési fában két csomópont van, amelyek a határozati csomópont és Levélcsomópont. A döntési csomópontok bármilyen döntés meghozatalára szolgálnak, és több águk van, míg a levélcsomópontok ezeknek a döntéseknek a kimenetei, és nem tartalmaznak további ágakat.
- A döntéseket vagy a tesztet az adott adathalmaz jellemzői alapján végzik el.
- Döntési fának nevezik, mert a fához hasonlóan a gyökércsomóponttal kezdődik, amely további ágakra terjeszkedik és faszerű struktúrát hoz létre.
- Fa építéséhez használjuk a CART algoritmus, ami azt jelenti Osztályozási és regressziós fa algoritmus.
- Egy döntési fa egyszerűen feltesz egy kérdést, és a válasz alapján (Igen/Nem) tovább osztja a fát részfákra.
- Az alábbi diagram bemutatja a döntési fa általános felépítését:
Megjegyzés: A döntési fa tartalmazhat kategorikus adatokat (IGEN/NEM), valamint numerikus adatokat.
Miért érdemes a döntési fákat használni?
A gépi tanulásban különféle algoritmusok léteznek, ezért a gépi tanulási modell létrehozásakor az adott adathalmazhoz és problémához a legjobb algoritmus kiválasztása a legfontosabb szempont. Az alábbiakban bemutatjuk a döntési fa használatának két okát:
- A döntési fák általában az emberi gondolkodási képességet utánozzák döntéshozatal közben, így könnyen érthető.
- A döntési fa mögött meghúzódó logika könnyen érthető, mert faszerű struktúrát mutat.
Döntési fa terminológiái
Hogyan működik a döntési fa algoritmus?
Egy döntési fában az adott adathalmaz osztályának előrejelzéséhez az algoritmus a fa gyökércsomópontjából indul ki. Ez az algoritmus összehasonlítja a gyökérattribútum értékeit a rekord (valós adatkészlet) attribútummal, és az összehasonlítás alapján követi az ágat, és a következő csomópontra ugrik.
tömböket használó struktúrák c
A következő csomópontnál az algoritmus ismét összehasonlítja az attribútum értékét a többi alcsomóponttal, és továbblép. A folyamatot addig folytatja, amíg el nem éri a fa levélcsomópontját. A teljes folyamat jobban megérthető az alábbi algoritmus segítségével:
Példa: Tegyük fel, hogy van egy jelölt, akinek állásajánlata van, és el akarja dönteni, hogy elfogadja-e az ajánlatot, vagy sem. Tehát a probléma megoldásához a döntési fa a gyökércsomóponttal kezdődik (ASM fizetés attribútum). A gyökércsomópont tovább oszlik a következő döntési csomópontra (az irodától való távolság) és egy levélcsomópontra a megfelelő címkék alapján. A következő döntési csomópont további felosztásra kerül egy döntési csomópontra (Cab létesítmény) és egy levél csomópontra. Végül a döntési csomópont két levélcsomópontra oszlik (Elfogadott ajánlatok és Elutasított ajánlat). Tekintsük az alábbi diagramot:
Tulajdonságkiválasztási intézkedések
A döntési fa megvalósítása során felmerül a fő probléma, hogy hogyan lehet kiválasztani a legjobb attribútumot a gyökércsomóponthoz és az alcsomópontokhoz. Tehát az ilyen problémák megoldására létezik egy technika, amelyet ún Attribútum kiválasztási mérték vagy ASM. Ezzel a méréssel könnyen kiválaszthatjuk a legjobb attribútumot a fa csomópontjaihoz. Az ASM számára két népszerű technika létezik, amelyek a következők:
1. Információszerzés:
- Az információnyereség az entrópia változásainak mérése egy adatkészlet attribútum alapján történő szegmentálása után.
- Kiszámítja, hogy egy szolgáltatás mennyi információt nyújt számunkra egy osztályról.
- Az információnyereség értékének megfelelően felosztjuk a csomópontot és felépítjük a döntési fát.
- Egy döntési fa algoritmus mindig megpróbálja maximalizálni az információerősítés értékét, és először a legnagyobb információs nyereséggel rendelkező csomópont/attribútum kerül felosztásra. Az alábbi képlet segítségével számítható ki:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Entrópia: Az entrópia egy mérőszám egy adott attribútum szennyeződésének mérésére. Meghatározza az adatok véletlenszerűségét. Az entrópia a következőképpen számítható ki:
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
Ahol,
2. Gini-index:
- A Gini-index a szennyezettség vagy tisztaság mértéke, amelyet a CART (Osztályozási és regressziós fa) algoritmusban a döntési fa létrehozásakor használnak.
- Az alacsony Gini-indexű attribútumot előnyben kell részesíteni a magas Gini-indexszel szemben.
- Csak bináris felosztásokat hoz létre, a CART algoritmus pedig a Gini indexet használja a bináris felosztások létrehozásához.
- A Gini-indexet az alábbi képlettel lehet kiszámítani:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Metszés: Optimális döntési fa létrehozása
A metszés egy olyan folyamat, amely során törlik a fából a szükségtelen csomópontokat az optimális döntési fa létrehozása érdekében.
A túl nagy fa növeli a túlillesztés kockázatát, és előfordulhat, hogy egy kis fa nem rögzíti az adatkészlet minden fontos jellemzőjét. Ezért egy olyan technikát, amely csökkenti a tanulási fa méretét a pontosság csökkentése nélkül, metszésnek nevezik. Főleg kétféle fa létezik metszés használt technológia:
A döntési fa előnyei
- Könnyű megérteni, mivel ugyanazt a folyamatot követi, amelyet az ember követ, miközben a való életben bármilyen döntést hoz.
- Nagyon hasznos lehet döntési problémák megoldásában.
- Segít átgondolni a probléma összes lehetséges kimenetelét.
- Más algoritmusokhoz képest kevesebb adattisztításra van szükség.
A döntési fa hátrányai
- A döntési fa sok réteget tartalmaz, ami bonyolulttá teszi.
- Lehet, hogy túlillesztési problémája van, amely a következővel oldható meg Véletlenszerű erdő algoritmus.
- Több osztálycímke esetén megnőhet a döntési fa számítási bonyolultsága.
A döntési fa Python megvalósítása
Most a határozati fát Python segítségével fogjuk megvalósítani. Ehhez az adatkészletet fogjuk használni user_data.csv ,' amelyet a korábbi osztályozási modellekben használtunk. Ugyanazon adatkészlet használatával összehasonlíthatjuk a döntési fa osztályozóját más osztályozási modellekkel, mint pl KNN SVM, Logisztikai regresszió stb.
faktoriális java
A lépések is változatlanok maradnak, amelyeket alább ismertetünk:
1. Adat-előfeldolgozási lépés:
Az alábbiakban található az előfeldolgozási lépés kódja:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv('user_data.csv') #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test)
A fenti kódban előzetesen feldolgoztuk az adatokat. Ahová betöltöttük az adatkészletet, amely így van megadva:
2. Döntési fa algoritmus illesztése a tréning készlethez
Most illesztjük a modellt az edzéskészlethez. Ehhez importáljuk a DecisionTreeClassifier osztályból sklearn.fa könyvtár. Alább található a hozzá tartozó kód:
#Fitting Decision Tree classifier to the training set From sklearn.tree import DecisionTreeClassifier classifier= DecisionTreeClassifier(criterion='entropy', random_state=0) classifier.fit(x_train, y_train)
A fenti kódban létrehoztunk egy osztályozó objektumot, amelyben két fő paramétert adtunk át;
Alább látható ennek a kimenete:
Out[8]: DecisionTreeClassifier(class_weight=None, criterion='entropy', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=0, splitter='best')
3. A vizsgálati eredmény előrejelzése
Most megjósoljuk a tesztkészlet eredményét. Létrehozunk egy új predikciós vektort y_pred. Alább található a hozzá tartozó kód:
#Predicting the test set result y_pred= classifier.predict(x_test)
Kimenet:
Az alábbi kimeneti képen a becsült kimenet és a valós tesztkimenet látható. Jól látjuk, hogy a predikciós vektorban vannak olyan értékek, amelyek eltérnek a valós vektorértékektől. Ezek előrejelzési hibák.
4. Tesztelje az eredmény pontosságát (Confusion mátrix létrehozása)
A fenti kimenetben azt láttuk, hogy voltak hibás előrejelzések, ezért ha tudni akarjuk a helyes és hibás előrejelzések számát, akkor a zavaros mátrixot kell használnunk. Alább található a hozzá tartozó kód:
térkép java iterátor
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Kimenet:
A fenti kimeneti képen láthatjuk a zavaró mátrixot, amely rendelkezik 6+3= 9 hibás előrejelzés és 62+29=91 helyes jóslat. Ezért elmondhatjuk, hogy más osztályozási modellekhez képest a Döntési fa osztályozó jó előrejelzést adott.
5. Az edzéskészlet eredményének megjelenítése:
Itt vizualizáljuk az edzéskészlet eredményét. A képzési halmaz eredményének megjelenítéséhez grafikont készítünk a döntési fa osztályozóhoz. Az osztályozó igent vagy nemet jósol azoknak a felhasználóknak, akik megvásárolták vagy nem vásárolták meg a SUV-autót, ahogyan azt a Logisztikai regresszióban tettük. Alább található a hozzá tartozó kód:
#Visulaizing the trianing set result from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('purple','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Decision Tree Algorithm (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Kimenet:
A fenti kimenet teljesen eltér a többi osztályozási modelltől. Függőleges és vízszintes vonalakat is tartalmaz, amelyek az életkor és a becsült fizetési változó szerint osztják fel az adatkészletet.
Amint látjuk, a fa megpróbál minden adatkészletet rögzíteni, ami a túlillesztés esete.
6. A tesztkészlet eredményének megjelenítése:
A tesztkészlet eredményének megjelenítése hasonló lesz az edzéskészlet vizualizálásához, azzal a különbséggel, hogy az edzéskészletet felváltja a tesztkészlet.
#Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('purple','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Decision Tree Algorithm(Test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Kimenet:
Amint a fenti képen láthatjuk, a lila régión belül van néhány zöld adatpont és fordítva. Tehát ezek azok a helytelen előrejelzések, amelyeket a zavaros mátrixban tárgyaltunk.