logo

Sprendimų medžio klasifikavimo algoritmas

  • Sprendimų medis yra a Prižiūrima mokymosi technika kuris gali būti naudojamas tiek klasifikavimo, tiek regresijos uždaviniams spręsti, tačiau dažniausiai jis yra tinkamas klasifikavimo problemoms spręsti. Tai medžio struktūros klasifikatorius, kur vidiniai mazgai reprezentuoja duomenų rinkinio ypatybes, šakos – sprendimo taisykles ir kiekvienas lapo mazgas reiškia rezultatą.
  • Sprendimų medyje yra du mazgai, kurie yra Sprendimo mazgas ir Lapų mazgas. Sprendimų mazgai naudojami priimant bet kokį sprendimą ir turi kelias šakas, o lapų mazgai yra tų sprendimų išvestis ir juose nėra jokių papildomų šakų.
  • Sprendimai arba testas atliekami remiantis duoto duomenų rinkinio ypatybėmis.
  • Tai grafinis vaizdas, leidžiantis gauti visus galimus problemos / sprendimo sprendimus, pagrįstus nurodytomis sąlygomis.
  • Jis vadinamas sprendimų medžiu, nes, kaip ir medis, jis prasideda nuo šaknies mazgo, kuris plečiasi į kitas šakas ir sukuria į medį panašią struktūrą.
  • Norėdami pastatyti medį, naudojame CART algoritmas, kuri reiškia Klasifikavimo ir regresijos medžio algoritmas.
  • Sprendimų medis tiesiog užduoda klausimą ir, remdamasis atsakymu (Taip/Ne), toliau skaido medį į pomedžius.
  • Žemiau esančioje diagramoje paaiškinama bendra sprendimų medžio struktūra:

Pastaba: sprendimų medyje gali būti kategorinių duomenų (TAIP/NE) ir skaitmeninių duomenų.

Sprendimų medžio klasifikavimo algoritmas

Kodėl verta naudoti sprendimų medžius?

Yra įvairių mašininio mokymosi algoritmų, todėl kuriant mašininio mokymosi modelį svarbiausia yra pasirinkti geriausią algoritmą duotam duomenų rinkiniui ir problemai. Toliau pateikiamos dvi sprendimų medžio naudojimo priežastys:

  • Sprendimų medžiai dažniausiai imituoja žmogaus mąstymo gebėjimus priimant sprendimą, todėl jį lengva suprasti.
  • Sprendimų medžio logika gali būti lengvai suprantama, nes ji rodo į medį panašią struktūrą.

Sprendimų medžio terminijos

Šakninis mazgas:Šakninis mazgas yra ta vieta, kur prasideda sprendimų medis. Tai reiškia visą duomenų rinkinį, kuris toliau padalijamas į du ar daugiau vienarūšių rinkinių.Lapo mazgas:Lapų mazgai yra galutinis išvesties mazgas, o gavus lapo mazgą medžio negalima toliau atskirti.Padalijimas:Padalijimas – tai sprendimo mazgo/šakninio mazgo padalijimas į submazgus pagal nurodytas sąlygas.Filialas / pomedis:Medis, susidaręs skeliant medį.Genėjimas:Genėjimas yra nepageidaujamų šakų pašalinimas iš medžio.Tėvo / vaiko mazgas:Šakninis medžio mazgas vadinamas pirminiu mazgu, o kiti mazgai – antriniais mazgais.

Kaip veikia sprendimų medžio algoritmas?

Sprendimų medyje, norint nuspėti duoto duomenų rinkinio klasę, algoritmas prasideda nuo šakninio medžio mazgo. Šis algoritmas lygina šaknies atributo reikšmes su įrašo (tikrojo duomenų rinkinio) atributu ir, remdamasis palyginimu, seka šaką ir pereina į kitą mazgą.

Kito mazgo algoritmas vėl lygina atributo reikšmę su kitais submazgais ir juda toliau. Jis tęsia procesą, kol pasiekia medžio lapo mazgą. Visą procesą galima geriau suprasti naudojant toliau pateiktą algoritmą:

    1 žingsnis:Pradėkite medį nuo šaknies mazgo, sako S, kuriame yra visas duomenų rinkinys.2 žingsnis:Raskite geriausią atributą duomenų rinkinyje naudodami Atributų pasirinkimo priemonė (ASM). 3 veiksmas:Padalinkite S į poaibius, kuriuose yra galimos geriausių atributų reikšmės.4 veiksmas:Sugeneruokite sprendimų medžio mazgą, kuriame yra geriausias atributas.5 veiksmas:Rekursyviai sukurkite naujus sprendimų medžius naudodami duomenų rinkinio, sukurto atliekant -3 veiksmą, poaibius. Tęskite šį procesą, kol pasieksite stadiją, kai nebegalite klasifikuoti mazgų, o galutinis mazgas vadinamas lapo mazgu.

