- Stablo odlučivanja je a Tehnika učenja pod nadzorom koji se može koristiti i za probleme klasifikacije i za regresiju, ali uglavnom se preferira za rješavanje problema klasifikacije. To je stablo strukturirani klasifikator, gdje unutarnji čvorovi predstavljaju značajke skupa podataka, grane predstavljaju pravila odlučivanja i svaki listni čvor predstavlja ishod.
- U stablu odlučivanja postoje dva čvora, koji su Čvor odluke i Listni čvor. Čvorovi odlučivanja koriste se za donošenje bilo koje odluke i imaju višestruke grane, dok su lisni čvorovi rezultat tih odluka i ne sadrže daljnje grane.
- Odluke ili test se izvode na temelju značajki zadanog skupa podataka.
- Naziva se stablom odlučivanja jer, slično stablu, počinje s korijenskim čvorom, koji se širi na daljnje grane i gradi strukturu nalik stablu.
- Da bismo izgradili stablo, koristimo se CART algoritam, koji stoji za Klasifikacija i algoritam regresijskog stabla.
- Stablo odlučivanja jednostavno postavlja pitanje i na temelju odgovora (Da/Ne) dalje dijeli stablo na podstabla.
- Donji dijagram objašnjava opću strukturu stabla odlučivanja:
Napomena: Stablo odlučivanja može sadržavati kategoričke podatke (DA/NE) kao i numeričke podatke.
Zašto koristiti stabla odlučivanja?
Postoje različiti algoritmi u strojnom učenju, pa je odabir najboljeg algoritma za dani skup podataka i problem glavna točka koju treba zapamtiti prilikom izrade modela strojnog učenja. U nastavku su navedena dva razloga za korištenje stabla odlučivanja:
- Stabla odluka obično oponašaju ljudsku sposobnost razmišljanja dok donose odluke, tako da ih je lako razumjeti.
- Logika iza stabla odlučivanja može se lako razumjeti jer pokazuje strukturu sličnu stablu.
Terminologija stabla odlučivanja
Kako radi algoritam Decision Tree?
npm čišćenje predmemorije
U stablu odlučivanja, za predviđanje klase zadanog skupa podataka, algoritam počinje od korijenskog čvora stabla. Ovaj algoritam uspoređuje vrijednosti korijenskog atributa s atributom zapisa (stvarni skup podataka) i na temelju usporedbe prati granu i skače na sljedeći čvor.
Za sljedeći čvor, algoritam ponovno uspoređuje vrijednost atributa s drugim podčvorovima i ide dalje. Nastavlja proces dok ne dođe do lisnog čvora stabla. Cijeli proces može se bolje razumjeti korištenjem donjeg algoritma:
Primjer: Pretpostavimo da postoji kandidat koji ima ponudu za posao i želi odlučiti treba li prihvatiti ponudu ili ne. Dakle, da bi se riješio ovaj problem, stablo odlučivanja počinje s korijenskim čvorom (atribut plaće prema ASM-u). Korijenski čvor dalje se dijeli na sljedeći čvor odluke (udaljenost od ureda) i jedan lisni čvor na temelju odgovarajućih oznaka. Sljedeći čvor odluke dalje se dijeli na jedan čvor odluke (kabina) i jedan lisni čvor. Konačno, čvor odluke dijeli se na dva lisna čvora (Prihvaćene ponude i Odbijena ponuda). Razmotrite dijagram u nastavku:
Mjere odabira atributa
Tijekom implementacije stabla odlučivanja, glavno pitanje se javlja kako odabrati najbolji atribut za korijenski čvor i za podčvorove. Dakle, za rješavanje takvih problema postoji tehnika koja se zove as Mjera odabira atributa ili ASM. Ovim mjerenjem možemo lako odabrati najbolji atribut za čvorove stabla. Postoje dvije popularne tehnike za ASM, a to su:
1. Dobitak informacija:
- Dobitak informacija je mjerenje promjena u entropiji nakon segmentacije skupa podataka na temelju atributa.
- Izračunava koliko nam informacija značajka daje o klasi.
- Prema vrijednosti dobivenih informacija, dijelimo čvor i gradimo stablo odlučivanja.
- Algoritam stabla odlučivanja uvijek pokušava maksimizirati vrijednost dobitka informacija, a čvor/atribut koji ima najveći dobitak informacija se prvi dijeli. Može se izračunati pomoću formule u nastavku:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Entropija: Entropija je metrika za mjerenje nečistoće u određenom atributu. Određuje slučajnost podataka. Entropija se može izračunati kao:
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
Gdje,
abeceda u brojevima
2. Ginijev indeks:
- Ginijev indeks je mjera nečistoće ili čistoće koja se koristi pri stvaranju stabla odlučivanja u algoritmu CART (Classification and Regression Tree).
- Atribut s niskim Ginijevim indeksom trebao bi imati prednost u usporedbi s visokim Ginijevim indeksom.
- Stvara samo binarne podjele, a algoritam CART koristi Gini indeks za izradu binarnih podjela.
- Ginijev indeks može se izračunati pomoću formule u nastavku:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Obrezivanje: dobivanje optimalnog stabla odlučivanja
Obrezivanje je proces brisanja nepotrebnih čvorova iz stabla kako bi se dobilo optimalno stablo odlučivanja.
Preveliko stablo povećava rizik od pretjeranog opremanja, a malo stablo možda neće obuhvatiti sve važne značajke skupa podataka. Stoga je tehnika koja smanjuje veličinu stabla učenja bez smanjenja točnosti poznata kao obrezivanje. Postoje uglavnom dvije vrste drveća obrezivanje korištena tehnologija:
Prednosti stabla odlučivanja
- Lako ga je razumjeti jer slijedi isti proces koji čovjek slijedi dok donosi bilo koju odluku u stvarnom životu.
- Može biti vrlo koristan za rješavanje problema povezanih s odlučivanjem.
- Pomaže razmišljanje o svim mogućim ishodima problema.
- Manje je potrebno čišćenje podataka u usporedbi s drugim algoritmima.
Nedostaci stabla odlučivanja
- Stablo odlučivanja sadrži mnogo slojeva, što ga čini složenim.
- Možda postoji problem s pretjeranim opremanjem, koji se može riješiti pomoću Random Forest algoritam.
- Za više oznaka klase, računalna složenost stabla odlučivanja može se povećati.
Python implementacija stabla odlučivanja
Sada ćemo implementirati stablo odlučivanja koristeći Python. Za ovo ćemo koristiti skup podataka ' korisnički_podaci.csv ,' koje smo koristili u prethodnim modelima klasifikacije. Korištenjem istog skupa podataka, možemo usporediti klasifikator stabla odlučivanja s drugim modelima klasifikacije kao što su KNN SVM, Logistička regresija, itd.
Koraci će također ostati isti, a navedeni su u nastavku:
1. Korak prethodne obrade podataka:
Ispod je kod za korak predobrade:
# 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)
U gornjem kodu unaprijed smo obradili podatke. Gdje smo učitali skup podataka, koji je dan kao:
2. Uklapanje algoritma stabla odlučivanja u skup za obuku
Sada ćemo model prilagoditi setu za vježbanje. Za to ćemo uvesti DecisionTreeClassifier razred od sklearn.drvo knjižnica. Ispod je kod za to:
#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)
U gornjem kodu, stvorili smo objekt klasifikatora, u koji smo proslijedili dva glavna parametra;
Ispod je izlaz za ovo:
np.linspace
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. Predviđanje rezultata testa
Sada ćemo predvidjeti rezultat skupa testova. Stvorit ćemo novi vektor predviđanja y_pred. Ispod je kod za to:
#Predicting the test set result y_pred= classifier.predict(x_test)
Izlaz:
Na donjoj izlaznoj slici dani su predviđeni izlaz i stvarni testni izlaz. Jasno možemo vidjeti da postoje neke vrijednosti u vektoru predviđanja koje se razlikuju od stvarnih vrijednosti vektora. To su pogreške u predviđanju.
4. Ispitajte točnost rezultata (Creation of Confusion matrix)
U gornjem izlazu vidjeli smo da postoje neka netočna predviđanja, pa ako želimo znati broj točnih i netočnih predviđanja, moramo upotrijebiti matricu zabune. Ispod je kod za to:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Izlaz:
watchcartoononline.io alternative
Na gornjoj izlaznoj slici možemo vidjeti matricu zabune koja ima 6+3= 9 netočnih predviđanja i 62+29=91 točna predviđanja. Stoga možemo reći da je u usporedbi s drugim modelima klasifikacije, klasifikator Decision Tree napravio dobru prognozu.
5. Vizualizacija rezultata skupa treninga:
Ovdje ćemo vizualizirati rezultat skupa treninga. Kako bismo vizualizirali rezultat skupa za obuku, iscrtat ćemo graf za klasifikator stabla odlučivanja. Klasifikator će predvidjeti da ili ne za korisnike koji su ili kupili ili nisu kupili SUV automobil kao što smo učinili u logističkoj regresiji. Ispod je kod za to:
#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()
Izlaz:
Gore navedeni rezultat potpuno se razlikuje od ostalih modela klasifikacije. Ima okomite i vodoravne crte koje dijele skup podataka prema dobi i procijenjenoj varijabli plaće.
Kao što vidimo, stablo pokušava uhvatiti svaki skup podataka, što je slučaj prekomjernog opremanja.
6. Vizualizacija rezultata skupa testova:
Vizualizacija rezultata testnog skupa bit će slična vizualizaciji skupa za vježbanje osim što će skup za vježbanje biti zamijenjen testnim skupom.
#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()
Izlaz:
Kao što možemo vidjeti na gornjoj slici, postoje neke zelene podatkovne točke unutar ljubičaste regije i obrnuto. Dakle, ovo su netočna predviđanja o kojima smo raspravljali u matrici zabune.