- Odločitveno drevo je a Tehnika nadzorovanega učenja ki se lahko uporablja tako za probleme s klasifikacijo kot za regresijo, vendar je večinoma prednostna za reševanje problemov s klasifikacijo. Je drevesno strukturiran klasifikator, kjer notranja vozlišča predstavljajo značilnosti nabora podatkov, veje predstavljajo pravila odločanja in vsak listni vozel predstavlja rezultat.
- V odločitvenem drevesu sta dve vozlišči, ki sta Odločitveno vozlišče in Listni vozel. Odločitvena vozlišča se uporabljajo za sprejemanje kakršne koli odločitve in imajo več vej, medtem ko so listna vozlišča rezultat teh odločitev in ne vsebujejo nobenih nadaljnjih vej.
- Odločitve ali test se izvajajo na podlagi značilnosti danega niza podatkov.
- Imenuje se odločitveno drevo, ker se, podobno kot drevo, začne s korenskim vozliščem, ki se razširi na nadaljnje veje in zgradi drevesno strukturo.
- Da bi zgradili drevo, uporabljamo CART algoritem, ki stoji za Klasifikacijski in regresijski algoritem drevesa.
- Odločitveno drevo preprosto postavi vprašanje in na podlagi odgovora (Da/Ne) razdeli drevo na poddrevesa.
- Spodnji diagram pojasnjuje splošno strukturo odločitvenega drevesa:
Opomba: Odločitveno drevo lahko vsebuje tako kategorične podatke (DA/NE) kot tudi numerične podatke.
Zakaj uporabljati drevesa odločanja?
V strojnem učenju obstajajo različni algoritmi, zato je izbira najboljšega algoritma za dani nabor podatkov in problem glavna točka, ki si jo morate zapomniti pri ustvarjanju modela strojnega učenja. Spodaj sta dva razloga za uporabo odločitvenega drevesa:
- Odločitvena drevesa običajno posnemajo človeško sposobnost razmišljanja med sprejemanjem odločitev, zato jih je enostavno razumeti.
- Logika odločitvenega drevesa je zlahka razumljiva, saj prikazuje drevesno strukturo.
Terminologije drevesa odločanja
Kako deluje algoritem odločitvenega drevesa?
V odločitvenem drevesu se za napovedovanje razreda danega nabora podatkov algoritem začne pri korenskem vozlišču drevesa. Ta algoritem primerja vrednosti atributa root z atributom record (real dataset) in na podlagi primerjave sledi veji in skoči na naslednje vozlišče.
Za naslednje vozlišče algoritem znova primerja vrednost atributa z drugimi podvozlišči in se premakne naprej. Postopek nadaljuje, dokler ne doseže listnega vozla drevesa. Celoten postopek je mogoče bolje razumeti z uporabo spodnjega algoritma:
primer: Recimo, da obstaja kandidat, ki ima ponudbo za delo in se želi odločiti, ali naj ponudbo sprejme ali ne. Za rešitev tega problema se odločitveno drevo začne s korenskim vozliščem (atribut plače ASM). Korensko vozlišče se nadalje razdeli na naslednje vozlišče odločitve (oddaljenost od pisarne) in eno listno vozlišče na podlagi ustreznih oznak. Naslednje odločitveno vozlišče se nadalje razdeli na eno odločitveno vozlišče (kabina) in eno listno vozlišče. Končno se vozlišče odločitve razdeli na dve listni vozlišči (Sprejete ponudbe in Zavrnjena ponudba). Razmislite o spodnjem diagramu:
Mere izbire atributov
Med implementacijo odločitvenega drevesa se pojavi glavno vprašanje, kako izbrati najboljši atribut za korensko vozlišče in podvozlišča. Torej, za reševanje takšnih težav obstaja tehnika, ki se imenuje as Izbirna mera atributa ali ASM. S to meritvijo lahko enostavno izberemo najboljši atribut za vozlišča drevesa. Obstajata dve priljubljeni tehniki za ASM, ki sta:
1. Pridobitev informacij:
- Dobiček informacij je merjenje sprememb entropije po segmentaciji nabora podatkov na podlagi atributa.
- Izračuna, koliko informacij nam funkcija zagotovi o razredu.
- Glede na vrednost pridobitve informacij razdelimo vozlišče in zgradimo odločitveno drevo.
- Algoritem odločitvenega drevesa vedno poskuša povečati vrednost pridobitve informacij in najprej se razdeli vozlišče/atribut z največjim pridobitvijo informacij. Izračuna se lahko s spodnjo formulo:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Entropija: Entropija je metrika za merjenje nečistoče v danem atributu. Določa naključnost podatkov. Entropijo lahko izračunamo kot:
java rep
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
Kje,
2. Ginijev indeks:
- Indeks Gini je merilo nečistoče ali čistosti, ki se uporablja pri ustvarjanju odločitvenega drevesa v algoritmu CART (Classification and Regression Tree).
- Atribut z nizkim Ginijevim indeksom bi moral imeti prednost pred visokim Ginijevim indeksom.
- Ustvari samo binarne razcepe, algoritem CART pa za ustvarjanje binarnih razcepov uporablja indeks Gini.
- Indeks Gini lahko izračunate s spodnjo formulo:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Obrezovanje: pridobivanje optimalnega odločitvenega drevesa
Obrezovanje je postopek brisanja nepotrebnih vozlišč iz drevesa, da bi dobili optimalno drevo odločitev.
Preveliko drevo poveča tveganje prevelikega opremljanja, majhno drevo pa morda ne bo zajelo vseh pomembnih lastnosti nabora podatkov. Zato je tehnika, ki zmanjša velikost učnega drevesa brez zmanjšanja natančnosti, znana kot obrezovanje. Obstajata predvsem dve vrsti dreves obrezovanje uporabljena tehnologija:
Prednosti odločitvenega drevesa
- Preprosto ga je razumeti, saj sledi istemu procesu, kot ga sledi človek pri sprejemanju kakršne koli odločitve v resničnem življenju.
- Lahko je zelo koristen za reševanje težav, povezanih z odločanjem.
- Pomaga razmišljati o vseh možnih izidih težave.
- Čiščenje podatkov je manjše kot pri drugih algoritmih.
Slabosti odločitvenega drevesa
- Odločitveno drevo vsebuje veliko plasti, zaradi česar je zapleteno.
- Morda ima težavo s preobremenitvijo, ki jo je mogoče rešiti z uporabo Algoritem naključnega gozda.
- Za več oznak razredov se lahko računska kompleksnost odločitvenega drevesa poveča.
Izvedba odločitvenega drevesa v Pythonu
Zdaj bomo implementirali drevo odločitev z uporabo Pythona. Za to bomo uporabili nabor podatkov ' uporabniški_podatki.csv ,« ki smo ga uporabili v prejšnjih klasifikacijskih modelih. Z uporabo istega nabora podatkov lahko primerjamo klasifikator drevesa odločitev z drugimi modeli klasifikacije, kot je npr KNN SVM, Logistična regresija itd.
Tudi koraki bodo ostali enaki, ki so navedeni spodaj:
1. Korak predhodne obdelave podatkov:
Spodaj je koda za korak predhodne obdelave:
kakšna je velikost mojega monitorja
# 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)
V zgornji kodi smo predhodno obdelali podatke. Kam smo naložili nabor podatkov, ki je podan kot:
2. Prilagajanje algoritma odločitvenega drevesa naboru za usposabljanje
Zdaj bomo model prilagodili kompletu za usposabljanje. Za to bomo uvozili DecisionTreeClassifier razred od sklearn.tree knjižnica. Spodaj je koda zanj:
#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)
V zgornji kodi smo ustvarili objekt klasifikatorja, v katerega smo posredovali dva glavna parametra;
Spodaj je izhod za to:
string.compareto c#
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. Predvidevanje rezultata testa
Zdaj bomo napovedali rezultat testnega niza. Ustvarili bomo nov napovedni vektor y_pred. Spodaj je koda zanj:
#Predicting the test set result y_pred= classifier.predict(x_test)
Izhod:
Na spodnji izhodni sliki sta podana predvideni izhod in dejanski izhod preskusa. Jasno lahko vidimo, da so v vektorju napovedi nekatere vrednosti, ki se razlikujejo od dejanskih vrednosti vektorja. To so napake napovedi.
4. Test točnosti rezultata (Creation of Confusion matrix)
V zgornjem izhodu smo videli, da je bilo nekaj nepravilnih napovedi, zato moramo, če želimo izvedeti število pravilnih in nepravilnih napovedi, uporabiti matriko zmede. Spodaj je koda zanj:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Izhod:
Na zgornji izhodni sliki lahko vidimo matriko zmede, ki ima 6+3= 9 napačnih napovedi in 62+29=91 pravilnih napovedi. Zato lahko rečemo, da je v primerjavi z drugimi modeli klasifikacije klasifikator Decision Tree dobro napovedal.
5. Vizualizacija rezultata vadbenega niza:
Tukaj bomo vizualizirali rezultat vadbenega sklopa. Za vizualizacijo rezultata učnega niza bomo izrisali graf za klasifikator drevesa odločitev. Klasifikator bo predvidel da ali ne za uporabnike, ki so bodisi kupili ali niso kupili avtomobil SUV, kot smo storili v logistični regresiji. Spodaj je koda zanj:
#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()
Izhod:
Zgornji rezultat je popolnoma drugačen od ostalih modelov klasifikacije. Ima navpične in vodoravne črte, ki delijo nabor podatkov glede na starost in ocenjeno spremenljivko plače.
oštevilčena abeceda
Kot lahko vidimo, poskuša drevo zajeti vsak nabor podatkov, kar je v primeru prekomernega opremljanja.
6. Vizualizacija rezultata testnega niza:
Vizualizacija rezultata testnega niza bo podobna vizualizaciji vadbenega niza, le da bo vadbeni niz nadomeščen s testnim nizom.
#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()
Izhod:
Kot lahko vidimo na zgornji sliki, je znotraj vijolične regije nekaj zelenih podatkovnih točk in obratno. To so torej nepravilne napovedi, o katerih smo razpravljali v matriki zmede.