Pavyzdys: Tarkime, kad yra kandidatas, kuris turi darbo pasiūlymą ir nori nuspręsti, ar jis turėtų priimti pasiūlymą, ar ne. Taigi, norint išspręsti šią problemą, sprendimų medis prasideda šakniniu mazgu (ASM atributas atlyginimas). Šakninis mazgas toliau skaidomas į kitą sprendimo mazgą (atstumas nuo biuro) ir vieną lapo mazgą pagal atitinkamas etiketes. Kitas sprendimo mazgas toliau padalijamas į vieną sprendimo mazgą (kabinos įrenginį) ir vieną lapo mazgą. Galiausiai sprendimo mazgas padalijamas į du lapų mazgus (Priimti pasiūlymai ir Atmesti pasiūlymai). Apsvarstykite žemiau pateiktą diagramą:

Sprendimų medžio klasifikavimo algoritmas

Atributų pasirinkimo priemonės

Diegiant sprendimų medį, iškyla pagrindinė problema, kaip pasirinkti geriausią šakninio mazgo ir antrinių mazgų atributą. Taigi, norint išspręsti tokias problemas, yra technika, kuri vadinama kaip Atributo pasirinkimo matas arba ASM. Šiuo matavimu galime lengvai pasirinkti geriausią medžio mazgų atributą. Yra du populiarūs ASM metodai, kurie yra:

    Informacijos gavimas Gini indeksas

1. Informacijos gavimas:

  • Informacijos padidėjimas yra entropijos pokyčių matavimas po duomenų rinkinio segmentavimo pagal atributą.
  • Jis apskaičiuoja, kiek informacijos apie klasę mums suteikia funkcija.
  • Pagal informacijos gavimo vertę padaliname mazgą ir sukuriame sprendimų medį.
  • Sprendimų medžio algoritmas visada stengiasi maksimaliai padidinti informacijos padidėjimo vertę, o mazgas / atributas, turintis didžiausią informacijos padidėjimą, yra padalinamas pirmiausia. Jį galima apskaičiuoti naudojant šią formulę:
 Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature) 

Entropija: Entropija yra metrika, skirta išmatuoti tam tikro atributo priemaišą. Jis nurodo duomenų atsitiktinumą. Entropiją galima apskaičiuoti taip:

Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)

kur,

    S = bendras mėginių skaičius P(taip) = taip tikimybė P(ne)= ne tikimybė

2. Gini indeksas:

  • Gini indeksas yra priemaišų arba grynumo matas, naudojamas kuriant sprendimų medį CART (klasifikavimo ir regresijos medžio) algoritme.
  • Reikėtų teikti pirmenybę atributui su žemu Gini indeksu, palyginti su aukštu Gini indeksu.
  • Jis sukuria tik dvejetainius padalijimus, o CART algoritmas naudoja Gini indeksą, kad sukurtų dvejetainius padalijimus.
  • Gini indeksą galima apskaičiuoti pagal šią formulę:
 Gini Index= 1- &#x2211;<sub>j</sub>P<sub>j</sub><sup>2</sup> 

Genėjimas: gauti optimalų sprendimų medį

Genėjimas yra nereikalingų mazgų pašalinimo iš medžio procesas, siekiant gauti optimalų sprendimų medį.

Per didelis medis padidina permontavimo riziką, o mažas medis gali neužfiksuoti visų svarbių duomenų rinkinio ypatybių. Todėl metodas, kuris sumažina mokymosi medžio dydį nesumažinant tikslumo, yra žinomas kaip genėjimas. Iš esmės yra dviejų rūšių medžiai genėjimas naudojama technologija:

    Išlaidų sudėtingumo genėjimas Sumažėjusi genėjimo klaida.

Sprendimų medžio privalumai

  • Tai paprasta suprasti, nes vyksta tas pats procesas, kurio laikosi žmogus, priimdamas bet kokį sprendimą realiame gyvenime.
  • Tai gali būti labai naudinga sprendžiant su sprendimais susijusias problemas.
  • Tai padeda apgalvoti visas galimas problemos pasekmes.
  • Duomenų valymo poreikis yra mažesnis, palyginti su kitais algoritmais.

Sprendimų medžio trūkumai

  • Sprendimų medyje yra daug sluoksnių, todėl jis sudėtingas.
  • Gali kilti permontavimo problema, kurią galima išspręsti naudojant Atsitiktinis miško algoritmas.
  • Jei yra daugiau klasių etikečių, sprendimų medžio skaičiavimo sudėtingumas gali padidėti.

Python sprendimų medžio įgyvendinimas

Dabar mes įdiegsime sprendimų medį naudodami Python. Tam naudosime duomenų rinkinį „ user_data.csv “, kurį naudojome ankstesniuose klasifikavimo modeliuose. Naudodami tą patį duomenų rinkinį, galime palyginti sprendimų medžio klasifikatorių su kitais klasifikavimo modeliais, tokiais kaip KNN SVM, Logistinė regresija ir kt.

masyvas java

