- Päätöspuu on a Ohjattu oppimistekniikka jota voidaan käyttää sekä luokittelu- että regressiotehtäviin, mutta useimmiten se on parempi luokitteluongelmien ratkaisemiseen. Se on puurakenteinen luokitin, jossa sisäiset solmut edustavat tietojoukon ominaisuuksia, haarat edustavat päätöksentekosääntöjä ja jokainen lehtisolmu edustaa tulosta.
- Päätöspuussa on kaksi solmua, jotka ovat Päätössolmu ja Lehtisolmu. Päätössolmuja käytetään minkä tahansa päätöksen tekemiseen ja niillä on useita haaroja, kun taas lehtisolmut ovat näiden päätösten tulos, eivätkä ne sisällä muita haaroja.
- Päätökset tai testi tehdään tietyn aineiston ominaisuuksien perusteella.
- Sitä kutsutaan päätöspuuksi, koska se, kuten puu, alkaa juurisolmusta, joka laajenee edelleen haaroihin ja muodostaa puumaisen rakenteen.
- Puun rakentamiseen käytämme CART-algoritmi, joka tarkoittaa Luokittelu- ja regressiopuu-algoritmi.
- Päätöspuu yksinkertaisesti kysyy kysymyksen, ja vastauksen (Kyllä/Ei) perusteella se jakaa puun edelleen alipuiksi.
- Alla oleva kaavio selittää päätöspuun yleisen rakenteen:
Huomautus: Päätöspuu voi sisältää kategorista tietoa (KYLLÄ/EI) sekä numeerista tietoa.
Miksi käyttää päätöspuita?
Koneoppimisessa on useita algoritmeja, joten parhaan algoritmin valitseminen annetulle tietojoukolle ja ongelmalle on tärkein asia, joka on muistettava luotaessa koneoppimismallia. Alla on kaksi syytä käyttää päätöspuuta:
q2 kuukautta
- Päätöspuut yleensä jäljittelevät ihmisen ajattelukykyä päätöksenteossa, joten se on helppo ymmärtää.
- Päätöspuun takana oleva logiikka on helposti ymmärrettävissä, koska se näyttää puumaisen rakenteen.
Päätöspuun terminologiat
Miten päätöspuu-algoritmi toimii?
Päätöspuussa tietyn tietojoukon luokan ennustamiseksi algoritmi alkaa puun juurisolmusta. Tämä algoritmi vertaa juuriattribuutin arvoja tietueen (todellisen tietojoukon) attribuutin kanssa ja vertailun perusteella seuraa haaraa ja hyppää seuraavaan solmuun.
Seuraavan solmun kohdalla algoritmi vertaa jälleen attribuutin arvoa muihin alisolmuihin ja siirtyy pidemmälle. Se jatkaa prosessia, kunnes se saavuttaa puun lehtisolmun. Koko prosessi voidaan ymmärtää paremmin käyttämällä alla olevaa algoritmia:
Esimerkki: Oletetaan, että on hakija, jolla on työtarjous ja joka haluaa päättää, pitäisikö hänen hyväksyä tarjous vai ei. Joten tämän ongelman ratkaisemiseksi päätöspuu alkaa juurisolmusta (ASM:n palkkaattribuutti). Juurisolmu jakautuu edelleen seuraavaan päätössolmuun (etäisyys toimistosta) ja yhdeksi lehtisolmuksi vastaavien nimikkeiden perusteella. Seuraava päätössolmu jaetaan edelleen yhdeksi päätössolmuksi (Cab-tila) ja yhdeksi lehtisolmuksi. Lopuksi päätössolmu jakautuu kahteen lehtisolmuun (Hyväksytyt tarjoukset ja Hylätty tarjous). Harkitse alla olevaa kaaviota:
Ominaisuuden valintatoimenpiteet
Päätöspuuta toteutettaessa tärkein kysymys nousee esiin, kuinka valita paras attribuutti juurisolmulle ja alisolmuille. Joten tällaisten ongelmien ratkaisemiseksi on tekniikka, jota kutsutaan nimellä Attribuutin valintamitta tai ASM. Tällä mittauksella voimme helposti valita parhaan attribuutin puun solmuille. ASM:lle on olemassa kaksi suosittua tekniikkaa, jotka ovat:
1. Tietojen saanti:
- Tiedon vahvistus on entropian muutosten mittaus tietojoukon segmentoinnin jälkeen attribuutin perusteella.
- Se laskee, kuinka paljon tietoa ominaisuus tarjoaa meille luokasta.
- Informaatiovahvistuksen arvon mukaan jaamme solmun ja rakennamme päätöspuun.
- Päätöspuualgoritmi yrittää aina maksimoida informaatiovahvistuksen arvon, ja solmu/attribuutti, jolla on suurin informaatiovahvistus, jaetaan ensin. Se voidaan laskea alla olevalla kaavalla:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Haje: Entropia on mittari, jolla mitataan tietyn attribuutin epäpuhtaudet. Se määrittää tietojen satunnaisuuden. Entropia voidaan laskea seuraavasti:
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
Missä,
2. Gini-indeksi:
- Gini-indeksi on epäpuhtauden tai puhtauden mitta, jota käytetään luotaessa päätöspuuta CART (Classification and Regression Tree) -algoritmissa.
- Attribuuttia, jolla on alhainen Gini-indeksi, tulisi suosia korkeaan Gini-indeksiin verrattuna.
- Se luo vain binäärijakoja, ja CART-algoritmi käyttää Gini-indeksiä binääriosien luomiseen.
- Gini-indeksi voidaan laskea seuraavalla kaavalla:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Leikkaaminen: Optimaalisen päätöspuun saaminen
Karsiminen on prosessi, jossa puusta poistetaan tarpeettomat solmut optimaalisen päätöspuun saamiseksi.
Liian suuri puu lisää ylisovituksen riskiä, ja pieni puu ei välttämättä tallenna kaikkia tietojoukon tärkeitä ominaisuuksia. Siksi tekniikkaa, joka pienentää oppimispuun kokoa tarkkuutta heikentämättä, kutsutaan karsimiseksi. Puita on pääasiassa kahta tyyppiä karsiminen käytetty tekniikka:
Päätöspuun edut
- Se on helppo ymmärtää, koska se noudattaa samaa prosessia, jota ihminen noudattaa tehdessään minkä tahansa päätöksen tosielämässä.
- Se voi olla erittäin hyödyllinen päätöksiin liittyvien ongelmien ratkaisemisessa.
- Se auttaa miettimään kaikkia ongelman mahdollisia seurauksia.
- Tietojen puhdistustarve on pienempi verrattuna muihin algoritmeihin.
Päätöspuun haitat
- Päätöspuu sisältää paljon kerroksia, mikä tekee siitä monimutkaisen.
- Sillä voi olla yliasennusongelma, joka voidaan ratkaista käyttämällä Random Forest -algoritmi.
- Jos luokkatunnisteita on enemmän, päätöspuun laskennallinen monimutkaisuus voi kasvaa.
Päätöspuun Python-toteutus
Nyt toteutamme päätöspuun Pythonilla. Tätä varten käytämme tietojoukkoa ' user_data.csv , jota olemme käyttäneet aiemmissa luokitusmalleissa. Käyttämällä samaa tietojoukkoa voimme verrata päätöspuuluokittajaa muihin luokitusmalleihin, kuten KNN SVM, Logistinen regressio jne.
Vaiheet pysyvät samoina, jotka on annettu alla:
1. Tietojen esikäsittelyvaihe:
Alla on esikäsittelyvaiheen koodi:
# 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)
Yllä olevassa koodissa olemme esikäsitelleet tiedot. Mihin olemme ladanneet tietojoukon, joka annetaan seuraavasti:
kokeile saada kiinni javalla
2. Päätöspuu-algoritmin sovittaminen harjoitussarjaan
Nyt sovitamme mallin harjoitussarjaan. Tätä varten tuomme maahan DecisionTreeClassifier luokasta alkaen sklearn.tree kirjasto. Alla on koodi sille:
#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)
Yllä olevaan koodiin olemme luoneet luokitteluobjektin, jossa olemme välittäneet kaksi pääparametria;
Alla on tulos tälle:
Sree Ramanujan
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. Testituloksen ennustaminen
Nyt ennustamme testisarjan tuloksen. Luomme uuden ennustevektorin y_pred. Alla on koodi sille:
#Predicting the test set result y_pred= classifier.predict(x_test)
Lähtö:
Alla olevassa kuvassa on ennustettu lähtö ja todellinen testitulos. Näemme selvästi, että ennustevektorissa on joitain arvoja, jotka poikkeavat todellisista vektoriarvoista. Nämä ovat ennustusvirheitä.
4. Testaa tuloksen tarkkuus (Sekaannusmatriisin luominen)
Yllä olevassa lähdössä olemme nähneet, että siinä oli joitain vääriä ennusteita, joten jos haluamme tietää oikeiden ja väärien ennusteiden lukumäärän, meidän on käytettävä hämmennysmatriisia. Alla on koodi sille:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Lähtö:
Yllä olevassa tuloskuvassa näemme hämmennysmatriisin, jolla on 6+3= 9 väärää ennustetta ja 62+29=91 oikeaa ennustetta. Siksi voidaan sanoa, että muihin luokitusmalleihin verrattuna päätöspuun luokitin teki hyvän ennusteen.
5. Harjoittelusarjan tuloksen visualisointi:
Tässä visualisoimme harjoitussarjan tuloksen. Harjoitusjoukon tuloksen visualisoimiseksi piirrämme kaavion päätöspuuluokittajalle. Luokitin ennustaa kyllä tai ei käyttäjille, jotka ovat joko ostaneet tai eivät ostaneet maastoautoa, kuten teimme Logistic Regressionissa. Alla on koodi sille:
#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()
Lähtö:
Yllä oleva tulos eroaa täysin muista luokitusmalleista. Siinä on sekä pysty- että vaakaviivat, jotka jakavat tietojoukon iän ja arvioidun palkkamuuttujan mukaan.
Kuten näemme, puu yrittää kaapata jokaisen tietojoukon, mikä on ylisovituksen tapaus.
amrita rao näyttelijä
6. Testisarjan tuloksen visualisointi:
Testisarjan tuloksen visualisointi on samanlainen kuin harjoitussarjan visualisointi, paitsi että harjoitussarja korvataan testisarjalla.
#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()
Lähtö:
Kuten yllä olevasta kuvasta näemme, violetilla alueella on vihreitä tietopisteitä ja päinvastoin. Nämä ovat siis vääriä ennusteita, joista olemme keskustelleet sekaannusmatriisissa.