- Lēmumu koks ir a Uzraudzīta mācību tehnika ko var izmantot gan klasifikācijas, gan regresijas uzdevumiem, bet pārsvarā tas ir vēlams klasifikācijas uzdevumu risināšanai. Tas ir koku strukturēts klasifikators, kur iekšējie mezgli attēlo datu kopas pazīmes, zari apzīmē lēmuma pieņemšanas noteikumus un katrs lapas mezgls atspoguļo rezultātu.
- Lēmumu kokā ir divi mezgli, kas ir Lēmuma mezgls un Lapu mezgls. Lēmuma mezgli tiek izmantoti, lai pieņemtu jebkuru lēmumu, un tiem ir vairākas filiāles, savukārt lapu mezgli ir šo lēmumu izvade, un tajos nav papildu zaru.
- Lēmumi vai pārbaude tiek veikti, pamatojoties uz dotās datu kopas iezīmēm.
- To sauc par lēmumu koku, jo, līdzīgi kā koks, tas sākas ar saknes mezglu, kas izplešas uz tālākiem zariem un veido kokam līdzīgu struktūru.
- Lai izveidotu koku, mēs izmantojam CART algoritms, kas apzīmē Klasifikācijas un regresijas koka algoritms.
- Lēmumu koks vienkārši uzdod jautājumu, un, pamatojoties uz atbildi (Jā/Nē), tas tālāk sadala koku apakškokos.
- Zemāk redzamajā diagrammā ir izskaidrota lēmumu koka vispārējā struktūra:
Piezīme. Lēmumu koks var saturēt kategoriskus datus (JĀ/NĒ), kā arī skaitliskus datus.
Kāpēc izmantot lēmumu kokus?
Mašīnmācībā ir dažādi algoritmi, tāpēc, veidojot mašīnmācīšanās modeli, galvenais ir atcerēties labāko algoritmu konkrētajai datu kopai un problēmai. Tālāk ir norādīti divi lēmumu koka izmantošanas iemesli.
mamma kulkarni aktieris
- Lēmumu koki parasti atdarina cilvēka domāšanas spējas, pieņemot lēmumu, tāpēc to ir viegli saprast.
- Lēmumu koka loģiku var viegli saprast, jo tā parāda kokam līdzīgu struktūru.
Lēmumu koka terminoloģijas
Kā darbojas Lēmumu koka algoritms?
Lēmumu kokā, lai prognozētu dotās datu kopas klasi, algoritms sākas no koka saknes mezgla. Šis algoritms salīdzina saknes atribūta vērtības ar ieraksta (reālās datu kopas) atribūtu un, pamatojoties uz salīdzinājumu, seko zaram un pāriet uz nākamo mezglu.
Nākamajam mezglam algoritms atkal salīdzina atribūta vērtību ar citiem apakšmezgliem un virzās tālāk. Tas turpina procesu, līdz sasniedz koka lapas mezglu. Visu procesu var labāk izprast, izmantojot tālāk norādīto algoritmu:
Piemērs: Pieņemsim, ka ir kāds kandidāts, kuram ir darba piedāvājums un kurš vēlas izlemt, vai viņam šis piedāvājums jāpieņem vai nē. Tātad, lai atrisinātu šo problēmu, lēmumu koks sākas ar saknes mezglu (ASM atribūts Alga). Saknes mezgls tālāk sadalās nākamajā lēmuma pieņemšanas mezglā (attālums no biroja) un vienā lapas mezglā, pamatojoties uz atbilstošajām etiķetēm. Nākamais lēmumu pieņemšanas mezgls tiek sadalīts vienā lēmuma pieņemšanas mezglā (Cab iekārta) un vienā lapas mezglā. Visbeidzot, lēmuma mezgls tiek sadalīts divos lapu mezglos (pieņemtie piedāvājumi un noraidītie piedāvājumi). Apsveriet tālāk redzamo diagrammu:
Atribūtu atlases pasākumi
Ieviešot lēmumu koku, galvenā problēma rodas, kā izvēlēties labāko atribūtu saknes mezglam un apakšmezgliem. Tātad, lai atrisinātu šādas problēmas, ir tehnika, ko sauc par Atribūtu atlases mērs vai ASM. Ar šo mērījumu mēs varam viegli izvēlēties labāko koka mezglu atribūtu. Ir divas populāras ASM metodes, kas ir:
1. Informācijas iegūšana:
- Informācijas ieguvums ir entropijas izmaiņu mērīšana pēc datu kopas segmentācijas, pamatojoties uz atribūtu.
- Tas aprēķina, cik daudz informācijas līdzeklis mums sniedz par klasi.
- Atbilstoši informācijas ieguves vērtībai mēs sadalām mezglu un izveidojam lēmumu koku.
- Lēmumu koka algoritms vienmēr cenšas maksimāli palielināt informācijas ieguves vērtību, un vispirms tiek sadalīts mezgls/atribūts ar vislielāko informācijas pieaugumu. To var aprēķināt, izmantojot šādu formulu:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Entropija: Entropija ir metrika, lai izmērītu piemaisījumu noteiktā atribūtā. Tas norāda datu nejaušību. Entropiju var aprēķināt šādi:
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
kur,
2. Džini indekss:
- Džini indekss ir piemaisījumu vai tīrības mērs, ko izmanto, veidojot lēmumu koku CART (klasifikācijas un regresijas koka) algoritmā.
- Salīdzinājumā ar augstu Džini indeksu ir jādod priekšroka atribūtam ar zemu Džini indeksu.
- Tas rada tikai bināros sadalījumus, un CART algoritms izmanto Džini indeksu, lai izveidotu bināros sadalījumus.
- Džini indeksu var aprēķināt, izmantojot šādu formulu:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Atzarošana: optimāla lēmuma koka iegūšana
Atzarošana ir nevajadzīgo mezglu dzēšanas process no koka, lai iegūtu optimālo lēmumu koku.
Pārāk liels koks palielina pārklāšanās risku, un mazs koks var neaptvert visas svarīgās datu kopas funkcijas. Tāpēc paņēmienu, kas samazina mācību koka izmēru, nesamazinot precizitāti, sauc par atzarošanu. Galvenokārt ir divu veidu koki atzarošana izmantotā tehnoloģija:
Lēmumu koka priekšrocības
- To ir viegli saprast, jo tas notiek pēc tā paša procesa, ko cilvēks ievēro, pieņemot jebkuru lēmumu reālajā dzīvē.
- Tas var būt ļoti noderīgs ar lēmumu saistītu problēmu risināšanā.
- Tas palīdz pārdomāt visus iespējamos problēmas iznākumus.
- Salīdzinot ar citiem algoritmiem, datu tīrīšana ir mazāka prasība.
Lēmumu koka trūkumi
- Lēmumu kokā ir daudz slāņu, kas padara to sarežģītu.
- Iespējams, ka tai ir pārmērīgas uzstādīšanas problēma, ko var atrisināt, izmantojot Random Forest algoritms.
- Ja ir vairāk klašu etiķešu, lēmumu koka skaitļošanas sarežģītība var palielināties.
Python lēmumu koka ieviešana
Tagad mēs ieviesīsim lēmumu koku, izmantojot Python. Šim nolūkam mēs izmantosim datu kopu ' user_data.csv ”, ko esam izmantojuši iepriekšējos klasifikācijas modeļos. Izmantojot to pašu datu kopu, mēs varam salīdzināt lēmumu koka klasifikatoru ar citiem klasifikācijas modeļiem, piemēram, KNN SVM, LogisticRegression utt.
Darbības arī paliks nemainīgas, un tās ir norādītas tālāk:
1. Datu pirmapstrādes darbība:
Zemāk ir kods pirmapstrādes solim:
# 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)
Iepriekš minētajā kodā mēs esam iepriekš apstrādājuši datus. Kur mēs esam ielādējuši datu kopu, kas tiek norādīta šādi:
saraksts kā masīvs
2. Lēmumu koka algoritma pielāgošana apmācības komplektam
Tagad modeli pielāgosim treniņu komplektam. Šim nolūkam mēs importēsim DecisionTreeClassifier klase no sklearn.tree bibliotēka. Zemāk ir tā kods:
#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)
Iepriekš minētajā kodā esam izveidojuši klasifikatora objektu, kurā esam nodevuši divus galvenos parametrus;
Zemāk ir šī izvade:
kas ir ziemas guļas režīms
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. Pārbaudes rezultāta prognozēšana
Tagad mēs prognozēsim testa komplekta rezultātu. Mēs izveidosim jaunu prognožu vektoru y_pred. Zemāk ir tā kods:
#Predicting the test set result y_pred= classifier.predict(x_test)
Izvade:
Zemāk esošajā izvades attēlā ir norādīta paredzamā izvade un reālā testa izvade. Mēs skaidri redzam, ka prognozēšanas vektorā ir dažas vērtības, kas atšķiras no reālajām vektora vērtībām. Tās ir prognozēšanas kļūdas.
4. Pārbaudiet rezultāta precizitāti (apjukuma matricas izveide)
Iepriekš minētajā izvadā mēs redzējām, ka ir bijušas dažas nepareizas prognozes, tādēļ, ja vēlamies uzzināt pareizo un nepareizo prognožu skaitu, mums ir jāizmanto neskaidrības matrica. Zemāk ir tā kods:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Izvade:
Iepriekš redzamajā izvades attēlā mēs varam redzēt neskaidrības matricu, kurai ir 6+3= 9 nepareizas prognozes un 62+29=91 pareiza prognoze. Tāpēc mēs varam teikt, ka, salīdzinot ar citiem klasifikācijas modeļiem, Lēmumu koka klasifikators sniedza labu prognozi.
5. Treniņkomplekta rezultāta vizualizācija:
Šeit mēs vizualizēsim treniņu komplekta rezultātu. Lai vizualizētu apmācības kopas rezultātu, mēs uzzīmēsim grafiku lēmumu koka klasifikatoram. Klasifikators prognozēs jā vai nē lietotājiem, kuri ir iegādājušies vai nav iegādājušies SUV automašīnu, kā mēs to darījām loģistikas regresijā. Zemāk ir tā kods:
gigabaits pret megabaitu
#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()
Izvade:
Iepriekš minētā produkcija pilnībā atšķiras no pārējiem klasifikācijas modeļiem. Tajā ir gan vertikālas, gan horizontālas līnijas, kas sadala datu kopu atbilstoši vecumam un aplēstās algas mainīgajam.
Kā redzam, koks mēģina tvert katru datu kopu, kas ir pārmērības gadījumā.
6. Testa kopas rezultāta vizualizācija:
Testa komplekta rezultāta vizualizācija būs līdzīga treniņu komplekta vizualizācijai, izņemot to, ka treniņu komplekts tiks aizstāts ar testa komplektu.
#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()
Izvade:
Kā redzams iepriekš redzamajā attēlā, purpursarkanajā reģionā ir daži zaļi datu punkti un otrādi. Tātad, šīs ir nepareizās prognozes, kuras mēs esam apsprieduši neskaidrības matricā.