Veiksmai taip pat išliks tokie patys, kurie pateikiami toliau:

    Duomenų išankstinio apdorojimo žingsnis Sprendimų medžio algoritmo pritaikymas mokymo rinkiniui Testo rezultato numatymas Rezultato tikslumo patikrinimas (sumišimo matricos kūrimas) Testo rinkinio rezultato vizualizavimas.

1. Išankstinio duomenų apdorojimo veiksmas:

Toliau pateikiamas išankstinio apdorojimo veiksmo kodas:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv(&apos;user_data.csv&apos;) #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) 

Aukščiau pateiktame kode mes iš anksto apdorojome duomenis. Kur mes įkėlėme duomenų rinkinį, kuris pateikiamas taip:

Sprendimų medžio klasifikavimo algoritmas

2. Sprendimų medžio algoritmo pritaikymas mokymo rinkiniui

Dabar modelį pritaikysime prie treniruočių komplekto. Tam mes importuosime DecisionTreeClassifier klasė nuo sklearn.tree biblioteka. Žemiau yra jo kodas:

 #Fitting Decision Tree classifier to the training set From sklearn.tree import DecisionTreeClassifier classifier= DecisionTreeClassifier(criterion=&apos;entropy&apos;, random_state=0) classifier.fit(x_train, y_train) 

Aukščiau pateiktame kode sukūrėme klasifikatoriaus objektą, kuriame perdavėme du pagrindinius parametrus;

    'criterion='entropija':Kriterijus naudojamas skilimo kokybei matuoti, kuri apskaičiuojama pagal informacijos padidėjimą, kurį suteikia entropija.random_state=0':Atsitiktinių būsenų generavimui.

Žemiau pateikiama išvestis šiam tikslui:

 Out[8]: DecisionTreeClassifier(class_weight=None, criterion=&apos;entropy&apos;, 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=&apos;best&apos;) 

3. Testo rezultato numatymas

Dabar mes prognozuosime testų rinkinio rezultatą. Sukursime naują prognozavimo vektorių y_pred. Žemiau yra jo kodas:

 #Predicting the test set result y_pred= classifier.predict(x_test) 

Išvestis:

Žemiau esančiame išvesties paveikslėlyje pateikiama numatoma išvestis ir tikroji bandomoji išvestis. Aiškiai matome, kad numatymo vektoriuje yra tam tikrų reikšmių, kurios skiriasi nuo realių vektorių reikšmių. Tai yra numatymo klaidos.

Sprendimų medžio klasifikavimo algoritmas

4. Patikrinkite rezultato tikslumą (sumišimo matricos kūrimas)

Aukščiau pateiktame išvestyje matėme, kad buvo keletas neteisingų prognozių, todėl jei norime sužinoti teisingų ir neteisingų prognozių skaičių, turime naudoti painiavos matricą. Žemiau yra jo kodas:

 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Išvestis:

Sprendimų medžio klasifikavimo algoritmas

Aukščiau pateiktame išvesties paveikslėlyje matome painiavos matricą, kuri turi 6+3= 9 neteisingos prognozės ir 62+29=91 teisingos prognozės. Todėl galime pasakyti, kad, palyginti su kitais klasifikavimo modeliais, Sprendimų medžio klasifikatorius padarė gerą prognozę.

5. Treniruočių rinkinio rezultato vizualizavimas:

Čia pavaizduosime treniruočių rinkinio rezultatą. Norėdami vizualizuoti mokymo rinkinio rezultatą, pavaizduosime sprendimų medžio klasifikatoriaus grafiką. Klasifikatorius nuspės „taip“ arba „ne“ naudotojams, kurie įsigijo arba neįsigijo visureigio automobilį, kaip tai padarėme Logistinėje regresijoje. Žemiau yra jo kodas:

 #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((&apos;purple&apos;,&apos;green&apos; ))) 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((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm (Training set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Išvestis:

Sprendimų medžio klasifikavimo algoritmas

Aukščiau pateikta produkcija visiškai skiriasi nuo kitų klasifikavimo modelių. Jame yra vertikalios ir horizontalios linijos, kurios padalija duomenų rinkinį pagal amžių ir numatomo atlyginimo kintamąjį.

Kaip matome, medis bando užfiksuoti kiekvieną duomenų rinkinį, o tai yra per didelio pritaikymo atvejis.

6. Testo rinkinio rezultato vizualizavimas:

Testo rinkinio rezultato vizualizacija bus panaši į treniruočių rinkinio vizualizaciją, išskyrus tai, kad treniruočių rinkinys bus pakeistas testo rinkiniu.

 #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((&apos;purple&apos;,&apos;green&apos; ))) 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((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm(Test set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Išvestis:

Sprendimų medžio klasifikavimo algoritmas

Kaip matome aukščiau esančiame paveikslėlyje, violetinėje srityje yra keletas žalių duomenų taškų ir atvirkščiai. Taigi, tai yra neteisingos prognozės, kurias aptarėme painiavos matricoje.